Skip to content
API reference

Geräte

9 endpoints

The endpoint descriptions come directly from the API and are in German.

Geräte auflisten

get/v1/devices

Ladepunkte mit aktuellem Zustand, Tarif, Abrechnungsmodell und QR-Code-URL.

Parameters

NameInType
location_idoptionalQuerystring
kindoptionalQuerystring

Response 200DeviceList

NameTypeDescription
objectrequired"list"
datarequiredDevice[]
has_morerequiredboolean

Possible errors

  • 400 Anfrage ungültig
  • 401 Nicht angemeldet
  • 403 Berechtigung fehlt
  • 404 Nicht gefunden
  • 409 Zustand passt nicht
  • 429 Zu viele Anfragen
Example
curl -X GET https://api.ladehase.com/v1/devices \n  -H "Authorization: Bearer lh_test_…"
Response 200
{
  "object": "list",
  "data": [
    {
      "id": "dev_7d3a9c1b0e2f4a6b",
      "object": "device",
      "kind": "string",
      "livemode": true,
      "name": "Ladepunkt Scheune",
      "location_id": "string",
      "integration_id": "string",
      "manufacturer": "string",
      "model": "string",
      "serial_number": "string",
      "max_power_w": 0,
      "tariff_id": "string",
      "billing": {},
      "enabled": true,
      "locked": true,
      "prepared": true,
      "status": "string",
      "state": {
        "online": true,
        "status": "string",
        "cable_plugged": true,
        "power_w": 0,
        "meter_wh": 0,
        "authorization_required": true,
        "last_seen_at": "2026-10-25T08:30:00.000Z",
        "error": "string"
      },
      "active_session_id": "string",
      "connectors": [
        {
          "id": "string",
          "code": "string",
          "url": "string"
        }
      ],
      "created_at": "string"
    }
  ],
  "has_more": true
}

Gerät abrufen

get/v1/devices/{id}

Ein Gerät mit Zustand.

Parameters

NameInType
idrequiredPathstring

Response 200Device

NameTypeDescription
idrequiredstringID mit Präfix «dev_»
objectrequired"device"
kindrequiredstringGeräteart, vorerst «ev_charger»
livemoderequiredboolean
namerequiredstring
location_idrequiredstring
integration_idrequiredstring | null
manufacturerrequiredstring | null
modelrequiredstring | null
serial_numberrequiredstring | null
max_power_wrequiredinteger | null
tariff_idrequiredstring | null
billingrequiredobjectAbrechnungsmodell, Reservationsgrenzen, Pakete
enabledrequiredbooleanVon Ladehase verwaltet und für Fahrende freigegeben
lockedrequiredbooleanVorübergehend gesperrt (keine neuen Ladungen)
preparedrequiredboolean«Autorisierung erforderlich» beim Hersteller gesetzt
statusrequiredstringZusammengefasster Status für Anzeigen
staterequiredDeviceState
active_session_idrequiredstring | null
connectorsrequiredobject[]
created_atrequiredstring

Possible errors

  • 400 Anfrage ungültig
  • 401 Nicht angemeldet
  • 403 Berechtigung fehlt
  • 404 Nicht gefunden
  • 409 Zustand passt nicht
  • 429 Zu viele Anfragen
Example
curl -X GET https://api.ladehase.com/v1/devices/{id} \n  -H "Authorization: Bearer lh_test_…"
Response 200
{
  "id": "dev_7d3a9c1b0e2f4a6b",
  "object": "device",
  "kind": "string",
  "livemode": true,
  "name": "Ladepunkt Scheune",
  "location_id": "string",
  "integration_id": "string",
  "manufacturer": "string",
  "model": "string",
  "serial_number": "string",
  "max_power_w": 0,
  "tariff_id": "string",
  "billing": {},
  "enabled": true,
  "locked": true,
  "prepared": true,
  "status": "string",
  "state": {
    "online": true,
    "status": "string",
    "cable_plugged": true,
    "power_w": 0,
    "meter_wh": 0,
    "authorization_required": true,
    "last_seen_at": "2026-10-25T08:30:00.000Z",
    "error": "string"
  },
  "active_session_id": "string",
  "connectors": [
    {
      "id": "string",
      "code": "string",
      "url": "string"
    }
  ],
  "created_at": "string"
}

