Quote a session's cost under a stored tariff

post/v1/tenants/{tenant_id}/tariffs/{tariff_id}/quote
Requires an API key

Read-only: prices a session profile (start, charging minutes, total kWh or a kWh curve, idle minutes, power, current, reservation, group or token, merchant validation code, prepaid balance) with the same function bills finalize with, and returns the itemised lines, the rule adjustments and total_minor. Archived tariffs can be quoted. Nothing is stored and no charger is contacted. A real bill for a session with less than 1 Wh bills no TIME or PARKING_TIME; quote prices the profile as given.

Path parameters

  • tenant_idintegerRequired
  • tariff_idintegerRequired

Request body

  • sessionSessionProfileRequired
    A charging session to price. Energy is cumulative kWh: energy_kwh spreads evenly over duration_minutes, or energy_curve gives it at points (linear between them).
    Child attributes
    • start_atstringRequired
      When charging starts, ISO 8601 with an offset.
    • time_zonestring | null
      IANA time zone for the tariff's local-time restrictions. Default: the tariff's time_zone, else start_at's offset.
      Up to 64 characters
    • duration_minutesnumber
      Charging time in minutes (TIME is billed on it).
      Default 0 · Minimum 0 · Maximum 10080
    • energy_kwhnumber | null
      Total energy, kWh. Omit when energy_curve is given.
      Minimum 0 · Maximum 100000
    • energy_curvearray of CurvePoint | null
      Cumulative kWh at minutes into charging, ascending.
      Child attributes
      • minutenumberRequired
        Minutes after charging started.
        Minimum 0 · Maximum 10080
      • kwhnumberRequired
        Cumulative energy charged by then, kWh.
        Minimum 0 · Maximum 100000
    • idle_minutesnumber
      Minutes connected after charging ends (PARKING_TIME is billed on it).
      Default 0 · Minimum 0 · Maximum 10080
    • power_kwnumber | null
      Constant charging power for power restrictions, kW. Default: the energy curve's slope.
      Minimum 0 · Maximum 10000
    • current_anumber | null
      Charging current for current restrictions, A. Unknown matches no current-restricted element.
      Minimum 0 · Maximum 10000
    • reservation_minutesnumber
      Minutes reserved before charging starts (reservation elements price them).
      Default 0 · Minimum 0 · Maximum 1440
    • reservation_expiredboolean
      The reservation expired unused: no charging; RESERVATION_EXPIRES elements apply.
      Default false
    • groupstring | null
      Member or RFID group, for group discounts.
      Up to 128 characters
    • id_tokenstring | null
      RFID or app token, for group discounts that list tokens. Not stored.
      Up to 64 characters
    • merchant_validationstring | null
      A merchant validation code, for the merchant validation rule.
      Pattern ^[A-Za-z0-9][A-Za-z0-9_.:-]{0,63}$
    • prepaid_balance_minorinteger | null
      A prepaid balance, for the prepaid_limit report.
      Minimum 0 · Maximum 100000000

