public-api-docs

Operations API Pricing Guide

Overview

Pricing configuration controls how bookings, on-demand rentals, additions, packages, and discounts are priced. Use the Operations API pricing endpoints when building administrative tools for pricing setup, pricing review, simulation, or branch/category pricing assignments.

Pricing is configuration-heavy and can directly affect customer invoices. Treat pricing writes as administrative changes and test pricing behavior before publishing or assigning it broadly.

Related reference: Operations API Operations API Guide Rental Guide Vehicle Category Guide Error Codes

Core Concepts

Rental Phase Pricing

A rental price is built from rental phases. A phase is a time segment in a specific rental state:

Phase Meaning
RESERVATION_FREE Reservation time that is still inside the configured free window.
RESERVATION_PAID Reservation time after the free window.
DRIVING Active rental time while the vehicle is in driving mode.
PARKING Active rental time while the vehicle is in parking mode.

When a rental changes state, a new phase can be opened. The final price is the sum of the priced phases plus additions, deposits, rebates, surcharges, and other applicable effects.

Pricing Bundles

A pricing bundle is a reusable pricing configuration. It contains metadata such as name, type, currency, distance unit, and one or more versions.

Public bundle types include:

Type Use it for
BOOKING Pricing configuration for booking-based rentals.
ON_DEMAND_LEGACY Legacy on-demand/free-floating pricing configuration.

The bundle type matters because booking and on-demand pricing do not support the same pricing features. Use the bundle type and the endpoint family to decide which model applies before interpreting the pricing fields.

Bundle Versions

Pricing bundle versions preserve historical correctness. Existing rentals and bookings must keep using the bundle version that was active when they were created or committed, even if the operator later edits the pricing bundle.

Version statuses include:

Status Meaning
DRAFT Version is editable and not yet active.
PUBLISHED Version is available for use from its effective date.
SUPERSEDED Version has been replaced by a newer published version.
ARCHIVED Version is no longer active for normal use.
EXPIRED Version is no longer effective.

Do not update historical pricing by mutating an existing published version. Create a new version and publish it with the intended effective date.

Pricing Data Versions

There are two different version concepts that are easy to confuse:

Concept Where you see it What it means
Pricing bundle version pricingBundleVersion, pricingBundleVersionId, /pricing-bundles/{id}/versions The configured pricing rules that were selected for a booking or rental.
Price data version priceV3, priceV4, and later price response shapes The JSON structure used to store or return the calculated price breakdown.

When looking at rental or booking data, first check pricingBundleVersion. That tells you which configured pricing rules were applied. Then inspect the available price data fields to understand the calculated result.

Current response fields can include:

Field How to use it
price Simplified embedded rental price used for totals and legacy compatibility.
priceV3 Detailed price breakdown grouped by price types, additions, rebates, surcharges, penalties, and one tax percentage/default tax view.
priceV4 Detailed price breakdown with tax split support. Use this when tax-split detail is relevant.
pricingBundleVersion Embedded reference to the bundle version that was applied to the booking or rental.

As a general rule, use the newest price data version present in the response for detailed price inspection. Use priceV4 when available because it preserves tax-split detail. Use priceV3 when working with older data, older integrations, or fields that only expose the V3 shape.

If later price data versions are added, treat them the same way: the highest available price data version is the most complete representation for new data, while older fields remain useful for historical data and backwards compatibility.

Do not infer the configured pricing rules from priceV3 or priceV4 alone. The relevant configured pricing rule is identified by pricingBundleVersion or, for older/fallback flows, by the branch/category pricing settings used when the rental was created.

Booking vs On-Demand Pricing Models

Booking pricing and on-demand pricing solve different product problems and expose different configuration concepts.

Pricing area Applies to Technical model Typical use API surface
Booking pricing bundle Booking-based rentals PricingBundleType: "BOOKING" with booking rates, additions, penalties, and optional adaptive rates. Scheduled bookings with known start/end time. /pricing-bundles, /pricing-simulator/booking
On-demand pricing bundle Free-floating/on-demand rentals PricingBundleType: "ON_DEMAND_LEGACY" with free-floating pricing settings. Rentals that start now and end whenever the user ends them. /pricing-bundles, /pricing-simulator/free-floating
On-demand pricing assignment On-demand rentals Branch + vehicle category assignment to an on-demand pricing option. Selecting the applicable on-demand price for a category in a branch. /on-demand-pricing-options, /on-demand-pricing-assignments
Package User purchase product Package/voucherable configuration. Selling credit, benefits, or prepaid products. /packages

Booking pricing can include booking-specific rate structures such as base rates, unlock fees, distance rates, night or weekend rates, adaptive rates, additions, cancellation behavior, and late-return behavior. These concepts are tied to a planned booking window and are not the same as on-demand time-slot pricing.

On-demand pricing can include driving and parking prices, unlock/base price, distance pricing, included kilometers, maximum prices, and the on-demand time-slot mode described below.

