Log inTalk to us
Charger management

Migration discovery questionnaire

Before a network moves its chargers to Ivora, we ask the questions on this page. Most migration surprises come from things nobody wrote down: a charger model that rebuilds its server URL in its own way, payment terminals wired to the previous platform, SIM cards that only reach one address, card numbers read in another byte order, or a price rule the charger screen has to show. Answering up front lets the migration start with a plan for each of them.

Whoever is closest to the network answers: the network's own operations team, its sales contact at Ivora, or the partner or installer running the move. Fill in the answers template and send the file to your Ivora contact. One file covers one network. "Unknown" is a useful answer: it tells us what to check first. Only the template's format line is required.

Note

Keep secrets out of the answers. Never write charger passwords, API keys, portal logins, card numbers or drivers' personal data into the file. When a step needs a credential, Ivora asks for it through a separate, secure channel. The contacts section names people, so share the file only with the people working on the migration.

How the answers are used

AnswersBecome
Incumbent, charger and site counts, target datesThe migration request: source_platform, chargers_estimate, sites_estimate, target_from, target_to
Sites and charger inventoryThe network import CSV, then the move plan
Charger models, OCPP versions, security profiles, URL formatThe connection plan per model (Connecting chargers) and the charger proxy's routes
Network and SIMsWhether chargers can reach Ivora at all, and who has to change what
Payments and terminalsThe settlement flow and moving the payment service site by site
Drivers and RFIDThe RFID token import and the driver communication
Pricing and taxTariffs, tax lines and the screen price
QR stickersQR sticker redirects
Quiet windows and constraintsThe batches and their schedule

Incumbent platform

KeyQuestionWhy we ask
network_nameWhat is the network called?It names the project and the migration workspace.
filled_byWho answered, and in what role?We know whom to ask about an answer.
filled_onWhen were the answers written?Inventories change; we re-check answers older than a few weeks.
incumbent.platformWhich platform do your chargers connect to today?Each platform has its own charger URL format, export tools and quirks.
incumbent.white_labelDo drivers see your brand on another company's platform?Your brand on driver pages, receipts and stickers has to carry over, and the platform owner may hold accounts or contracts in its own name.
incumbent.portal_accessWhat access do you have to its admin portal?A read-only user lets us read charger configuration and session data without asking you for every detail.
incumbent.api_accessDoes it offer an API, and is it documented?An API or a location feed lets us import sites and chargers instead of typing them in.
incumbent.ocpp_endpointWhat address are chargers configured with today?Chargers move by changing (or routing) this address; its hostname decides whether a proxy can sit in front of it.
incumbent.remote_configurationCan you send configuration changes to chargers through it?If yes, URLs and heartbeat settings change remotely; if not, someone has to visit or use the vendor's tools.
incumbent.contract_endWhen does the contract end?It sets the latest date every charger has to be moved and every export done.
incumbent.notice_period_daysHow many days' notice does it need?Notice given too late can mean paying for another term.
incumbent.data_export_rightsWhat does the contract say about exporting your data?Session history, driver accounts and card lists are often needed for reporting and for drivers to keep charging.

Sites

inventory_file takes the whole per-connector inventory in the network import CSV template, if you already have it. Otherwise answer per site:

KeyQuestionWhy we ask
inventory_fileDo you have the inventory as the network import CSV?It is imported directly, with a dry run you can review.
sites[].refWhat is your ID for the site?It links the site across your systems, the import and later reports.
sites[].nameWhat do drivers call the site?It is shown in apps, receipts and roaming maps.
sites[].addressWhat is the street address?Drivers, roaming maps and field engineers find the site by it.
sites[].cityWhich city?Part of the address; some tax and reporting rules apply per city.
sites[].stateWhich state or province?Tax, pricing display and reporting rules differ per state.
sites[].postal_codeWhat is the postal code?Part of the address; some tax lookups use it.
sites[].countryWhich country?Currency, tax and connector standards follow the country.
sites[].latitudeWhat is the latitude?Maps and apps place the site by its coordinates.
sites[].longitudeWhat is the longitude?Maps and apps place the site by its coordinates; a swapped sign puts it on another continent.
sites[].time_zoneWhich time zone?Time-of-use prices, quiet windows and receipts use local time.
sites[].accessIs the site public, restricted or private?Private sites are not published to maps or roaming partners.
sites[].opening_hoursWhen can drivers reach it?Moves are best done when the site is closed or quiet. Ivora locations do not store opening hours yet, so drivers keep seeing them in your own app or pages.
sites[].chargersHow many chargers are there?Sizes the batches and checks the inventory.
sites[].power_limit_kwDo the chargers share a power limit?A shared limit needs load management on Ivora too, or breakers trip.
sites[].hostWho hosts the site?The host may need notice before a move, and may own the network the chargers use.

