Quickstart
Nothing to a charger reporting live telemetry, using a simulated charger so you need no hardware and no site visit.
Five steps. The only thing you need first is an access token.
Programmatic access is not available yet. There is no self-service sign-up and no service-account credential you can issue for yourself. Every request below needs a bearer token, and today the only tokens that exist come from a signed-in console session. If you are running the platform yourself, Set up your workspace explains how to get one from a local instance. This is the first thing that will change, and this page will lose the caveat when it does.
Throughout, api.flowion.io and gateway.flowion.io stand in for the hosts
you were given. $TOKEN is your access token.
1. Create an organization#
An organization is your account. Creating one also creates a default
environment called prod and makes you its Owner.
curl -X POST https://api.flowion.io/v1/organizations \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Acme Charging", "slug": "acme"}'
{
"id": "6f1d7c2e-9a44-4f1b-b8c0-2a7e5d3f9101",
"name": "Acme Charging",
"slug": "acme",
"created_at": "2026-08-10T09:00:00Z",
"updated_at": "2026-08-10T09:00:00Z"
}
The slug is yours to choose and cannot be derived from the name. It is
globally unique, lowercase, hyphen-separated — and it will appear in every
charger's connection URL, so choose something durable. A slug already in use
returns 409.
Keep the id. Call it $ORG.
2. Find your environment#
The prod environment was created for you. Fetch it:
curl https://api.flowion.io/v1/organizations/$ORG/environments \
-H "Authorization: Bearer $TOKEN"
Take the id of the one with "is_default": true. Call it $ENV.
3. Provision a charger#
curl -X POST https://api.flowion.io/v1/environments/$ENV/chargers \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"charge_point_id": "CP-01"}'
{
"id": "b2c4a8e0-1f3d-4c5b-9e7a-8d6f0b2c4a8e",
"charge_point_id": "CP-01",
"status": "offline",
"registration_status": "Accepted",
"authorization_key": "0001020304050607FFFFFFFFFFFFFFFFFFFFFFFF",
"created_at": "2026-08-10T09:01:00Z",
"updated_at": "2026-08-10T09:01:00Z"
}
authorization_keyis returned exactly once. Only a hash of it is stored, so it cannot be read back. Lose it and your only option is to rotate it. Copy it now — call it$KEY, and the charger'sid$CHARGER.
The charger is offline because nothing has connected yet, and
registration_status: "Accepted" because you have not withheld acceptance.
4. Connect a simulated charger#
Point a simulator at the connection URL your charger now expects:
wss://gateway.flowion.io/ocpp/acme/CP-01
No environment segment, because prod is your default environment. The
simulator authenticates with HTTP Basic over TLS — username CP-01, password
$KEY — and offers ocpp1.6 as its subprotocol.
Connect a simulated charger covers running one. If you have real hardware instead, see Connect a real charger — the URL and credentials are identical.
The station will open the socket, send a BootNotification, receive
Accepted, and begin sending heartbeats and connector statuses.
5. Watch it arrive#
curl https://api.flowion.io/v1/chargers/$CHARGER \
-H "Authorization: Bearer $TOKEN"
{
"id": "b2c4a8e0-1f3d-4c5b-9e7a-8d6f0b2c4a8e",
"charge_point_id": "CP-01",
"status": "online",
"ocpp_version": "ocpp1.6",
"last_boot_at": "2026-08-10T09:03:12Z",
"last_seen": "2026-08-10T09:03:12Z",
"boot_report": {
"vendor_name": "SimulatorCo",
"model": "SIM-1",
"firmware_version": "1.0.0"
}
}
Four things to notice:
statusis nowonline— a gateway holds its socket. This is a cache and can briefly lag reality;last_seenis the durable complement.ocpp_versionrecords what it actually negotiated, not what its datasheet claims.boot_reportis the station describing itself, captured at boot.- EVSEs and connectors have appeared. You never created them; they exist because the station reported them.
That is the whole loop: provision, connect, observe.
What to do next#
Run a charging session end to end — connect a cable, authorize a token, start charging, watch meter values arrive — with Connect a simulated charger.
Or read up:
- Lifecycle of a charging session — what those messages mean.
- Core concepts — sites, circuits, members, roles.
- API reference — every endpoint.
If it did not work#
The charger stays offline. The station never completed the handshake.
Check the URL slug, then the credentials, then whether it offers a subprotocol
we support — a station that connects and instantly disconnects is usually
offering a version we do not accept, not failing authentication.
401 from the API. The token is missing, malformed or expired.
403. The token is valid and you are a member, but your role is too low.
Provisioning chargers needs Owner or Admin.
404 on an environment or charger you just created. Almost always the
wrong id, or a token for a different organization. 404 rather than 403 is
deliberate — it does not confirm whether the resource exists.