Gerät ändern

patch/v1/devices/{id}

Name, Standort, Tarif, Abrechnungsmodell (reservation, prepaid, both), Reservationsgrenzen, Pakete. `enabled: true` aktiviert das Gerät und setzt beim Hersteller «Autorisierung erforderlich».

Parameters

NameInType
idrequiredPathstring

Request

NameTypeDescription
nameoptionalstring
location_idoptionalstring
tariff_idoptionalstring | null
billingoptionalobject
enabledoptionalboolean

Response 200Device

NameTypeDescription
idrequiredstringID mit Präfix «dev_»
objectrequired"device"
kindrequiredstringGeräteart, vorerst «ev_charger»
livemoderequiredboolean
namerequiredstring
location_idrequiredstring
integration_idrequiredstring | null
manufacturerrequiredstring | null
modelrequiredstring | null
serial_numberrequiredstring | null
max_power_wrequiredinteger | null
tariff_idrequiredstring | null
billingrequiredobjectAbrechnungsmodell, Reservationsgrenzen, Pakete
enabledrequiredbooleanVon Ladehase verwaltet und für Fahrende freigegeben
lockedrequiredbooleanVorübergehend gesperrt (keine neuen Ladungen)
preparedrequiredboolean«Autorisierung erforderlich» beim Hersteller gesetzt
statusrequiredstringZusammengefasster Status für Anzeigen
staterequiredDeviceState
active_session_idrequiredstring | null
connectorsrequiredobject[]
created_atrequiredstring

Possible errors

  • 400 Anfrage ungültig
  • 401 Nicht angemeldet
  • 403 Berechtigung fehlt
  • 404 Nicht gefunden
  • 409 Zustand passt nicht
  • 429 Zu viele Anfragen
Example
curl -X PATCH https://api.ladehase.com/v1/devices/{id} \n  -H "Authorization: Bearer lh_test_…" \n  -H "Content-Type: application/json" \n  -d '{"name":"string","location_id":"string","tariff_id":"string","billing":{"model":"reservation","reservationDefault":3000,"reservationMin":1000,"reservationMax":10000,"safetyMarginBps":300,"packages":[],"prepaidRemainder":"refund","plugTimeoutMinutes":10,"maxDurationMinutes":1440},"enabled":true}'
Response 200
{
  "id": "dev_7d3a9c1b0e2f4a6b",
  "object": "device",
  "kind": "string",
  "livemode": true,
  "name": "Ladepunkt Scheune",
  "location_id": "string",
  "integration_id": "string",
  "manufacturer": "string",
  "model": "string",
  "serial_number": "string",
  "max_power_w": 0,
  "tariff_id": "string",
  "billing": {},
  "enabled": true,
  "locked": true,
  "prepared": true,
  "status": "string",
  "state": {
    "online": true,
    "status": "string",
    "cable_plugged": true,
    "power_w": 0,
    "meter_wh": 0,
    "authorization_required": true,
    "last_seen_at": "2026-10-25T08:30:00.000Z",
    "error": "string"
  },
  "active_session_id": "string",
  "connectors": [
    {
      "id": "string",
      "code": "string",
      "url": "string"
    }
  ],
  "created_at": "string"
}

Zustand abfragen

get/v1/devices/{id}/state

Aktueller Zustand. Mit `refresh=true` wird beim Hersteller nachgefragt.

Parameters

NameInType
idrequiredPathstring
refreshoptionalQueryboolean | null

Response 200DeviceState

