Log inTalk to us

List a migration's parity reports

get/v1/migrations/{migration_id}/parity/reports
Requires an API key

Newest first, with each report's scope, window, tolerances and counts (chargers null: read one report for them). Any participant. A participant narrowed to some sites covers and reads the chargers at its sites only. Its list leaves out the reports with none of its chargers, and its counts and scope cover them. An unknown cursor is refused (422 invalid_request). Errors: 404 migration_not_found. See Errors and statuses.

Path parameters

  • migration_idstringRequired
    Pattern ^mig_[0-9a-f]{32}$

Query parameters

  • cursorstring | null
    next_cursor of the previous page.
    Pattern ^mpr_[0-9a-f]{32}$
  • limitinteger
    Default 50 · Minimum 1 · Maximum 100

Returns · 200

  • dataarray of MigrationParityReportRequired
    Child attributes
    • idstringRequired
      mpr_...
    • migration_idstringRequired
    • scopeParityScopeRequired
      Child attributes
      • station_idsarray of integer | null
      • location_idsarray of integer | null
      • allboolean | null
    • sincestringRequired
      The session window for chargers compared with the shadow-mode ledger.
    • untilstringRequired
    • tolerancesobjectRequired
    • ignore_keysarray of stringRequired
    • requirearray of enumRequired
    • countsobjectRequired
      Chargers passed, failed, incomplete, and total (of the caller's sites when narrowed).
    • created_bystringRequired
    • created_atstringRequired
    • chargersarray of ParityResult | nullRequired
      Each charger's result, ordered by charger_key; null in the list.
      Child attributes
      • station_idintegerRequired
      • charger_keystringRequired
      • location_idinteger | nullRequired
      • statusenumRequired
        passed: every required section passed and none failed; failed: a section differs beyond its tolerance; incomplete: a required section could not be checked.
        One of passed, failed, incomplete
      • sectionsParitySectionsRequired
        Child attributes
        • configurationConfigurationParityRequired
          Child attributes
          • statusenumRequired
            One of passed, failed, not_checked
          • reasonstring | nullRequired
            Why it was not checked: no_baseline, not_recorded (Ivora has not read the charger's configuration yet), nothing_compared, too_many_items (Ivora recorded more than 2,000 items for the charger), protocol_unsupported.
          • comparedintegerRequired
            Keys compared.
          • skippedarray of stringRequired
            Keys not compared: ignored, secret, deciding where the charger connects (its URL and identity differ on purpose), or ambiguous.
          • ambiguousarray of string
            OCPP 2.x labels skipped because Ivora recorded them with different values on more than one EVSE or attribute. Only the Actual attribute is compared.
          • differencesarray of ConfigurationDifferenceRequired
        • tariffTariffParityRequired
          Child attributes
          • statusenumRequired
            One of passed, failed, not_checked
          • reasonstring | nullRequired
            Why it was not checked: no_baseline, no_connectors, complex_tariff (Ivora bills a connector by a tariff with elements, rules or a time zone, so its base prices are not what it charges; a missing tariff or another currency still fails).
          • previousobject | nullRequired
            The baseline's tariff.
          • connectorsarray of TariffConnectorRequired
            Ivora's price on each connector.
          • differencesarray of TariffDifferenceRequired
        • sessionsSessionsParityRequired
          Child attributes
          • statusenumRequired
            One of passed, failed, not_checked
          • reasonstring | nullRequired
            Why it was not checked: no_baseline (no sessions in the baseline and no shadow-mode ledger entries in the window), too_many_sessions.
          • sourceenum | nullRequired
            baseline: the totals recorded from the previous platform; shadow_ledger: the sessions the charger proxy recorded from the control link in shadow mode (OCPP 1.6).
            One of baseline, shadow_ledger
          • sincestring | nullRequired
          • untilstring | nullRequired
          • previousobject | nullRequired
          • ivoraobject | nullRequired
            Ivora's sessions on the charger that started in the window (in shadow mode, its copy).
          • differencesarray of SessionDifferenceRequired
      • checked_atstringRequired
  • next_cursorstring | nullRequired
    Pass as cursor for the next page; null on the last one.
GET /v1/migrations/{migration_id}/parity/reports
curl --fail-with-body "https://api.ivoracharge.com/v1/migrations/mig_0123456789abcdef0123456789abcdef/parity/reports" \
  -H "Authorization: Bearer $IVORA_API_KEY"
Response · 200JSON
{
  "data": [
    {
      "id": "id_0123456789abcdef",
      "migration_id": "migration_0123456789abcdef",
      "scope": {
        "station_ids": [
          1
        ],
        "location_ids": [
          7
        ],
        "all": false
      },
      "since": "string",
      "until": "string",
      "tolerances": {},
      "ignore_keys": [
        "string"
      ],
      "require": [
        "configuration"
      ],
      "counts": {},
      "created_by": "string",
      "created_at": "2026-09-30T17:00:00Z",
      "chargers": [
        {
          "station_id": 1,
          "charger_key": "string",
          "location_id": 7,
          "status": "passed",
          "sections": {
            "configuration": null,
            "tariff": null,
            "sessions": null
          },
          "checked_at": "2026-09-30T17:00:00Z"
        }
      ]
    }
  ],
  "next_cursor": "string"
}
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.