Chargers

One entry per combination of vendor, model and firmware: chargers that share it behave the same.

KeyQuestionWhy we ask
chargers[].vendorWho made the charger?Vendors differ in configuration keys, firmware updates and support contacts.
chargers[].modelWhich model?Models of one vendor still differ in display, meter and payment options.
chargers[].countHow many of this model and firmware?Sizes the work and tells us which model to try first.
chargers[].firmware_versionWhich firmware version?Firmware decides OCPP behaviour; some versions have known bugs or need an update before moving.
chargers[].ocpp_versionWhich OCPP version do they speak (1.6, 2.0.1 or 2.1)?Messages, configuration and card types differ between versions.
chargers[].security_profileWhich OCPP security profile do they use (0 to 3)?It sets whether they send a password or a client certificate, and so how they sign in to Ivora.
chargers[].password_knownDo you hold each charger's OCPP password?OCPP passwords cannot be read back from a charger; without them the move has to set new ones.
chargers[].identity_formatWhat do charger IDs look like?The ID must match exactly, case included, or the charger is refused (Charger IDs).
chargers[].backend_url_formatHow does the charger build its server URL?Some append their ID to the URL and some expect it already in it; a wrong format means a charger that never connects.
chargers[].url_config_keyWhich configuration key holds that URL?That is the key the move changes, or the one we read to check it.
chargers[].heartbeat_interval_sWhich heartbeat interval is configured?Chargers that stay quiet too long are disconnected (Keep the connection alive); cellular chargers often use a longer interval to save data.
chargers[].connectorsWhich connectors does each charger have?Drivers, tariffs and roaming partners see each connector.
chargers[].power_typeAC single-phase, two-phase, split-phase, three-phase, or DC?Pricing, power limits and reporting differ.
chargers[].max_power_kwWhat is the maximum power?Shown to drivers, and needed for load management.
chargers[].displayWhat can the screen show: nothing, status, free text or a price?Decides whether the charger can show a payment QR, messages or the running cost (Charger displays).
chargers[].display_languagesWhich languages must the screen show?Ivora writes the screen price text in English only; other languages need a plan before the move.
chargers[].california_pricingDoes it support the California Pricing OCPP 1.6 extension?Where the price has to be on the screen, chargers without it need another way to show it (Running cost).
chargers[].connectivityCellular, Wi-Fi or Ethernet?Each has its own owner and its own limits on what the charger can reach.
chargers[].local_accessHow is it configured on site: installer app, web page or vendor portal?If the URL cannot be changed remotely, this is how it is changed, and by whom.
chargers[].known_issuesWhat problems have you seen: reboots, lost sessions, wrong meter readings, clock drift?Known quirks get a check before the move, instead of a surprise after it.

Network and SIMs

KeyQuestionWhy we ask
network.sim_providerWhich carrier or IoT provider supplies the SIMs?SIM settings can block new addresses; we need to know whom to call.
network.sim_ownerWho owns the SIM contracts: you, the incumbent, the charger vendor or the installer?SIMs owned by the incumbent can stop working when its contract ends.
network.sim_contract_endWhen does the SIM contract end?Chargers lose their connection when it does.
network.private_apnDo the SIMs use a private APN?A private APN often allows only listed addresses, so Ivora's address has to be added before any charger moves.
network.ip_allow_listIs there an allow-list or firewall between the chargers and the internet, and who changes it?Chargers cannot reach Ivora until it allows Ivora's addresses.
network.site_networksWho runs the site Wi-Fi or Ethernet, and what may leave it?Site IT teams often allow only known destinations and need notice.
network.fixed_addressesDo any chargers use a fixed IP address instead of a hostname?A fixed address cannot follow a move; those chargers need their configuration changed.