NameTypeDescription
onlineoptionalboolean
statusoptionalstringoffline, available, vehicle_connected, awaiting_authorization, charging, suspended, finished, error
cable_pluggedoptionalboolean
power_woptionalintegerAktuelle Leistung in Watt
meter_whoptionalinteger | nullZählerstand in Wh
authorization_requiredoptionalboolean | null
last_seen_atoptionalstring | nullZeitpunkt (ISO 8601, UTC)
erroroptionalstring | null

Possible errors

  • 400 Anfrage ungültig
  • 401 Nicht angemeldet
  • 403 Berechtigung fehlt
  • 404 Nicht gefunden
  • 409 Zustand passt nicht
  • 429 Zu viele Anfragen
Example
curl -X GET https://api.ladehase.com/v1/devices/{id}/state \n  -H "Authorization: Bearer lh_test_…"
Response 200
{
  "online": true,
  "status": "string",
  "cable_plugged": true,
  "power_w": 0,
  "meter_wh": 0,
  "authorization_required": true,
  "last_seen_at": "2026-10-25T08:30:00.000Z",
  "error": "string"
}

Ladung ohne Zahlung starten

post/v1/devices/{id}/start

Gibt den Ladepunkt ohne Zahlung frei (z. B. eigenes Auto). Ladehase legt dafür eine Gratis-Sitzung an, damit die Energie erfasst wird.

Parameters

NameInType
idrequiredPathstring
idempotency-keyoptionalWiederholbare Anfragen ohne doppelte Wirkung (24 Stunden)Headerstring

Response 201Session

NameTypeDescription
idrequiredstringID mit Präfix «ses_»
objectrequired"session"
livemoderequiredboolean
staterequiredstringZustand gemäss Zustandsautomat (created … settled)
moderequired"reservation" | "prepaid" | "access"
channelrequired"qr" | "terminal" | "api" | "rfid" | "access_link"
location_idrequiredstring
device_idrequiredstring
connector_idrequiredstring
currencyrequiredstring
authorized_amountrequiredintegerReservierter beziehungsweise bezahlter Betrag in Rappen
amountrequiredintegerHochgerechneter Betrag (laufend) oder Endbetrag in Rappen
captured_amountrequiredintegerBelasteter Betrag in Rappen
refunded_amountrequiredintegerZurückerstatteter Betrag in Rappen
vat_amountrequiredintegerMWST-Anteil in Rappen
energy_whrequiredintegerGeladene Energie in Wh
idle_minutesrequiredinteger
stop_reasonrequiredstring | null
receipt_numberrequiredstring | null
started_atrequiredstring | nullZeitpunkt (ISO 8601, UTC)
ended_atrequiredstring | nullZeitpunkt (ISO 8601, UTC)
settled_atrequiredstring | nullZeitpunkt (ISO 8601, UTC)
created_atrequiredstring

Possible errors

  • 400 Anfrage ungültig
  • 401 Nicht angemeldet
  • 403 Berechtigung fehlt
  • 404 Nicht gefunden
  • 409 Zustand passt nicht
  • 429 Zu viele Anfragen
Example
curl -X POST https://api.ladehase.com/v1/devices/{id}/start \n  -H "Authorization: Bearer lh_test_…"
Response 201
{
  "id": "ses_1a2b3c4d5e6f7a8b9c0d",
  "object": "session",
  "livemode": true,
  "state": "string",
  "mode": "reservation",
  "channel": "qr",
  "location_id": "string",
  "device_id": "string",
  "connector_id": "string",
  "currency": "string",
  "authorized_amount": 1235,
  "amount": 1235,
  "captured_amount": 1235,
  "refunded_amount": 1235,
  "vat_amount": 1235,
  "energy_wh": 0,
  "idle_minutes": 0,
  "stop_reason": "string",
  "receipt_number": "string",
  "started_at": "2026-10-25T08:30:00.000Z",
  "ended_at": "2026-10-25T08:30:00.000Z",
  "settled_at": "2026-10-25T08:30:00.000Z",
  "created_at": "string"
}

