What is Charge Verification?
Charge Verification helps you trust reimbursed home charges. For charges paid from a team wallet, Monta captures evidence from the vehicle during the session and runs a set of automatic checks when the charge completes, then shows a clear result on the charge. It's designed so you can confirm that the energy you're reimbursing actually went into the expected vehicle.
What evidence Monta captures
On qualifying charges, Monta takes a snapshot of vehicle data at the start and end of the session, where it's available:
- Odometer — the vehicle's distance reading. It comes from the vehicle integration, or is entered manually (by the driver in the app or by your team in Hub). Integration readings are treated as verified; manual entries as declared.
- Location (GPS) — the vehicle's position, used to check it was at the charge point.
- State of charge (SoC) — the battery percentage at the start and end of the charge.
- Vehicle identifier (VID) — the identifier the vehicle transmits during the session.
Every data point stores where it came from and two timestamps — when the vehicle produced the value and when Monta captured it. That lets Monta judge how fresh the evidence is: a GPS reading taken within about 15 minutes of the session is treated as fresh, and one older than about 2 hours as stale.
The checks Monta runs
When the charge completes, Monta runs every check it has data for and records a pass, flag, or inconclusive for each.
Vehicle assignment
If you've pinned an expected company vehicle to the home charge point, Monta checks the charging vehicle matches it. A match passes; a different vehicle is a critical flag; if no vehicle is recorded on the charge it's inconclusive.
VID match
Compares the identifier the vehicle transmitted against the vehicle's known identifiers. In the known set passes; a known vehicle transmitting an unrecognised identifier is flagged; no identifier (or no linked vehicle yet) is inconclusive while Monta is still learning the vehicle's identifiers.
Location
Compares the vehicle's GPS position with the charge point, allowing for normal GPS error (roughly 150 m, plus a little more if the reading is old). Within about 500 m confirms the vehicle was there; up to about 3 km is plausible; a fresh reading more than 3 km away — or any reading beyond about 10 km — is flagged. A very old reading sitting right at the charge point is treated as "parked there" and accepted.
Consumption (odometer vs energy)
Compares the energy charged with the distance driven between two odometer readings, using a guide of about 0.2 kWh per km. If the energy charged is up to about 1.3× the expected amount it passes; up to about 2× is suspicious; more than 2× is flagged — for example, far more energy billed than the distance driven could explain.
State of charge vs energy
Checks that the battery percentage gained lines up with the energy delivered, using the battery's capacity and about 88% charging efficiency. If the SoC gain is well below what the energy should have added (under about 70% of expected), it's flagged. The check is skipped when the battery started nearly full (98%+) or when SoC or battery-capacity data is missing.
Odometer quality
Flags a missing odometer reading, or a reading that goes backwards within a charge.
When a check doesn't have the data it needs, it's marked inconclusive, and Monta records exactly which inputs were missing (odometer, GPS, SoC, or VID) — this is the "Not enough data to verify" message you may see.
Session plausibility checks
Beyond the vehicle-evidence checks above, Monta runs a set of automated session-plausibility checks on every paid completed charge — on your own charge points and on roaming sessions. These look for sessions that don’t add up. They are detect-only: a flag is recorded for review, and the charge is never blocked or changed.
A session is flagged when:
- Duplicate session — another session on the same charge point on the same day delivered almost exactly the same energy (within 0.05 kWh).
- Charging duration — the session ran longer than 48 hours.
- Session energy — the session delivered more than 300 kWh, larger than any current EV battery.
- Peak power — the measured peak power was above 400 kW.
- Average power — the average power (energy divided by charging time) was more than 1.15× the charge point’s rated maximum, or above 350 kW where no rating is known.
- Price — the total session price was above €1,000, or the price per kWh was above €5 (compared in euros so it works across currencies).
- Impossible travel — the same charge key or vehicle started sessions at charge points too far apart to travel between in the time available (an implied speed above 250 km/h).
- Invalid timeline — the session ends before it starts, or bills energy across a window of almost no time.
- Overlapping sessions — the same charge key or vehicle appears to be charging at two different charge points at the same time.
- Late or future-dated record — a roaming charge record arrives long after the session ended, or claims to end in the future.
- Meter mismatch — the billed energy doesn’t match the difference between the start and end meter readings (for charges that report meter values).
These checks cover both your own charge points and roaming sessions. They are being rolled out gradually and may not be active for every operator yet.
The verification result
The individual checks roll up into one result on the charge, and you'll also see the counts behind it (for example, "4 passed · 3 inconclusive"):
- Verified — the checks passed.
- Flagged — at least one check raised a concern. A single flag outranks any number of passes, so a flagged charge always shows as flagged.
- Inconclusive — there wasn't enough evidence to decide.
- Not run — no checks ran for this charge.
Each flag also carries a severity — info, warning, or critical — so the most serious issues (like a mismatched vehicle) stand out.
Result reference
Each check writes a result with a key (you may see it in a charge’s details or via the API) and a severity. This table lists every result and what it means.
| Result key | What it means | Severity |
|---|---|---|
vehicle_assignment.match |
The charging vehicle matches the vehicle pinned to this charge point. | Info |
vehicle_assignment.mismatch |
A different vehicle than the pinned one charged here. | Critical |
vehicle_assignment.unknown_actual |
Couldn't tell which vehicle charged. | Warning |
vehicle_assignment.unconfigured |
No expected vehicle is pinned to this charge point. | Info |
vid.match |
The transmitted vehicle identifier matches a known one for the vehicle. | Info |
vid.mismatch |
The transmitted identifier isn't among the vehicle's known ones. | Warning |
vid.unknown |
No identifier transmitted, or the vehicle's identifiers aren't learned yet. | Info |
proximity.confirmed |
The vehicle's GPS placed it at the charge point. | Info |
proximity.contradicted |
The vehicle's GPS was too far from the charge point. | Warning |
proximity.unknown |
No usable GPS to check the location. | Info |
consumption.plausible |
Energy charged fits the distance driven. | Info |
consumption.suspicious |
More energy charged than the distance suggests. | Warning |
consumption.fraudulent |
Far more energy charged than the distance can explain. | Critical |
consumption.pending |
Waiting on a later odometer reading before comparing. | Info |
consumption.unknown |
Not enough odometer data to compare. | Info |
soc.delta_within_expected |
The battery percentage gained matches the energy delivered. | Info |
soc.delta_below_expected |
The battery percentage gained is well below what the energy should add. | Warning |
soc.unknown |
Not enough state-of-charge data to check. | Info |
odometer.missing |
No odometer reading was captured for the charge. | Warning |
odometer.decreased |
An odometer reading went backwards within the charge. | Warning |
verification.insufficient_data |
There wasn't enough data to run the checks. | Info |
session.duplicate |
Looks like a duplicate of another session on the same charge point that day. | Warning |
session.duration_implausible |
The session ran longer than 48 hours. | Warning |
session.energy_implausible |
The session delivered more than 300 kWh. | Warning |
session.peak_power_implausible |
Peak power was above 400 kW. | Warning |
session.avg_power_exceeds_rated |
Average power exceeded the charge point's rated maximum. | Warning |
session.price_implausible |
Price was above €1,000 total, or above €5 per kWh. | Warning |
session.impossible_travel |
The same charge key or vehicle charged at points too far apart for the time available. | Warning |
session.timeline_invalid |
The session ends before it starts, or bills energy across almost no time. | Warning |
session.concurrent_sessions |
The same charge key or vehicle charged at two different charge points at overlapping times. | Warning |
session.cdr_arrived_late |
A roaming record arrived long after the session ended, or claims to end in the future. | Info / Warning |
session.meter_delta_mismatch |
Billed energy doesn’t match the start-to-end meter reading difference. | Warning |
Reviewing a charge
Open a charge to see all the captured evidence and the outcome of each individual check. If a flag has been raised, you can review it and resolve it with a note once you've looked into it — resolved flags are kept as a record. You can also re-run verification for a charge if new information becomes available.
Entering an odometer reading manually
If the vehicle integration can't provide an odometer reading, one can be entered manually — by the driver in the Monta app, or by your team in Hub. Readings are kept as a history; a reading is never rejected at entry, so if one looks wrong (for example it goes down, or jumps unrealistically), the verification checks surface it as a flag instead.
Linking a company vehicle
For sponsored home charge points, you can pin the expected company vehicle to the charge point. The vehicle-assignment check then knows which vehicle should be charging there, and flags charges from any other vehicle — the strongest signal that a reimbursed charge is legitimate.
Availability
Charge Verification applies to reimbursed charges paid from a team wallet. The richer checks (location, consumption, state of charge) depend on the vehicle data available for each charge, so a charge can show as Inconclusive when that data isn't present — the vehicle-assignment check, by contrast, runs whenever an expected vehicle is pinned.