Payments and terminals

KeyQuestionWhy we ask
payments.processorWhich processor takes card payments today: Stripe, Braintree, another, or none?It decides the settlement flow and what can move.
payments.processor_otherIf another, which one?Each processor has its own move steps.
payments.merchant_account_ownerWhose merchant account is it: yours or the incumbent's?Payments on your own account can keep their history; payments on the incumbent's account need a new account.
payments.payment_methodsHow do drivers pay: app, web QR, terminal, RFID account, roaming, free?Every method must still work on the day each charger moves.
payments.authorization_holdHow much is held before a session, and when is it released?Drivers notice a different hold; the amount carries over to the new checkout.
payments.payoutsWho pays you, how often, and which fees are deducted?Payouts must not stop or double during the move.
payments.terminals[].vendorWho makes the payment terminals?Terminals talk to their own vendor's service, which has to know about the new platform.
payments.terminals[].modelWhich model?Models differ in how they are wired to the charger.
payments.terminals[].countHow many?Sizes the work.
payments.terminals[].placementBuilt in, one per EVSE, one per charger, or a site kiosk?Decides which charger and connector a payment starts.
payments.terminals[].evse_linkHow does a payment reach its charger: through the charger, through the incumbent's platform, or standalone?A terminal tied to the incumbent's platform stops starting sessions when its charger moves, unless it is moved too.
payments.terminals[].contract_ownerWho holds the terminal contract?Only the contract owner can reconfigure the terminals.
payments.terminals[].connectivityDoes the terminal use its own SIM, the charger's connection or the site network?It has the same reachability questions as the chargers.

Drivers and RFID

KeyQuestionWhy we ask
drivers.appWhich app do drivers use: the incumbent's, a white-label app, your own, or none?Drivers of the incumbent's own app lose it when chargers move and need to be told what to use.
drivers.accountsHow many driver accounts are there?Sizes the driver communication and any account move.
drivers.active_accounts_90_daysHow many charged in the last 90 days?These are the drivers who notice a change.
drivers.stored_payment_methodsDo drivers keep cards on file with the incumbent or its processor?Stored cards usually cannot move; drivers must add them again.
drivers.rfid_cardsHow many RFID cards are in use?Every card must be imported before its charger moves, or it is refused.
drivers.rfid_formatWhat does a card value look like as the charger sends it (length, hex, case, byte order)?The same card can be read in different formats; the token import must match what chargers send.
drivers.rfid_issuerWho issued the cards, and who issues new ones?New cards must keep working after the move.
drivers.groupsAre there fleets, members or other groups with their own price or free charging?Each group needs its own tariff or authorization.
drivers.subscriptionsDo drivers pay for memberships or plans?Running plans must be honoured or ended cleanly.
drivers.roamingWhich roaming hubs or partners publish your chargers?Roaming drivers stop being able to charge unless the partners switch to Ivora (OCPI publishing).
drivers.plug_and_chargeDo any vehicles start by Plug & Charge today?Plug & Charge needs certificates that do not move by themselves.

Pricing and tax

