Eleven interfaces. The same ones we use ourselves.
ENIO is built API-first: the backend and the app call exactly the endpoints you get. Here is what exists and what data flows through it — from a single charging session through the live state of every socket to the tariff you lower automatically at midday.
There is no second, lesser API for customers. Whatever the ENIO interface can do, you can do — same endpoints, same data.
REST over HTTPSOpenAPI spec per interfaceVersionedPermissions per tenant
Catalogue
Which interface does what
Filter by task or search. Every card says what the interface is for, what data moves through it and which endpoints exist.
11 APIs
Read datav1.4.5 · OAS 2.0
Charge Detail Record API
Fetch every completed and every running charging session — the basis for billing, reports and your own dashboards.
What you exchange with it
Per session the start and end time, energy in kWh, charge point by EVSE ID, card or user, the tariff applied, the amount billed and the duration. With pagination for long periods and a separate shape for currently active sessions. Authenticated through the x-auth header.
GET/charge-detail-recordList of sessions, filtered and paginated
Read datav1.7.2 · OAS 2.0
Chargeboxes Info & EVSE Status API
Read the inventory and the live state of every charge point in a tenant.
What you exchange with it
All charge boxes of a tenant with serial number, manufacturer and model, their EVSE IDs, connector type and power — plus the connection state of the box and the status of each socket: available, in use, reserved, faulted. Enough to build your own status board or feed an existing monitoring system.
GET/charge-boxes-infoAll charge boxes of a tenant with EVSE status
Read datav1.11.1 · OAS 3.1
ChargeBox Status-Error API
See, acknowledge and pull charge box faults and events into your own ticketing.
What you exchange with it
The event and error log per charge box with timestamp and error code, the list of all boxes in a tenant with unconfirmed faults, and acknowledgement either individually or for a whole box. You can also post your own debug events.
GET/api/v1/eventEvents for a given charge box
POST/api/v1/eventCreate your own debug event
GET/api/v1/event/unconfirmedBoxes with unconfirmed faults
POST/api/v1/event/confirm/{eventId}Acknowledge a single event
POST/api/v1/event/confirm-all/{chargeBoxId}Acknowledge all events of a box
Search receipts and deliver them as files — for finance or a self-service portal.
What you exchange with it
Search customer receipts by period, customer or transaction, and return the receipt URL for download. Your finance team gets the fiscalised receipts without going through the backend, and customers download their invoice in your own portal.
POST/api/v1/searches/receiptsReceipts matching the given criteria
GET/api/v1/searches/receipts/urlsDownload URL for a receipt
Read data
OCPP Meter Value
The meter readings a charge point reports during a session.
What you exchange with it
Meter readings from the OCPP MeterValues: meter register, current power delivered, current and voltage, and depending on the hardware the vehicle’s state of charge. The basis for load curves, load management analysis and metrology-law evidence.
Controlv1.8.0 · OAS 3.1
OCPP Messaging API
Send commands straight to the charge point — without logging into the backend.
What you exchange with it
OCPP commands to a charge box: reserve and cancel, change the availability of a socket, set configuration values, clear the authorisation cache, remotely stop a running transaction, trigger a soft or hard reset, request a message and unlock the connector. Plus a generic endpoint for any OCPP call.
POST/api/v1/OcppGenericAny OCPP call to a charge box
POST/api/v1/OcppMessage/reserve-nowReserve a socket for an ID tag
POST/api/v1/OcppMessage/cancel-reservationCancel a reservation
POST/api/v1/OcppMessage/change-availabilityBlock or release a socket
POST/api/v1/OcppMessage/change-configurationSet a configuration value
POST/api/v1/OcppMessage/clear-cacheClear the authorisation cache
POST/api/v1/OcppMessage/data-transferTransfer vendor-specific data
POST/api/v1/OcppMessage/remote-stop-transactionRemotely stop a running session
POST/api/v1/OcppMessage/resetReset the charge box
POST/api/v1/OcppMessage/trigger-messageTrigger a message from a socket
POST/api/v1/OcppMessage/unlock-connectorUnlock the connector
Controlv1.1.0 · OAS 3.0
ETSweb App V3 API
The interface behind the ENIO app — everything a driver does can also be triggered from your own application.
What you exchange with it
Login and user profile, start, stop and prioritise a session at an EVSE ID, add an odometer reading to a session, block an RFID card, validate and reserve a charge point and cancel the reservation, retrieve prices for an EVSE ID, list invoices and fetch them as PDF. These are the very endpoints the ENIO app uses.
POST/loginLogin and user info
POST/users/update-infoUpdate user info
POST/users/update-passwordUpdate password
POST/blockRfidCardBlock an RFID card
POST/charges/start/{evseId}Start a session
POST/charges/{chargeId}/stopStop a session
POST/charges/prioritize/{chargeId}Prioritise a session
POST/charges/update-mileageAdd the odometer reading
POST/chargepoints/validateValidate a charge point
POST/chargepoints/reserve-nowReserve a charge point
POST/chargepoints/reserve-now/{evseId}/cancelCancel a reservation
GET/charge-infoState of the running session
GET/commands/{commandId}Fetch the result of a command
GET/prices/{evseId}Prices for a charge point
GET/invoicesThe user’s invoices
GET/invoices/{invoiceId}/pdfInvoice as PDF
Tariffs & pricesv1.2.8 · OAS 3.1
Dynamic Pricing API
Set tariffs and tax rates programmatically — the interface behind dynamic pricing.
What you exchange with it
Create, update, patch and delete tariffs with validity period, version, price components and assignment; query the tariff valid at a given moment; read a specific tariff version. The same operations for tax rates. This is how you lower the price automatically when your PV system has surplus instead of curtailing it.
GET/api/v1/tariffTariff list, paged and filtered
POST/api/v1/tariffCreate a tariff
GET/api/v1/tariff/validResolve the currently valid tariff
GET/api/v1/tariff/specificRead a specific tariff version
GET/api/v1/tariff/{tariffId}Read a tariff by ID
PUT/api/v1/tariff/{tariffId}Replace a tariff
PATCH/api/v1/tariff/{tariffId}Patch a tariff
DELETE/api/v1/tariff/{tariffId}Delete a tariff
GET/api/v1/taxRead tax rates
POST/api/v1/taxCreate a tax rate
GET/api/v1/tax/validResolve the valid tax rate
GET/api/v1/tax/specificRead a specific tax version
PUT/api/v1/tax/{taxId}Replace a tax rate
PATCH/api/v1/tax/{taxId}Patch a tax rate
DELETE/api/v1/tax/{taxId}Delete a tax rate
Tariffs & pricesv1.0.0 · OAS 2.0
Vendor Basic Tariffs API
Read the basic tariffs stored for a tenant.
What you exchange with it
All basic tariffs of the tenant, matched through the x-vendor-id header from authentication. Your own interface then shows exactly the prices that apply at the charge point and in the app.
GET/vendor-basic-tariffsAll basic tariffs of a tenant
Customers & sitesv1.0.0 · OAS 3.0
Charging Location API
Show charge points on a map — in your own portal, in your own app.
What you exchange with it
Locations within a map viewport, clustered to the zoom level; the detail of one location with all its charge points, power ratings and availability; lookup by EVSE ID; and the country code for a coordinate. This is what powers the map in the ENIO app.
GET/v1/map-locationsLocations in the map viewport
GET/v1/map-locations/{locationId}All charge points of a location
GET/v1/map-locations/search-by-evse-idFind a location by EVSE ID
GET/v1/map-locations/find-country-code-by-pointCountry code for a coordinate
Customers & sitesv1.3 · OAS 3.1
Customer Onboarding API
Create and maintain user accounts without anyone opening the backend.
What you exchange with it
Create or update customer records with master data and optional credentials, change the credentials of an existing account, check whether an email address is already taken, and remove a customer entirely — from identity management and from ETSweb. Plus a webhook that returns events from identity management. This is how your employee portal or onboarding process hangs directly off ENIO.
POST/api/v1/CustomersCreate or update a customer
PUT/api/v1/CredentialsUpdate credentials
GET/api/v1/Customers/check-emailCheck an email address for duplicates
Every interface comes with a full OpenAPI specification covering all fields, example responses and error codes. This overview is the readable version; the specification is authoritative. Access to the API catalogue, your token and a sandbox come together with your tenant — on request already before signing, for a technical assessment.
In practice
What customers use the interfaces for
01Your own analysis
Dashboard in your own BI
Sessions through the CDR API into Power BI, Tableau or your own frontend — with your cost centres and your metrics.
More on thisOur example dashboard uses exactly this route. Take it as it is or build something entirely different.
02Straight into the ERP
Receipts and cost centres
The receipt and CDR APIs deliver receipts and sessions to where your finance team already works — SAP, ERP, fleet system.
More on thisIf you prefer not to poll, you get webhooks for started and completed sessions.
03Price follows the sun
Automate dynamic tariffs
Your energy management reports surplus, one call to the dynamic pricing API lowers the price — and raises it again in the evening.
More on thisTariffs are versioned and carry a validity period, so every change stays traceable.
Which system should hang off ENIO?
Tell us where the data should go — we will tell you which endpoints you need and what already works in the sandbox.