Ladung am Gerät stoppen

post/v1/devices/{id}/stop

Stoppt die laufende Sitzung des Geräts und rechnet ab. Ohne Sitzung wird nur der Stoppbefehl gesendet.

Parameters

NameInType
idrequiredPathstring
idempotency-keyoptionalWiederholbare Anfragen ohne doppelte Wirkung (24 Stunden)Headerstring

Response 200Object

Possible errors

  • 400 Anfrage ungültig
  • 401 Nicht angemeldet
  • 403 Berechtigung fehlt
  • 404 Nicht gefunden
  • 409 Zustand passt nicht
  • 429 Zu viele Anfragen
Example
curl -X POST https://api.ladehase.com/v1/devices/{id}/stop \n  -H "Authorization: Bearer lh_test_…"
Response 200
{}

Gerät sperren

post/v1/devices/{id}/lock

Keine neuen Ladungen, laufende Ladung läuft weiter.

Parameters

NameInType
idrequiredPathstring
idempotency-keyoptionalWiederholbare Anfragen ohne doppelte Wirkung (24 Stunden)Headerstring

Response 200Device

NameTypeDescription
idrequiredstringID mit Präfix «dev_»
objectrequired"device"
kindrequiredstringGeräteart, vorerst «ev_charger»
livemoderequiredboolean
namerequiredstring
location_idrequiredstring
integration_idrequiredstring | null
manufacturerrequiredstring | null
modelrequiredstring | null
serial_numberrequiredstring | null
max_power_wrequiredinteger | null
tariff_idrequiredstring | null
billingrequiredobjectAbrechnungsmodell, Reservationsgrenzen, Pakete
enabledrequiredbooleanVon Ladehase verwaltet und für Fahrende freigegeben
lockedrequiredbooleanVorübergehend gesperrt (keine neuen Ladungen)
preparedrequiredboolean«Autorisierung erforderlich» beim Hersteller gesetzt
statusrequiredstringZusammengefasster Status für Anzeigen
staterequiredDeviceState
active_session_idrequiredstring | null
connectorsrequiredobject[]
created_atrequiredstring

Possible errors

  • 400 Anfrage ungültig
  • 401 Nicht angemeldet
  • 403 Berechtigung fehlt
  • 404 Nicht gefunden
  • 409 Zustand passt nicht
  • 429 Zu viele Anfragen
Example
curl -X POST https://api.ladehase.com/v1/devices/{id}/lock \n  -H "Authorization: Bearer lh_test_…"
Response 200
{
  "id": "dev_7d3a9c1b0e2f4a6b",
  "object": "device",
  "kind": "string",
  "livemode": true,
  "name": "Ladepunkt Scheune",
  "location_id": "string",
  "integration_id": "string",
  "manufacturer": "string",
  "model": "string",
  "serial_number": "string",
  "max_power_w": 0,
  "tariff_id": "string",
  "billing": {},
  "enabled": true,
  "locked": true,
  "prepared": true,
  "status": "string",
  "state": {
    "online": true,
    "status": "string",
    "cable_plugged": true,
    "power_w": 0,
    "meter_wh": 0,
    "authorization_required": true,
    "last_seen_at": "2026-10-25T08:30:00.000Z",
    "error": "string"
  },
  "active_session_id": "string",
  "connectors": [
    {
      "id": "string",
      "code": "string",
      "url": "string"
    }
  ],
  "created_at": "string"
}

Gerät entsperren

post/v1/devices/{id}/unlock

Hebt die Sperre auf.

Parameters

NameInType
idrequiredPathstring
idempotency-keyoptionalWiederholbare Anfragen ohne doppelte Wirkung (24 Stunden)Headerstring

Response 200Device