KeyQuestionWhy we ask
pricing.currencyWhich currency?Prices, receipts and payouts use it.
pricing.tariffs[].applies_toWhich sites, chargers or driver groups pay this price?Each tariff is attached to connectors or groups.
pricing.tariffs[].energy_per_kwhWhat is the price per kWh?Rebuilt as a tariff before the first session on Ivora, or sessions are not priced.
pricing.tariffs[].per_hourIs there a price per hour of charging?Time prices bill differently from energy prices; some chargers also show them differently on screen.
pricing.tariffs[].session_feeIs there a fee per session?A flat fee changes the hold, the receipt and the price shown before charging.
pricing.tariffs[].time_of_useDo prices change by time of day or day of week?Needs time restrictions in the tariff, in the site's time zone.
pricing.tariffs[].limitsIs there a minimum or maximum session price?A maximum becomes the tariff's session cost cap; Ivora tariffs have no minimum session price, so a minimum needs a decision before the move.
pricing.idle_feeIs there an idle fee: rate, grace period and cap?Drivers dispute idle fees most. Ivora bills idle time as PARKING_TIME, with an idle grace counted from when charging ends; we tell you before the move where your current rules differ.
pricing.taxWhere is tax charged, at which rates, and who files it?Configured per location as tax lines; you stay the seller.
pricing.prices_include_taxDo posted prices include tax?Changes every price shown and billed.
pricing.screen_price_requiredDoes a rule require the price on the charger screen?Some states require it at the charger; it decides which chargers need the price pushed to their screen.
pricing.receiptsWhat must a receipt show, and who sends it?Receipts carry your brand and any legally required fields.

QR stickers

KeyQuestionWhy we ask
qr.stickersDo chargers carry QR stickers?A sticker that points at the old platform strands drivers after a move.
qr.countHow many?Sizes the sticker import.
qr.perOne per charger, per EVSE or per site?Decides how scans map to chargers.
qr.url_exampleWhat URL does one sticker encode, exactly?Ivora answers the scans by recognising this URL (QR sticker redirects).
qr.hostname_ownerWho controls the sticker's hostname: you or the incumbent?If you control it, scans can come to Ivora without new stickers.
qr.replace_allowedMay new stickers be put up?If not, the existing stickers have to keep working for good.

Data to export

KeyQuestionWhy we ask
data_export.sessions_historyHow far back is the session history, in what format, and who can export it?You keep reporting, refunds and disputes for sessions before the move.
data_export.usersCan driver accounts be exported, and in what format?Decides whether drivers are moved or invited again.
data_export.rfid_listCan the card list be exported with status and owner?It is what the token import reads.
data_export.invoices_and_payoutsCan invoices and payout reports be exported?Your accounting needs the history in one place.
data_export.reporting_obligationsDo you report charging or uptime data to a program or funder?Reports must cover the whole period, across both platforms.
data_export.retentionHow long does the incumbent keep your data after the contract ends, and how long must you keep history?Exports must happen before the incumbent deletes your data, and must cover what you are required to keep.

Contacts

KeyQuestionWhy we ask
contacts[].roleWhat is the person's role: decision maker, technical, operations, payments, site host, installer, incumbent, SIM provider?Each step needs a different person's yes or hands.
contacts[].nameWho is it?So we ask the right person.
contacts[].emailHow do we email them?For planned work and reports.
contacts[].phoneHow do we call them?For anything urgent during a move.
contacts[].hoursWhen can they be reached, in which time zone?Moves are planned when the right people are available.

Quiet windows

KeyQuestionWhy we ask
quiet_windows.time_zoneWhich time zone are the windows in?Avoids moving chargers an hour early or late.
quiet_windows.allowedWhen may chargers be moved?A charger is briefly unavailable while it moves; we move when the fewest drivers charge.
quiet_windows.blackout_datesWhich dates are off limits?A charger out of service hurts most on events, holidays and peak days, so moves avoid them.
quiet_windows.site_exceptionsDo some sites have other windows?Fleet depots and workplaces are busy at other hours than public sites.
quiet_windows.reboots_allowedMay chargers be rebooted inside the window?Some changes only apply after a reboot.
quiet_windows.on_site_visitsWhat do field engineers need to get on site, and how much notice?Chargers that cannot be changed remotely need a visit.

Constraints

