Log inTalk to us

Set a location's tax lines

put/v1/tenants/{tenant_id}/locations/{location_id}/tax
Requires an API key

Replaces the location's tax configuration: lines (percent, or per_kwh in minor units of the tariff's currency) applied in order, with price_mode tax_exclusive (tariff prices exclude tax; the lines are added) or tax_inclusive (tariff prices include them). Or preset (GET /v1/tax-presets) with confirm_preset true, as an editable starting point. lines [] removes the tax. Ivora computes and prints the lines you configure; you are the seller and are responsible for their legal correctness and for filing the tax. A bill freezes its station's location tax when it is created: a change applies to bills created afterwards, never to an open or final one. Needs stations:admin (team owners and admins, Ivora staff, and API keys created with it). Synchronous; replays with the same Idempotency-Key return the current configuration. Audit-logged with the caller. Errors: 404 location_not_found, 422 tax_invalid, 422 tax_preset_unconfirmed, 422 tax_preset_unknown. See Errors and statuses.

Path parameters

  • tenant_idintegerRequired
  • location_idintegerRequired

Headers

  • idempotency-keystringRequired

Request body

  • price_modeenum | null
    tax_exclusive (the US norm): tariff prices exclude tax and the lines are added to them. tax_inclusive: tariff prices include every line, and the lines are taken out of the price the driver pays. Default tax_exclusive, or the preset's.
    One of tax_exclusive, tax_inclusive
  • linesarray of TaxLineInput | null
    The tax lines, applied in order. [] removes every line: the location has no tax.
    Child attributes
    • namestringRequired
      Printed on receipts: GST, HST, PST, QST, state sales tax, county, city, EV excise.
      1–40 characters
    • typeenumRequired
      percent: rate is a percentage of the components it taxes. per_kwh: rate is minor units of the bill's currency per kWh delivered (2.6 is 2.6 cents per kWh in USD).
      One of percent, per_kwh
    • ratenumberRequired
      At most 4 decimal places (9.975 for QST). percent: 0 to 100. per_kwh: 0 to 1000 minor units per kWh.
      Minimum 0 · Maximum 1000
    • registration_numberstring | null
      Your tax registration number for this tax, printed on receipts.
      Up to 64 characters
    • orderinteger | null
      Position among the lines, ascending; lines without one keep their place after those with one.
      Minimum 1 · Maximum 100
    • compoundboolean
      percent lines: the base includes the earlier lines' tax. Never on the first line or a per_kwh line.
      Default false
    • excluded_componentsarray of enum
      percent lines: tariff components this line does not tax (for example PARKING_TIME). Empty: all of them.
  • presetstring | null
    A preset from GET /v1/tax-presets as the configuration, instead of lines. Ivora does not guarantee a preset's legal correctness: check it applies to you.
    Pattern ^[A-Za-z]{2}-[A-Za-z]{2}$
  • confirm_presetboolean
    With preset: true confirms that you checked the preset applies to this location.
    Default false

Returns · 200

  • location_idintegerRequired
  • configuredbooleanRequired
    false: no tax lines; bills at the location carry no tax.
  • price_modeenumRequired
    tax_exclusive (the US norm): tariff prices exclude tax and the lines are added to them. tax_inclusive: tariff prices include every line, and the lines are taken out of the price the driver pays.
    One of tax_exclusive, tax_inclusive
  • linesarray of TaxLineRecordRequired
    Child attributes
    • orderintegerRequired
      1 for the first line applied.
    • namestringRequired
    • typeenumRequired
      One of percent, per_kwh
    • ratestringRequired
      Decimal text: a percentage, or minor units per kWh.
    • compoundbooleanRequired
    • excluded_componentsarray of enumRequired
    • registration_numberstring | nullRequired
  • presetstring | nullRequired
    The preset this configuration was confirmed from, or null.
  • updated_bystring | nullRequired
  • updated_atstring | nullRequired
PUT /v1/tenants/{tenant_id}/locations/{location_id}/tax
curl --fail-with-body -X PUT "https://api.ivoracharge.com/v1/tenants/1042/locations/7/tax" \
  -H "Authorization: Bearer $IVORA_API_KEY" \
  -H "Idempotency-Key: order-2026-09-30-0001" \
  -H "Content-Type: application/json" \
  -d '{
  "preset": "CA-AB"
}'
Response · 200JSON
{
  "location_id": 7,
  "configured": false,
  "price_mode": "tax_exclusive",
  "lines": [
    {
      "order": 1,
      "name": "bay-01",
      "type": "percent",
      "rate": "string",
      "compound": false,
      "excluded_components": [
        "ENERGY"
      ],
      "registration_number": "string"
    }
  ],
  "preset": "string",
  "updated_by": "string",
  "updated_at": "2026-09-30T17:00:00Z"
}
Requires an approved production API keyProduction access starts with a request, a short meeting with Ivora and a card on file, after which Ivora staff grant your account access. How to request access
Try itproduction · api.ivoracharge.com

Paste a production api key (iv_live_…). Create keys in Developer tools. The key stays in this page's memory, is sent only to https://api.ivoracharge.com and clears when you reload. Test keys are refused.

PUT is a write: you confirm the method, path and project before it is sent, with a generated Idempotency-Key.