If you are not yet familiar with GraphQL and GraphiQL it is highly recommended to review those pages at first.
The Routing API provides a few related query types:
Note: For more details about these query types you can use the Documentation Explorer provided in GraphiQL.
Note: If the examples provided with an ID do not return what is expected then the ID in question may not be in use any more and you should try again with an existing ID. Rental services are also often seasonal in Finland, which means that the stations or vehicles are not always available from the API.
{
  vehicleRentalStations {
    stationId
    name
    allowPickup
    availableVehicles {
      byType {
        count
        vehicleType {
          formFactor
        }
      }
    }
  }
}{
  vehicleRentalStation(id: "smoove:396") {
    stationId
    name
    availableVehicles {
      byType {
        count
        vehicleType {
          formFactor
        }
      }
    }
    availableSpaces {
      byType {
        count
        vehicleType {
          formFactor
        }
      }
    }
    lat
    lon
    allowDropoff
  }
}{
  rentalVehicles {
    vehicleId
    vehicleType {
      formFactor
      propulsionType
    }
    operative
  }
}{
  rentalVehicles(formFactors: [SCOOTER, SCOOTER_SEATED, SCOOTER_STANDING]) {
    vehicleId
    vehicleType {
      formFactor
      propulsionType
    }
    operative
  }
}Note: IDs of floating vehicles tend to change constantly.
{
  rentalVehicle(id:"bolt_helsinki:04928ae0-aebc-4044-bd95-e5199e7fd0d8") {
    vehicleId
    vehicleType {
      formFactor
      propulsionType
    }
    allowPickupNow
  }
}The vehicle parking areas that can be found from the APIs are meant for park and ride. Other types of parking areas might not be found. Parking data is not available in every routing endpoint.
{
  vehicleParkings {
    vehicleParkingId
    name
    state
    availability {
      carSpaces
      bicycleSpaces
      wheelchairAccessibleCarSpaces
    }
    capacity {
      carSpaces
      bicycleSpaces
      wheelchairAccessibleCarSpaces
    }
  }
}{
  vehicleParking(id:"liipi:974") {
    vehicleParkingId
    name
    state
    availability {
      bicycleSpaces
    }
    capacity {
      bicycleSpaces
    }
  }
}Bike rental can be used by adding mode BICYCLE_RENTAL to modes.
mode does not differentiate between a rental bicycle and a personal bicycle.{
  planConnection(
    origin: {location: {coordinate: {latitude: 60.1641516457, longitude: 24.95003700}}}
    destination: {location: {coordinate: {latitude: 60.188229950, longitude: 24.83785629272}}}
    first: 1
    modes: {direct: [BICYCLE_RENTAL, WALK], transit: {access: [BICYCLE_RENTAL, WALK], egress: [BICYCLE_RENTAL, WALK]}}
  ) {
    edges {
      node {
        start
        end
        legs {
          duration
          mode
          distance
          from {
            lat
            lon
            vehicleRentalStation {
              stationId
              availableVehicles {
                byType {
                  vehicleType {
                    propulsionType
                  }
                  count
                }
              }
            }
          }
          to {
            lat
            lon
            vehicleRentalStation {
              stationId
            }
          }
          start {
            scheduledTime
          }
          end {
            scheduledTime
          }
        }
      }
    }
  }
}{
  planConnection(
    origin: {location: {coordinate: {latitude: 60.168992, longitude: 24.932366}}}
    destination: {location: {coordinate: {latitude: 60.165246, longitude: 24.949128}}}
    modes: {direct: [BICYCLE], directOnly: true}
    first: 1
  ) {
    edges {
      node {
        legs {
          duration
          mode
          distance
          from {
            lat
            lon
            name
          }
          to {
            lat
            lon
            name
          }
          legGeometry {
            points
            length
          }
        }
      }
    }
  }
}{
  planConnection(
    origin: {location: {coordinate: {latitude: 60.1675747130, longitude: 24.9437713623}}}
    destination: {location: {coordinate: {latitude: 60.20011132, longitude: 24.93553161}}}
    modes: {transitOnly:true, transit: {access: BICYCLE, transfer: BICYCLE, egress: BICYCLE}}
    first: 1
  ) {
    edges {
      node {
        legs {
          duration
          mode
          distance
          from {
            lat
            lon
            name
            stop {
              name
            }
          }
          to {
            lat
            lon
            name
            stop {
              name
            }
          }
          legGeometry {
            points
            length
          }
        }
      }
    }
  }
}modes: {transit: {access: [BICYCLE_PARKING]}} returns itinerary, which begins by bicycling to a bike park from which the journey is continued by public transportation{
  planConnection(
    origin: {location: {coordinate: {latitude: 60.18778, longitude: 25.02987}}}
    destination: {location: {coordinate: {latitude: 60.21109, longitude: 25.08094}}}
    first: 3
    modes: {transit: {access: [BICYCLE_PARKING]}}
  ) {
    edges {
      node {
        start
        end
        legs {
          duration
          mode
          distance
          from {
            lat
            lon
          }
          to {
            lat
            lon
            vehicleParking {
              vehicleParkingId
            }
          }
          start {
            scheduledTime
          }
          end {
            scheduledTime
          }
        }
      }
    }
  }
}