KeyQuestionWhy we ask
constraints.target_startWhen should the first chargers move?Plans the pilot and the request.
constraints.target_endBy when must every charger be moved?Usually set by the incumbent's contract end.
constraints.must_not_changeWhat must drivers or site hosts not notice?Tells us what to test before each batch.
constraints.regulatoryWhich rules or funding programs must the network keep meeting?Some programs require uptime, pricing display or data reporting without gaps.
constraints.uptime_commitmentsWhat uptime have you promised site hosts or funders?Sets how many chargers may move at once and how fast to roll back.
constraints.otherAnything else we should know?Whatever did not fit above.

Answers template

Copy this template into a file, answer in it and send it to your Ivora contact. It is YAML: keep the keys as they are, write text in quotes, numbers as numbers, true or false for yes and no, and copy a list item once per site, charger model, terminal model, tariff or contact. The comments list the expected values. format names the template version, so a later version can still read your answers.

# Ivora migration discovery answers.
# Questions, and why we ask each one: the "Migration discovery questionnaire" developer guide.
# Answer what you know. Write "unknown" rather than guessing; leave a value empty only when it
# does not apply. Copy a list item (sites, chargers, terminals, tariffs, contacts) once per entry.
# Never put passwords, API keys, card numbers or drivers' personal data in this file.
format: ivora-migration-discovery/1
network_name: ""
filled_by: ""                    # name and role of whoever answered
filled_on: ""                    # YYYY-MM-DD

incumbent:
  platform: ""                   # the platform your chargers connect to today
  white_label: null              # true if drivers see your brand on another company's platform
  portal_access: ""              # none | read_only_user | admin_user
  api_access: ""                 # none | documented | on_request
  ocpp_endpoint: ""              # the address chargers connect to today, as configured on a charger
  remote_configuration: null     # true if you can send ChangeConfiguration / SetVariables through it
  contract_end: ""               # YYYY-MM-DD
  notice_period_days: null
  data_export_rights: ""         # what the contract says about exporting your data

inventory_file: ""               # the per-connector list in the network import CSV template, if you have it

sites:
  - ref: ""                      # your own site ID
    name: ""
    address: ""
    city: ""
    state: ""
    postal_code: ""
    country: ""                  # ISO 3166-1 alpha-3, for example USA
    latitude: null
    longitude: null
    time_zone: ""                # IANA name, for example America/Los_Angeles
    access: ""                   # public | restricted | private
    opening_hours: ""            # 24/7, or the hours
    chargers: null               # number of chargers at the site
    power_limit_kw: null         # a site or circuit limit its chargers share, if any
    host: ""                     # who hosts the site (role; details under contacts)

chargers:                        # one item per vendor, model and firmware combination
  - vendor: ""
    model: ""
    count: null
    firmware_version: ""
    ocpp_version: ""             # 1.6 | 2.0.1 | 2.1
    security_profile: null       # 0 | 1 | 2 | 3
    password_known: null         # true if you hold each charger's OCPP password (never write it here)
    identity_format: ""          # charge point ID pattern, for example CP-0001; case matters
    backend_url_format: ""       # how the charger builds its URL, for example base URL + "/" + identity
    url_config_key: ""           # the configuration key that holds the URL, for example CentralSystemURL
    heartbeat_interval_s: null
    connectors: ""               # per charger, for example "2 x J1772" or "CCS1 + CHAdeMO"
    power_type: ""               # AC1Phase | AC2Phase | AC2PhaseSplit | AC3Phase | DC
    max_power_kw: null
    display: ""                  # none | status_only | text | price
    display_languages: []        # languages the screen must show, for example [en, es]
    california_pricing: null     # true if it supports the California Pricing OCPP 1.6 extension
    connectivity: ""             # cellular | wifi | ethernet
    local_access: ""             # installer app, web page or vendor portal that configures it on site
    known_issues: ""             # reboots, lost sessions, meter or clock quirks you have seen

network:
  sim_provider: ""               # carrier or IoT SIM provider
  sim_owner: ""                  # you | incumbent | charger_vendor | installer
  sim_contract_end: ""           # YYYY-MM-DD
  private_apn: null              # true if the SIMs use a private APN
  ip_allow_list: ""              # allow-lists or firewalls between chargers and the internet, and who changes them
  site_networks: ""              # site Wi-Fi or Ethernet: who runs it, and its outbound rules
  fixed_addresses: ""            # chargers that pin IP addresses or cannot resolve DNS names