NameTypeDescription
idrequiredstringID mit Präfix «dev_»
objectrequired"device"
kindrequiredstringGeräteart, vorerst «ev_charger»
livemoderequiredboolean
namerequiredstring
location_idrequiredstring
integration_idrequiredstring | null
manufacturerrequiredstring | null
modelrequiredstring | null
serial_numberrequiredstring | null
max_power_wrequiredinteger | null
tariff_idrequiredstring | null
billingrequiredobjectAbrechnungsmodell, Reservationsgrenzen, Pakete
enabledrequiredbooleanVon Ladehase verwaltet und für Fahrende freigegeben
lockedrequiredbooleanVorübergehend gesperrt (keine neuen Ladungen)
preparedrequiredboolean«Autorisierung erforderlich» beim Hersteller gesetzt
statusrequiredstringZusammengefasster Status für Anzeigen
staterequiredDeviceState
active_session_idrequiredstring | null
connectorsrequiredobject[]
created_atrequiredstring

Possible errors

  • 400 Anfrage ungültig
  • 401 Nicht angemeldet
  • 403 Berechtigung fehlt
  • 404 Nicht gefunden
  • 409 Zustand passt nicht
  • 429 Zu viele Anfragen
Example
curl -X POST https://api.ladehase.com/v1/devices/{id}/unlock \n  -H "Authorization: Bearer lh_test_…"
Response 200
{
  "id": "dev_7d3a9c1b0e2f4a6b",
  "object": "device",
  "kind": "string",
  "livemode": true,
  "name": "Ladepunkt Scheune",
  "location_id": "string",
  "integration_id": "string",
  "manufacturer": "string",
  "model": "string",
  "serial_number": "string",
  "max_power_w": 0,
  "tariff_id": "string",
  "billing": {},
  "enabled": true,
  "locked": true,
  "prepared": true,
  "status": "string",
  "state": {
    "online": true,
    "status": "string",
    "cable_plugged": true,
    "power_w": 0,
    "meter_wh": 0,
    "authorization_required": true,
    "last_seen_at": "2026-10-25T08:30:00.000Z",
    "error": "string"
  },
  "active_session_id": "string",
  "connectors": [
    {
      "id": "string",
      "code": "string",
      "url": "string"
    }
  ],
  "created_at": "string"
}

Testgerät steuern

post/v1/devices/{id}/simulate

Nur Testmodus: simuliertes Auto anstecken (`plug`), abziehen (`unplug`), offline, Störung, Leistung ändern.

Parameters

NameInType
idrequiredPathstring
idempotency-keyoptionalWiederholbare Anfragen ohne doppelte Wirkung (24 Stunden)Headerstring

Request

NameTypeDescription
actionrequired"plug" | "unplug" | "offline" | "online" | "error" | "clear_error" | "set_power"
vehicle_need_whoptionalinteger
power_woptionalinteger

Response 200DeviceState

NameTypeDescription
onlineoptionalboolean
statusoptionalstringoffline, available, vehicle_connected, awaiting_authorization, charging, suspended, finished, error
cable_pluggedoptionalboolean
power_woptionalintegerAktuelle Leistung in Watt
meter_whoptionalinteger | nullZählerstand in Wh
authorization_requiredoptionalboolean | null
last_seen_atoptionalstring | nullZeitpunkt (ISO 8601, UTC)
erroroptionalstring | null

Possible errors

  • 400 Anfrage ungültig
  • 401 Nicht angemeldet
  • 403 Berechtigung fehlt
  • 404 Nicht gefunden
  • 409 Zustand passt nicht
  • 429 Zu viele Anfragen
Example
curl -X POST https://api.ladehase.com/v1/devices/{id}/simulate \n  -H "Authorization: Bearer lh_test_…" \n  -H "Content-Type: application/json" \n  -d '{"action":"plug","vehicle_need_wh":0,"power_w":0}'
Response 200
{
  "online": true,
  "status": "string",
  "cable_plugged": true,
  "power_w": 0,
  "meter_wh": 0,
  "authorization_required": true,
  "last_seen_at": "2026-10-25T08:30:00.000Z",
  "error": "string"
}