Do not try to build one generic pricing editor that exposes every field for every pricing type. A good operator tool should first branch by the pricing bundle type, then show only the fields and workflows that apply to that type.

Paid reservation time is priced as reservation phase time in the on-demand/free-floating pricing model. When a user purchases more reservation time through the User API, Core creates a RESERVATION_PAID phase and extends the rental reservation end time. The final rental price then includes the configured reservation price for that paid phase.

Configure paid reservation pricing in the ON_DEMAND_LEGACY pricing bundle used by the branch and vehicle category. In pricing data and simulator input this appears as the reservation part of the free-floating model, for example the reservation entries in FreeFloatingData and reservation pricing in PricingInformation.

Use this Operations API flow:

  1. Find or create the relevant on-demand pricing bundle with GET /pricing-bundles or POST /pricing-bundles using type: "ON_DEMAND_LEGACY".
  2. Create or update a draft pricing bundle version with /pricing-bundles/{pricingBundleId}/versions.
  3. Configure the reservation price for paid reservation minutes in that version.
  4. Test the result with POST /pricing-simulator/free-floating or GET /pricing-bundles/pricing-simulator, including reservation time in the simulated data.
  5. Publish the version with POST /pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}/publish.
  6. Assign the resulting pricing option to the correct branch and vehicle category with /on-demand-pricing-assignments.

The User API endpoint accepts minutes, not a pricing package ID. If an app sells fixed extension choices such as 5, 10, or 15 minutes, those choices should be derived from product configuration and priced by the active reservation pricing. Use the package/voucherable model only when the operator is selling a separate prepaid benefit product, not for the normal paid-reservation extension button.

On-Demand Rate Selector vs Staircase Pricing

On-demand/free-floating pricing supports two mutually exclusive time-slot modes. They cannot coexist in one on-demand pricing definition because freeFloatingPricingMode selects one calculation strategy.

Mode Technical value How it works When to use
Rate selector ENDING_TIMESLOT Selects one applicable time slot based on the final billable rental duration, then prices the billable rental time with that selected rate. When the whole on-demand rental should use the rate tier reached by the final duration.
Staircase pricing CUMULATIVE_TIMESLOTS Splits the rental across elapsed time periods and prices each period with its configured rate. When the on-demand price should change as the rental crosses time thresholds.

Both modes are on-demand concepts. Do not apply them to booking pricing bundles. Booking pricing has its own rate model for booked time, distance, additions, penalties, and adaptive rates.

The most important technical difference is how time thresholds are interpreted:

For example, if an on-demand rental has thresholds at 0 minutes and 30 minutes, rate selector pricing can price the whole billable duration with the tier selected by the final duration. Staircase pricing can price the first segment with the first tier and the later segment with the second tier.

For API usage:

Pricing API Navigation

Use this decision path when building pricing tooling:

  1. Decide whether the workflow is for a booking, an on-demand rental, or a package.
  2. For bookings, work with BOOKING pricing bundles and booking simulator endpoints.
  3. For on-demand rentals, work with ON_DEMAND_LEGACY pricing bundles, on-demand pricing options, and on-demand pricing assignments.
  4. For on-demand rentals, choose exactly one freeFloatingPricingMode: rate selector (ENDING_TIMESLOT) or staircase pricing (CUMULATIVE_TIMESLOTS).
  5. For packages and paid benefits, use the promotions/benefits model; packages are purchasable products and are not rental price-calculation rules.

When reading existing rental or booking data, use the pricing bundle version and the rental or booking type to determine which pricing model was used. Booking-only concepts such as adaptive booking rates or cancellation penalties should not be expected on on-demand pricing. On-demand-only concepts such as driving/parking time-slot modes and on-demand default/alternative assignments should not be expected on booking pricing.

Vehicle Category Pricing References

Vehicle categories can reference pricing configuration. Important category-level pricing fields include:

Field Purpose
priceCalcKey Connects a vehicle category to a pricing calculation setting.
rentalAdditionPriceCalcs Maps rental addition codes to price calculation keys.

For category configuration, see the Operations API Vehicle Category Guide.

Packages

Packages are paid benefit products that users can buy, usually to receive balance, credit, minutes, discounts, or another configured benefit. Package management belongs next to pricing because package price, validity, applicability, and discount behavior affect what customers pay and what credit or benefits they receive.

Packages are different from pricing bundles. Pricing bundles define rental price calculation. Packages are products purchased by users and applied through the voucher/wallet/benefit system.

Use the Operations API Promotions, Packages, Subscriptions, And Benefits Guide for package, subscription, promotion, ride-pass, customer-care, and benefit catalog workflows. The legacy /packages endpoints are deprecated.


Common Operator Workflows

List Pricing Bundles

Use GET /pricing-bundles.

Useful filters:

The response is paginated.

Manage Pricing Bundles

Use the pricing bundle endpoints for administrative bundle configuration:

