MobilityData / gbfs

Documentation for the General Bikeshare Feed Specification, a standardized data feed for shared mobility system availability. Maintained by MobilityData
https://gbfs.org
Other
784 stars 286 forks source link

Add reservation price #401

Closed benwedge closed 1 year ago

benwedge commented 2 years ago

I work for Joyride, a whitelabel solutions company enabling small operators to launch micromobility fleets around the world. Many of our clients use GBFS.

We would like to include a reservation price in the feeds, as some of our clients charge a fee to reserve the vehicle. This appears to be common with our competitors as well based on a market scan.

Please describe some potential solutions you have considered (even if they aren’t related to GBFS).

  1. Adding this information as a flat rate to system_pricing_plans as reservation_price
  2. Adding this information as a variable rate in system_pricing_plans in the same manner as per_min_pricing
  3. Some combination of the two options above for flexibility
  4. Adding this to vehicle_types
  5. Adding this to free_bike_status

Is your potential solution a breaking change?

mplsmitch commented 2 years ago

Hello @benwedge - welcome, it's wonderful to have your input. This a sounds very reasonable to me although I haven't seen much reservation pricing like this in the wild. Can you point to some examples you know of, either on the Joyride platform or elsewhere? thanks!

benwedge commented 2 years ago

This is an example from Bird in Ottawa (non-Joyride), where they charge $0.35 per minute to reserve, with a maximum of 30 min, which suggests we should do this in the manner of per_min_pricing

This is an example from Unlimited Biking (Joyride client), who charges 1 USD for up to 5 minutes. This would suggest that a flat rate pricing plan is needed.

For the Bird example, the rider would be charged per minute for the reservation, then an unlock fee, then a per minute fee on the ride. With the Unlimited Biking example, there is a flat rate to reserve, an unlock fee, and then a per minute fee once the ride begins.

I can do a more comprehensive search if needed to prove how popular this may be.

mplsmitch commented 2 years ago

@benwedge there was some work done on reservations a while back when we were working on integrating carsharing but the only thing that ultimately made it in the spec was default_reserve_time as part of vehicle_types in v2.3-RC2. I think this belongs in the system_pricing_plans file and your examples above indicate that more than one solution is needed. Can you share a URL for an Unlimited Biking system_pricing_plans endpoint or maybe one from another of your clients? I'd like to see how they're using pricing.

benwedge commented 2 years ago

Hi @mplsmitch - we have yet to upgrade to a version where we would use per-minute pricing (2.2 or 2.3). What I can share is this older feed for Ginger, https://eu-feeds.joyridecity.bike/api/v1/ginger/chester/gbfs/1/system_pricing_plans.json, which refers to this fleet https://www.ginger.town/chester. The reservation rule for that operation is 2 GBP per 5 min interval.

When we upgrade to 2.3 their pricing will look like: "plans": [ { "plan_id": "{{uuid}}", "name": "Chester", "currency": "GBP", "price": 2.00, "is_taxable": true, "description": "Let's Go Tees Valley!\r\nLet's Go Ginger!", "per_min_pricing": [ { "start": 20, "rate": 2.00, "interval": 20 },

stale[bot] commented 2 years ago

This discussion has been automatically marked as stale because it has not had recent activity. It will be closed in 60 days if no further activity occurs. Thank you for your contributions.

benwedge commented 2 years ago

Hi @mplsmitch just wanted to follow up on the information provided above

mplsmitch commented 2 years ago

Here's a proposal - if it's acceptable to everyone I'll open a PR - if not, weigh in here and let me know what needs fixing and/or clarifying.

To be added to: system_pricing_plans.json

Field REQUIRED Defines
reservation_price_per_min OPTIONAL The cost, described per minute, to reserve the vehicle prior to beginning a rental. This amount is charged for each minute of the vehicle reservation until the rental is initiated, or until the number of minutes defined in vehicle_types.json#default_reserve_time elapses, whichever comes first. When using this field, you MUST declare a value in vehicle_types.json#default_reserve_time. This field MUST NOT be combined in a single pricing plan with reservation_price_flat_rate.
reservation_price_flat_rate OPTIONAL The cost, described as a flat rate, to reserve the vehicle prior to beginning a rental. This amount is charged once to reserve the vehicle for the duration of the time defined by vehicle_types/json#default_reserve_time. When using this field, you MUST declare a value in vehicle_types/json#default_reserve_time.  This field  MUST NOT be combined in a single pricing plan with reservation_price_per_min.

cc: @benwedge

benwedge commented 2 years ago

This proposal looks good to me, @mplsmitch. It does make me wonder if default_reserve_time is an appropriate descriptor, but that's a separate issue.

mplsmitch commented 1 year ago

@benwedge there's a discussion that explains why we went with default_reserve_time vs just reserve_time here: https://github.com/NABSA/gbfs/pull/331

On Wed, Aug 24, 2022 at 10:24 AM benwedge @.***> wrote:

This proposal looks good to me, @mplsmitch https://github.com/mplsmitch. It does make me wonder if default_reserve_time is an appropriate descriptor, but that's a separate issue.

— Reply to this email directly, view it on GitHub https://github.com/NABSA/gbfs/issues/401#issuecomment-1225876182, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADUHWFOUTW3P3OWWCIHMTWLV2Y5D5ANCNFSM5L5BWRHQ . You are receiving this because you were mentioned.Message ID: @.***>

Sergiodero commented 1 year ago

Hi @benwedge @mplsmitch

Would you be interested in opening a PR for this change using the current proposal?

At MobilityData we’re happy to walk along with you during the change process (PR opening and vote calling) and help facilitate it.

benwedge commented 1 year ago

Sure, how do I do that? @Sergiodero

Sergiodero commented 1 year ago

Thanks @benwedge

You would need to open a new Pull Request proposing the changes in the GBFS repo, allowing at least 7 calendar days for discussion to then call for a vote once the discussion is considered resolved. Perhaps @mplsmitch might still be able to help with this first step (opening the PR).

Please note that for the vote to be passed it requires unanimous consensus with at least 3 votes in favor (two of them coming from one producer and one consumer). For further reference please look at the current governance documentation.

mplsmitch commented 1 year ago

@benwedge I'll open a PR - if you open it then you're not eligible to vote and we may need your vote to pass it

benwedge commented 1 year ago

Oops, I created it before seeing your note!

mplsmitch commented 1 year ago

No problem - looks like you created it on an old branch of mine that's no longer relevant, which creates tons of merge conflicts. For future reference, when working on a PR you should always start with a new branch created from the master so that everything is up to date.

I'll make a new PR, should be ready later today.

benwedge commented 1 year ago

Sorry! Thanks for your patience & clarification on this

josee-sabourin commented 1 year ago

Closing this to ensure all discussion stays in #457

mplsmitch commented 1 year ago

Hey @benwedge - there's a PR on this that's open for a vote. We need one more vote for it to pass and become part of the next version. As a GBFS producer you are eligible to vote. Please have a look, voting closes tomorrow at 11:59PM UTC on Friday, January 20th.