payments:
  processor: ""                  # stripe | braintree | other | none
  processor_other: ""            # its name, when processor is other
  merchant_account_owner: ""     # you | incumbent
  payment_methods: []            # app, web_qr, terminal, rfid_account, roaming, free
  authorization_hold: ""         # the amount held before a session, and when it is released
  payouts: ""                    # who pays you, how often, and which fees are deducted
  terminals:                     # one item per terminal vendor and model; leave empty if none
    - vendor: ""
      model: ""
      count: null
      placement: ""              # built_in | one_per_evse | one_per_charger | site_kiosk
      evse_link: ""              # through_charger | through_incumbent | standalone
      contract_owner: ""         # you | incumbent | charger_vendor | terminal_vendor
      connectivity: ""           # own_sim | charger | site_network

drivers:
  app: ""                        # incumbent_app | white_label_app | your_own_app | none
  accounts: null
  active_accounts_90_days: null
  stored_payment_methods: null   # true if drivers keep cards on file with the incumbent or its processor
  rfid_cards: null
  rfid_format: ""                # for example "7-byte UID, 14 hex digits, uppercase, as the charger sends it"
  rfid_issuer: ""                # who issued the cards, and who issues new ones
  groups: ""                     # fleets, members, employees, free or discounted groups
  subscriptions: ""              # memberships or plans drivers pay for
  roaming: []                    # roaming hubs or partners your chargers are published to
  plug_and_charge: null          # true if any vehicle starts by Plug & Charge today

pricing:
  currency: ""                   # ISO 4217, for example USD
  tariffs:                       # one item per distinct price
    - applies_to: ""             # which sites, chargers or driver groups
      energy_per_kwh: null
      per_hour: null
      session_fee: null
      time_of_use: ""            # peak and off-peak hours, if any
      limits: ""                 # minimum or maximum session price
  idle_fee: ""                   # rate, grace period and cap
  tax: ""                        # jurisdictions, rates, and who files
  prices_include_tax: null
  screen_price_required: null    # true if a rule requires the price on the charger screen
  receipts: ""                   # what a receipt must show, and who sends it

qr:
  stickers: null                 # true if chargers carry QR stickers
  count: null
  per: ""                        # charger | evse | site
  url_example: ""                # one sticker's URL, exactly as encoded
  hostname_owner: ""             # you | incumbent: who controls the sticker's hostname
  replace_allowed: null          # true if new stickers may be put up

data_export:
  sessions_history: ""           # how far back, format (CSV, API), who can export it
  users: ""                      # driver accounts: allowed to export, format
  rfid_list: ""                  # card values, status and owner, format
  invoices_and_payouts: ""
  reporting_obligations: ""      # programs you report charging or uptime data to
  retention: ""                  # how long the incumbent keeps your data after the contract ends, and how long you must keep history

contacts:                        # one item per person; keep this file private
  - role: ""                     # decision_maker | technical | operations | payments | site_host | installer | incumbent | sim_provider
    name: ""
    email: ""
    phone: ""
    hours: ""                    # time zone and hours they can be reached

quiet_windows:
  time_zone: ""                  # IANA name
  allowed: ""                    # when changes may happen, for example Tue-Thu 22:00-05:00
  blackout_dates: ""             # events, holidays, peak days
  site_exceptions: ""            # sites with other windows
  reboots_allowed: null          # true if chargers may be rebooted inside the window
  on_site_visits: ""             # access rules and notice for field engineers

constraints:
  target_start: ""               # YYYY-MM-DD
  target_end: ""                 # YYYY-MM-DD
  must_not_change: ""            # what drivers or site hosts must not notice
  regulatory: ""                 # rules or funding programs the network must keep meeting
  uptime_commitments: ""         # uptime promised to site hosts or funders
  other: ""

format is ivora-migration-discovery/1. A later version adds keys and keeps these, so a version 1 file stays readable; a key that changes meaning gets a new version.