Returns · 200

  • tariff_idinteger | null
    The stored tariff quoted; null for a simulation.
  • currencystringRequired
  • pricing_versionenumRequired
    energy-v1: a simple tariff (kWh × rate, unchanged); elements-v1: elements and rules.
    One of energy-v1, elements-v1
  • linesarray of QuoteLineRequired
    Child attributes
    • typeenumRequired
      One of ENERGY, TIME, PARKING_TIME, FLAT
    • elementintegerRequired
      Index of the element that priced this line.
    • reservationbooleanRequired
      The line prices a reservation.
    • quantitystringRequired
      Decimal quantity in unit (rounded to 6 places for display).
    • unitenumRequired
      One of kWh, h, session
    • price_minorstringRequired
      Minor units per unit (decimal string).
    • exact_minorstringRequired
      Unrounded amount, minor units (decimal string, 6 places).
    • amount_minorintegerRequired
      Amount rounded half up to integer minor units, for display. total_minor rounds the exact sum once, so line amounts may differ from it by rounding.
  • subtotal_minorintegerRequired
    The elements' exact sum rounded half up, before rules.
  • exact_subtotal_minorstringRequired
  • adjustmentsarray of QuoteAdjustmentRequired
    Child attributes
    • kindenumRequired
      One of group_discount, merchant_validation, max_session_cost
    • rulestringRequired
      The group discount id, the validation code, or max_session_cost_minor.
    • exact_minorstringRequired
    • amount_minorintegerRequired
      Negative: a reduction.
  • total_minorintegerRequired
    Integer minor units: the exact subtotal after rules, rounded half up once. Bills finalize with this same calculation.
  • prepaidobject | nullRequired
    Child attributes
    • balance_minorintegerRequired
    • covered_minorintegerRequired
    • shortfall_minorintegerRequired
    • limit_reachedbooleanRequired
      The session's total reaches the balance: stop or top up.
  • tariff_alt_textarray of AltText
    The tariff's driver-facing descriptions, for receipts.
    Child attributes
    • languagestringRequired
      ISO 639-1 language code.
      Pattern ^[a-z]{2}$
    • textstringRequired
      Driver-facing description of the tariff.
      1–512 characters
  • activityobject | null
    Bills on complex tariffs only: the charging and idle time the bill was priced over. Null on quotes, simulations and simple tariffs (which price kWh only).
    Child attributes
    • methodenumRequired
      ocpp201_charging_state: the charger's OCPP 2.x chargingState. ocpp16_status: OCPP 1.6 connector statuses (Charging; SuspendedEV, SuspendedEVSE and Finishing are idle). ocpp16_status_and_power: those statuses, plus idle wherever the meter shows almost no power for a while. meter_power: the meter alone. none: not enough data; the whole transaction is charging time, as before idle detection (unless it drew less than 1 Wh: see reason no_energy).
      One of ocpp201_charging_state, ocpp16_status, ocpp16_status_and_power, meter_power, none
    • detectedbooleanRequired
      False: method none, and reason says why. A session with less than 1 Wh is all waiting (reason no_energy), and detected is true then, also with method none.
    • reasonstring | null
      Why nothing was detected (for example no_state_or_meter_data); no_energy: a session with less than 1 Wh is all waiting, billing neither TIME nor PARKING_TIME nor energy; else null.
    • charging_secondsintegerRequired
    • idle_secondsintegerRequired
    • waiting_secondsinteger
      Plugged in before the first charging: neither TIME nor PARKING_TIME.
      Default 0
    • intervalsarray of ActivityIntervalRequired
      The transaction from start to end, oldest first.
      Child attributes
      • startstringRequired
        UTC, ISO 8601.
      • endstringRequired
        UTC, ISO 8601.
      • stateenumRequired
        waiting: plugged in before the first charging, priced as neither TIME nor PARKING_TIME.
        One of charging, idle, waiting
POST /v1/tenants/{tenant_id}/tariffs/{tariff_id}/quote
curl --fail-with-body -X POST "https://api.ivoracharge.com/v1/tenants/1042/tariffs/42/quote" \
  -H "Authorization: Bearer $IVORA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "session": {
    "start_at": "2026-10-15T17:30:00-07:00"
  }
}'
Response · 200
{
  "tariff_id": 42,
  "currency": "usd",
  "pricing_version": "energy-v1",
  "lines": [
    {
      "type": "ENERGY",
      "element": 1,
      "reservation": false,
      "quantity": "string",
      "unit": "kWh",
      "price_minor": "string",
      "exact_minor": "string",
      "amount_minor": 1250
    }
  ],
  "subtotal_minor": 1250,
  "exact_subtotal_minor": "string",
  "adjustments": [
    {
      "kind": "group_discount",
      "rule": "string",
      "exact_minor": "string",
      "amount_minor": 1250
    }
  ],
  "total_minor": 1250,
  "prepaid": {
    "balance_minor": 1250,
    "covered_minor": 1250,
    "shortfall_minor": 1250,
    "limit_reached": false
  },
  "tariff_alt_text": [
    {
      "language": "string",
      "text": "string"
    }
  ],
  "activity": {
    "method": "ocpp201_charging_state",
    "detected": false,
    "reason": "string",
    "charging_seconds": 1,
    "idle_seconds": 1,
    "waiting_seconds": 0,
    "intervals": [
      {
        "start": "string",
        "end": "string",
        "state": "charging"
      }
    ]
  }
}
Try it is not available here yetRequests from this page are off until the production API at https://api.ivoracharge.com is public. Use the code samples from your application server; Ivora grants production access. Keys are created in Developer tools.