Task Endpoint
List bundles GET /pricing-bundles
Create bundle POST /pricing-bundles
Get one bundle GET /pricing-bundles/{pricingBundleId}
Update bundle metadata PUT /pricing-bundles/{pricingBundleId}
Delete bundle DELETE /pricing-bundles/{pricingBundleId}

Bundle metadata identifies the pricing product. Actual price behavior is controlled by versions.

Manage Bundle Versions

Use version endpoints when creating, reviewing, publishing, or replacing pricing behavior:

Task Endpoint
List versions GET /pricing-bundles/{pricingBundleId}/versions
Create version POST /pricing-bundles/{pricingBundleId}/versions
Get one version GET /pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}
Update version PUT /pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}
Publish version POST /pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}/publish

Recommended workflow:

  1. Create or select a pricing bundle.
  2. Create a draft version.
  3. Simulate prices for representative rentals or bookings.
  4. Publish the version with the intended effective date.
  5. Verify branch/category assignment or related configuration.

Simulate Pricing

Use pricing simulators before publishing or assigning pricing changes.

Task Endpoint
Simulate booking price with provided settings POST /pricing-simulator/booking
Simulate free-floating price with provided settings POST /pricing-simulator/free-floating
Simulate price by pricing bundle GET /pricing-bundles/pricing-simulator
Calculate price by pricing bundle or assignment GET /pricing-bundles/pricing-calculator

Use simulator endpoints for “what would this cost?” tools, pricing preview screens, and QA before publishing. Use calculator endpoints when the tool needs pricing output based on a concrete bundle or assignment reference.

Manage On-Demand Pricing Assignments

On-demand pricing assignments connect pricing options to a branch and vehicle category.

Use these endpoints:

Task Endpoint
List pricing options GET /on-demand-pricing-options
List assignments GET /on-demand-pricing-assignments
Assignment overview for a branch GET /on-demand-pricing-assignments/overview
Create assignment POST /on-demand-pricing-assignments
Get one assignment GET /on-demand-pricing-assignments/{id}
Mark assignment as default POST /on-demand-pricing-assignments/{id}/mark-as-default
Replace default assignment PUT /on-demand-pricing-assignments/replace-default
Replace alternative assignments PUT /on-demand-pricing-assignments/replace-alternatives
Delete assignment DELETE /on-demand-pricing-assignments/{id}

Use GET /on-demand-pricing-options?categoryId={vehicleCategoryId} to discover pricing options for a category before creating or replacing assignments.

Manage Packages

For new paid package tooling, use /voucherables with type=Package. The legacy package endpoints still exist but are deprecated:

Task Endpoint
List packages GET /packages
Create package POST /packages
Get one package GET /packages/{id}
Patch package PATCH /packages/{id}

Packages can be scoped by branch and applicable vehicle categories. They can also have benefits, validity, redeem limits, state, visibility in the user app, and invoice/payment-related fields.


Most Relevant APIs

Task Endpoint
List pricing bundles GET /pricing-bundles
Create pricing bundle POST /pricing-bundles
Get pricing bundle GET /pricing-bundles/{pricingBundleId}
Update pricing bundle PUT /pricing-bundles/{pricingBundleId}
Delete pricing bundle DELETE /pricing-bundles/{pricingBundleId}
List bundle versions GET /pricing-bundles/{pricingBundleId}/versions
Create bundle version POST /pricing-bundles/{pricingBundleId}/versions
Get bundle version GET /pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}
Update bundle version PUT /pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}
Publish bundle version POST /pricing-bundles/{pricingBundleId}/versions/{pricingBundleVersionId}/publish
Simulate booking pricing POST /pricing-simulator/booking
Simulate free-floating pricing POST /pricing-simulator/free-floating
Simulate bundle pricing GET /pricing-bundles/pricing-simulator
Calculate bundle or assignment price GET /pricing-bundles/pricing-calculator
List on-demand pricing options GET /on-demand-pricing-options
Manage on-demand pricing assignments GET/POST/PUT/DELETE /on-demand-pricing-assignments
Manage packages GET/POST/PATCH /packages

Permissions And Settings

Pricing configuration is administrative. Operators may be able to view pricing but not create, publish, assign, or delete pricing configuration.

Common permission areas:

Workflow Permission consideration
View pricing bundles and versions Pricing read/admin visibility.
Create/update/delete bundles Pricing administration permissions.
Publish bundle versions Pricing administration permissions; this can affect customer prices.
Manage on-demand pricing assignments Branch/category pricing administration.
Manage packages Package/voucherable administration.
Simulate pricing Pricing read/admin visibility, depending on simulator input.

Pricing behavior can also depend on settings and category configuration:

Area Why it matters
Vehicle category priceCalcKey Connects a category to pricing calculation behavior.
Vehicle category rentalAdditionPriceCalcs Prices additions attached to rentals.
Branch/payment settings Can affect currency, deposits, payment methods, and invoice behavior.
Rental requirements Can trigger payment pre-authorization or deposits before start.

Implementation Notes For Custom Tools


Review Notes

The following product decisions are reflected in this guide: