Sheme i primjeri administratorskog API-ja
Ova datoteka definira višekratno upotrebljive JSON tipove imenovane u Referentnom pregledu krajnjih točaka. ? znači neobavezno pri unosu; | null znači da je svojstvo prisutno i može biti null u izlazu, osim ako okolna krajnja točka ne navodi drukčije. DateTime je tekstualni niz RFC 3339; datumi i vremena u zahtjevima moraju sadržavati vremenski pomak.
Primitivni tipovi i tipovi referentnih podataka
PositiveInt = integer > 0
NonnegativeInt = integer >= 0
DateTime = RFC3339 string, for example "2026-08-24T12:30:00Z"
NamedLookup = { id: PositiveInt, name: string }
SiteRef = { id: PositiveInt, name: string|null }
Cost = { currency: string, net: number, tax: number, total: number }
Nepoznata buduća polja treba zanemariti. ID-jevi su JSON brojevi, osim neprozirnih pokazivača i ID-jeva pristupnih tokena kojima upravlja portal. API ne vraća sirove RFID UID-jeve, lozinke punjača, tokene radnog prostora, contractId, tajne pružatelja usluge ni neskrivene konfiguracijske vrijednosti nalik tajnama.
Pretvorba tipova u zahtjevu i nepoznata svojstva
API ne primjenjuje jedno globalno pravilo pretvorbe brojeva:
- Svaki ID resursa u putanji i brojčani parametar upita prihvaća decimalni tekstualni niz poput
"12"kada zadovoljava dokumentirano ograničenje cijelog broja ili raspona. countryIdradnog prostora;countryId/timezoneIdlokacije; brojčana polja lokacije/priključka punjača i naredbi; svako brojčano polje tarife; i svako brojčano polje profila punjenja također se pretvaraju iz brojčanih JSON tekstualnih nizova.- Zemljopisna širina i dužina lokacije,
smartModepunjača, sve brojčane vrijednosti upravljanja snagom, brojčane vrijednosti rasporeda izvještaja te ID-jevi i vrijednosti u tijelima zahtjeva za korisnika/RFID/pristup/ograničenje/lokalnog korisnika zahtijevaju JSON brojeve i ne pretvaraju se iz drugih tipova. - Objekti tijela zahtjeva za tarife, profile punjenja, rasporede izvještaja i korisnike odbijaju nepoznata svojstva s
422. Objekti za radne prostore, lokacije, upravljanje snagom, ostale objekte punjača/izvještaja te objekti upita zanemaruju nepoznata svojstva.
Ove pojedinosti opisuju ponašanje prijenosa, a nisu preporuka: klijenti trebaju slati JSON brojeve za brojčana polja tijela zahtjeva.
Tipovi radnog prostora i lokacije
Workspace = {
id: PositiveInt,
name: string,
email: string|null,
website: string|null,
address: {
line1: string|null, line2: string|null, postalCode: string|null,
city: string|null, state: string|null, countryId: PositiveInt,
countryCode: string, countryName: string
},
createdAt: DateTime,
updatedAt: DateTime
}
Site = {
id: PositiveInt,
name: string,
description: string|null,
address: {
line1: string|null, line2: string|null, postalCode: string|null,
city: string|null, state: string|null, countryId: PositiveInt,
countryCode: string, countryName: string
},
timezone: { id: PositiveInt, name: string },
latitude: number|null,
longitude: number|null,
chargerCount: integer
}
SiteSession = {
id: PositiveInt,
charger: { id: PositiveInt, name: string },
portId: PositiveInt,
connectorId: integer,
active: boolean,
startedAt: DateTime,
stoppedAt: DateTime|null,
durationSeconds: integer|null,
energyWh: number,
costs: Cost[]
}
MetricsWindow = {
from: DateTime, to: DateTime, sessionLimit: integer,
sessionsIncluded: integer, totalsCapped: boolean
}
GET /sites/:siteId vraća { site, recentSessions, totals, metricsWindow }. Njegov site dodaje stanje pripadajućih punjača/priključaka osnovnoj projekciji lokacije; totals sadrži sessions, energyWh, energyKwh, durationSeconds i costs: Cost[].
Referentni podaci lokacije su { countries: {countryId, countryCode, name}[], timezones: {timezoneId, name}[] }, s brojčanim ID-jevima i tekstualnim nazivima/kodovima.
DashboardSession = {
id: PositiveInt, chargerId: PositiveInt, connectorId: PositiveInt,
userId: PositiveInt|null, userName: string|null, chargerName: string|null,
site: SiteRef|null, status: string|null, energyWh: number,
startedAt: DateTime|null, stoppedAt: DateTime|null,
costs: Array<{ currency: string|null, price: number, tax: number }>
}
Dashboard = {
window: { from: DateTime, to: DateTime, maxSessions: 1000 },
stats: { chargerCount: integer, onlineChargerCount: integer, siteCount: integer, userCount: integer },
sessions: DashboardSession[],
analytics: {
totals: { sessions: integer, energyWh: number, durationSeconds: integer, costs: Array<{currency:string, amount:number}> },
daily: Array<{ date:string, sessions:integer, energyWh:number, costs:Array<{currency:string, amount:number}> }>,
sites: Array<{ id:PositiveInt, name:string|null, sessions:integer, energyWh:number, costs:Array<{currency:string, amount:number}> }>,
chargers: Array<{ id:PositiveInt, name:string|null, siteId:PositiveInt|null, siteName:string|null, sessions:integer, energyWh:number, costs:Array<{currency:string, amount:number}> }>
}
}
SiteDetailCharger = {
id: PositiveInt, name: string|null, identifier: string|null, status: string,
connection: { lastSeenAt: DateTime|null, leaseExpiresAt: DateTime|null }|null,
connectors: Array<{ evseId:PositiveInt, evseNumber:integer, portId:PositiveInt, connectorId:integer, status:string|null }>,
sessionCount: integer,
totals: { sessions:integer, energyWh:number, energyKwh:number, durationSeconds:integer, costs:Cost[] }
}
Primjer izmjene radnog prostora i odgovora:
PATCH /v2/admin
Authorization: Bearer evc_ws_<selector>.<secret>
Idempotency-Key: workspace-contact-20260824
Content-Type: application/json
{"email":"ops@example.com","city":"Riga"}
{
"workspace": {
"id": 7,
"name": "Example CPO",
"email": "ops@example.com",
"website": null,
"address": {
"line1": "1 Example Street",
"line2": null,
"postalCode": "LV-1001",
"city": "Riga",
"state": null,
"countryId": 1,
"countryCode": "LV",
"countryName": "Latvia"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-08-24T12:30:00.000Z"
}
}
Primjer stvaranja/ažuriranja lokacije (polja sa zadanim vrijednostima mogu se izostaviti):
{
"name": "Main depot",
"addressLine1": "1 Example Street",
"city": "Riga",
"countryId": 1,
"timezoneId": 1,
"latitude": 56.9496,
"longitude": 24.1052
}
Odgovor upravljanja snagom
PowerConfiguration = {
site: { id: PositiveInt, updatedAt: DateTime },
chargepoints: Array<{
id: PositiveInt, name: string|null,
compatible: boolean, compatibility: string, // values come from shared capability projection
...additional smart-charging capability flags
}>,
pools: Array<{
id: PositiveInt, parentId: PositiveInt|null, name: string|null,
limit: integer, defaultLimit: integer|null, mode: integer|string|null
}>,
assignments: Array<{
poolId: PositiveInt, chargepointId: PositiveInt, priority: integer,
chargingProfileId: PositiveInt|null,
chargingProfileSynced: integer|null,
limit: number|null
}>,
meterSources: Array<{
id: PositiveInt, poolId: PositiveInt, sourceId: PositiveInt,
provider: string, name: string|null, externalId: string,
measurementMode: string, valueMode: string,
reserveA: integer, offlineSafeA: integer, ttlSeconds: integer,
enabled: boolean, lastComputedLimitA: number|null,
lastComputedAt: DateTime|null, lastStatus: string|null,
lastSeenAt: DateTime|null, effectiveLimitA: number|null
}>,
connectors: Array<{
id: PositiveInt, connectorId: integer, chargepointId: PositiveInt,
status: string|null
}>
}
Točne nazive dodatnih polja kompatibilnosti generira smartChargingCompatibility(); povratni tip te pomoćne funkcije nije izričito imenovan u izvornom kodu. Ovo je jedini dio odgovora čiji se zatvoreni popis polja ne može odrediti iz izvezenog tipa, pa su dodatna polja namjerno označena kao nejasna umjesto da se izmišljaju.
Primjer zamjene:
{
"pools": [
{
"name": "Depot supply",
"limit": 125,
"meterSources": [
{
"externalId": "meter-42",
"measurementMode": "available_headroom",
"enabled": true
}
],
"children": [
{"chargepointId": 11, "priority": 10},
{"name": "Secondary", "limit": 32, "children": []}
]
}
]
}
Tipovi punjača
Charger = {
id: PositiveInt, name: string, identifier: string, cpoId: PositiveInt,
site: { id: PositiveInt, name: string }, status: string,
isPublic: boolean, invertedRfid: boolean, smartMode: integer,
automationDisabled: boolean, provisioned: boolean,
connection: {
protocol: string|null, lastSeenAt: DateTime|null, leaseExpiresAt: DateTime|null
} | null,
evses: Array<{ id: PositiveInt, number: integer, status: string|null }>,
connectors: Array<{
evseId: PositiveInt, evseNumber: integer, status: string|null,
id: PositiveInt, connectorId: integer, portNumber: integer,
format: { id: PositiveInt, name: string, description: string|null },
type: { id: PositiveInt, name: string, description: string|null },
powerType: { id: PositiveInt, name: string, description: string|null },
maxVoltage: number, maxAmperage: number, maxElectricPower: number,
maxPowerKw: number
}>,
createdAt: DateTime, updatedAt: DateTime
}
ChargerDetail = Charger & {
configuration: Array<{
chargepointConfigId: PositiveInt, key: string,
value: string|null, readonly: boolean|number, setByServer: boolean|number,
modified: DateTime
}>,
firmware: { status: string|null, statusAt: DateTime|null, version: string|null, bootAt: DateTime|null },
counts: { localUsers: integer, sessions: integer, tariffAssignments: integer, profileAssignments: integer }
}
Projekcija popisa dodaje ograničena metrička polja i vraća metricsWindow; projekcija pojedinosti upotrebljava prethodni oblik. Vrijednosti konfiguracije za osjetljive ključeve točno su "[REDACTED]".
PublicReadiness = {
ready: boolean,
missingRequirements: Array<"site_coordinates"|"connector_tariffs"|"billing_plan"|"stripe_connect"|"legacy_payment_data">,
commercialGateEnabled: boolean, siteCoordinatesDefined: boolean,
allConnectorsHaveTariffs: boolean, connectorsMissingTariffs: integer[],
connectorCount: integer, paymentDataDefined: boolean,
billingAccountId: PositiveInt|null, planCode: string|null,
billingPlanEligible: boolean, stripeConnectReady: boolean,
stripeConnectState: "active"|"action_required"|"pending"|"not_configured",
connectorIds: integer[], missingTariffConnectorIds: integer[]
}
RedactedOcppLog = {
ocppServerLogId: PositiveInt, timestamp: DateTime, logLevelId: PositiveInt,
logAction: string|null, logDirection: string|null, logMessage: string|null,
messageId: string|null, transactionLogId: PositiveInt|null,
logLevel: { name:string }|null
}
CompositeSchedule = {
id: PositiveInt, chargepointId: PositiveInt, connectorId: integer,
evseId: PositiveInt|null, scheduleStart: DateTime, duration: integer,
minChargingRate: number|null, chargingRateUnitId: PositiveInt,
chargingRateUnit: string|null, chargingRateUnitDescription: string|null,
periods: Array<{ id:PositiveInt, startPeriod:number, limit:number, numberPhases:integer|null, phaseToUse:integer|null }>
}
Uspješan odgovor na izmjenu priključka vraća točno { portId, connectorId, ocpiConnectorFormatEnumId, ocpiConnectorTypeEnumId, ocpiPowerTypeEnumId, maxVoltage, maxAmperage, maxElectricPower }.
connectorLookups sadrži ove oblike referentnih podataka: formati upotrebljavaju { ocpiConnectorFormatEnumId, name, description }; tipovi upotrebljavaju { ocpiConnectorTypeEnumId, name, description, icon }; vrste napajanja upotrebljavaju { ocpiPowerTypeEnumId, name, shortDescr, description, numPhases }.
Primjeri stvaranja i ažuriranja priključka:
{"name":"Warehouse 1","identifier":"cp-warehouse-1","password":"initial-secret","siteId":3}
{
"connectorFormatId": 1,
"connectorTypeId": 2,
"powerTypeId": 1,
"maxVoltage": 400,
"maxAmperage": 32,
"maxElectricPower": 22000
}
Objekti odgovora na naredbe sadrže status: string. Okidanje dodatno sadrži connectorResults: { connectorId: number, status: string }[]; objedinjeni raspored dodatno sadrži connectorId i compositeSchedule (ili null). Vrijednosti statusa pohranjeni su rezultati OCPP-a ili daljnjih operacija te ih ruta ne ograničava na zatvoren skup enumeracijskih vrijednosti.
Tipovi izvještaja
ReportSession = {
id: PositiveInt,
charger: { id: PositiveInt, name: string, site: { id: PositiveInt, name: string }|null },
portId: PositiveInt, connectorId: integer,
user: { id: PositiveInt, name: string }|null,
active: boolean, energyWh: number,
startedAt: DateTime, stoppedAt: DateTime|null,
durationSeconds: integer|null, costs: Cost[]
}
ReportSchedule = {
id: PositiveInt, workspaceId: PositiveInt, enabled: boolean,
recipientEmail: string, format: "csv"|"pdf", sendDay: integer,
sendTime: string, createdAt: DateTime, updatedAt: DateTime,
lastDeliveryPeriod: string|null, lastDeliveryStatus: string|null,
lastDeliveryAttemptAt: DateTime|null, lastDeliveryAttemptCount: integer,
lastDeliveredPeriod: string|null, lastDeliveredAt: DateTime|null
}
ReportDataResponse = {
items: ReportSession[],
pageTotals: { sessions:integer, energyWh:number, durationSeconds:integer, costs:Cost[] },
page: { limit:integer, nextCursor:string|null },
range: { from:DateTime, to:DateTime, toExclusive:true }
}
MeasurementPoint = { meterValueId:PositiveInt, timestamp:DateTime, elapsedSeconds:integer, value:number }
Measurement = {
name:string,
unit:{ symbol:string|null, description:string|null },
lines:Array<{ phase:string, points:MeasurementPoint[] }>
}
MeasurementsResponse = {
transactionLogId:PositiveInt, measurements:Measurement[],
page:{ limit:integer, nextCursor:string|null, sampleValuesTruncated:boolean, sampleLimitPerMeterValue:64 }
}
Primjer zahtjeva i odgovora rasporeda:
{"enabled":true,"recipientEmail":"reports@example.com","format":"csv","sendDay":5,"sendTime":"08:30"}
{
"schedule": {
"id": 4,
"workspaceId": 7,
"enabled": true,
"recipientEmail": "reports@example.com",
"format": "csv",
"sendDay": 5,
"sendTime": "08:30",
"createdAt": "2026-08-01T10:00:00.000Z",
"updatedAt": "2026-08-24T12:30:00.000Z",
"lastDeliveryPeriod": null,
"lastDeliveryStatus": null,
"lastDeliveryAttemptAt": null,
"lastDeliveryAttemptCount": 0,
"lastDeliveredPeriod": null,
"lastDeliveredAt": null
}
}
Tipovi tarifa
TariffComponent = {
id: PositiveInt,
type: NamedLookup, season: NamedLookup,
validFromMonth: number|null, validToMonth: number|null,
validFromWeekDay: number|null, validToWeekDay: number|null,
validFromHour: number|null, validToHour: number|null,
priority: number, price: number
}
Tariff = {
id: PositiveInt, cpoId: PositiveInt, name: string,
type: NamedLookup,
site: { id: PositiveInt, name: string, timezone: string|null }|null,
currency: { id: PositiveInt, code: string, sign: string },
biddingZone: { id: PositiveInt, code: string, name: string }|null,
tax: number, fallbackPrice: number|null, price: number|null,
components: TariffComponent[], assignmentCount: integer
}
TariffAssignment = {
id: PositiveInt, chargerId: PositiveInt, connectorId: integer,
tariff: { id: PositiveInt, name: string, currency: { code: string, sign: string } },
createdAt: DateTime, updatedAt: DateTime
}
MarketPrice = {
id: PositiveInt, value: number, currencyId: PositiveInt,
startsAt: integer, endsAt: integer,
startsAtIso: DateTime, endsAtIso: DateTime, intervalMinutes: number
}
TariffLookups = {
currencies:Array<{id:PositiveInt,code:string,sign:string,fractionalUnit:string,enabled:boolean,minimalValue:integer}>,
biddingZones:Array<{id:PositiveInt,code:string,name:string,currencyId:PositiveInt,enabled:boolean}>,
currencyRates:Array<{currencyId:PositiveInt,rate:number,updatedAt:DateTime}>,
componentTypes:NamedLookup[], seasons:NamedLookup[], tariffTypes:NamedLookup[]
}
Primjeri tarife i komponenti:
{"name":"Public AC","currencyCode":"EUR","biddingZoneId":1,"tax":21}
{
"components": [
{"typeId":1,"seasonId":1,"priority":0,"price":0.25,"validFromHour":0,"validToHour":24}
]
}
Tipovi profila punjenja
SchedulePeriod = { id: PositiveInt, startPeriod: number, limit: number, numberOfPhases: integer|null }
ChargingProfile = {
id: PositiveInt, cpoId: PositiveInt, label: string, description: string|null,
stackLevel: number, location: NamedLookup, purpose: NamedLookup,
kind: NamedLookup, recurrency: NamedLookup|null,
validFrom: DateTime|null, validTo: DateTime|null,
startSchedule: DateTime|null, durationSeconds: number|null,
rateUnit: NamedLookup, minChargingRate: number|null,
schedule: SchedulePeriod[], assignmentCount: integer,
createdAt: DateTime, updatedAt: DateTime
}
ProfileAssignment = {
id: PositiveInt, chargerId: PositiveInt, connectorId: integer,
synced: boolean, syncCode: integer,
syncStatus: "accepted"|"rejected"|"unknown",
profile: { id: PositiveInt, label: string, stackLevel: number, purpose: string, kind: string|null },
createdAt: DateTime, updatedAt: DateTime
}
ChargingProfileLookups = {
locations:NamedLookup[], purposes:NamedLookup[], kinds:NamedLookup[],
recurrencyKinds:NamedLookup[],
rateUnits:Array<{id:PositiveInt,name:string,supported:boolean}>,
allowedRateUnits:string[]
}
Primjeri stvaranja i rasporeda:
{
"label":"Depot cap","locationId":3,"stackLevel":1,"purposeId":1,"kindId":1,
"recurrencyKindId":null,"validFrom":null,"validTo":null,"startSchedule":null,
"rateUnitId":1,"minChargingRate":6,
"schedule":[{"startPeriod":0,"limit":32,"numberOfPhases":3}]
}
{"rateUnitId":1,"periods":[{"startPeriod":0,"limit":16,"numberOfPhases":3}]}
Tipovi korisnika
RFID = { id: PositiveInt, maskedUid: string, name: string|null, type: string, valid: boolean }
AccessItem = { id: PositiveInt, chargerId: PositiveInt, chargerName: string, expiresAt: DateTime|null, site: SiteRef|null }
Access = { allChargers: boolean, chargerIds: PositiveInt[], items: AccessItem[] }
Limit = { id: PositiveInt, limitTypeId: PositiveInt, label: string, energyValue: integer, timeValue: integer }
User = {
id: PositiveInt, membershipId: PositiveInt, name: string, email: string,
rfids: RFID[], access: AccessItem[], limitCount: integer
}
UserDetail = User & {
phone: string|null, createdAt: DateTime|null, limits: Limit[]
}
Vehicle = {
id: PositiveInt, name: string|null, provider: string|null, status: string|null,
vin: string|null, identifier: string|null, model: string|null,
batteryCapacityWh: number|null, createdAt: DateTime,
telemetry: { soc: number|null, chargeLimitSoc: number|null, recordedAt: DateTime|null }|null
}
LocalUser = {
id: PositiveInt, customerId: PositiveInt, name: string, email: string,
expiresAt: DateTime|null, systemManaged: boolean
}
LocalUserMutation = {
chargepointLocalUserId: PositiveInt,
customerId: PositiveInt,
expiryDate: DateTime|null,
customer: {} // `contractId` is removed by the workspace-admin response boundary
}
LocalUserUpdate = { id:PositiveInt, customerId:PositiveInt, expiresAt:DateTime|null }
Invitation = {
email:string, name:string, chargerIds:PositiveInt[], rfids:string[]
}
UserListResponse = {
items:User[], invitations:Invitation[], chargers:Array<{id:PositiveInt,name:string,identifier:string|null,site:SiteRef|null}>,
page:{ nextCursor:number|string|null, memberNextCursor:number|null, invitationNextCursor:string|null, limit:integer }
}
UserSession = {
id:PositiveInt, chargerId:PositiveInt, chargerName:string|null,
connectorId:PositiveInt, site:SiteRef|null, energyWh:number,
startedAt:DateTime|null, stoppedAt:DateTime|null
}
Odgovor na operaciju POST /chargers/:chargerId/local-users i rezultat za postojećeg korisnika operacije POST /chargers/:chargerId/local-users/invitations vraćaju LocalUserMutation; PATCH /chargers/:chargerId/local-users/:localUserId vraća LocalUserUpdate. Krajnja točka popisa upotrebljava LocalUser. Klijenti ih trebaju smatrati namjerno različitim tipovima odgovora.
Primjeri korisnika/pozivnica/RFID-a/pristupa:
{"email":"driver@example.com","name":"Example Driver"}
{
"email":"new.driver@example.com",
"name":"New Driver",
"rfid":"04AABBCCDD",
"allChargers":false,
"chargerIds":[11,12]
}
{"uid":"04AABBCCDD","name":"Blue card"}
{"allChargers":false,"chargerIds":[11,12]}
Uspješni upisi nikada ne vraćaju sirovi RFID UID. Primjerice:
{"rfid":{"id":31,"maskedUid":"******CCDD","name":"Blue card","type":"RFID","valid":true}}
Prazna i binarna tijela uspješnih odgovora
204znači da nema tijela odgovora.- Uspješan odgovor za QR kod punjača sadrži PNG bajtove, a ne JSON.
- Uspješan izvoz izvještaja vraća CSV ili PDF bajtove, a ne JSON.
- Pogledajte Ugovor odgovora i pogrešaka za JSON tijela koja se vraćaju kada bilo koja binarna krajnja točka ne uspije.
Preostali primjeri tijela zahtjeva za izmjenu podataka
Putanje u ovoj tablici s isključivo primjerima relativne su u odnosu na /v2/admin; potpune putanje navedene su u Referentnom pregledu krajnjih točaka. Dulji prethodni primjeri obuhvaćaju radni prostor, lokaciju, upravljanje snagom, stvaranje punjača/postavke priključka, rasporede izvještaja, tarife/komponente, profile punjenja/rasporede, korisnike/pozivnice, RFID i zamjenu pristupa. Svaka druga operacija izmjene s tijelom upotrebljava jedan od ovih točnih primjera oblika:
| Krajnja točka | Primjer JSON tijela |
|---|---|
PATCH /chargers/:chargerId | {"name":"Warehouse east","siteId":4,"invertedRfid":false,"smartMode":1,"automationDisabled":false}; prihvaća se bilo koji neprazan podskup |
PATCH /chargers/:chargerId/credentials | {"password":"replacement-secret"} |
PATCH /chargers/:chargerId/public-listing | {"isPublic":true} |
PATCH /chargers/:chargerId/configuration | {"key":"HeartbeatInterval","value":"60"} |
POST /chargers/:chargerId/firmware | {"url":"https://firmware.example.com/charger-v2.bin"} |
POST /chargers/:chargerId/commands/reset | {"resetType":"Soft"} |
POST /chargers/:chargerId/commands/availability | {"availabilityType":"Operative"} |
POST /chargers/:chargerId/commands/trigger | {"messageType":"StatusNotification"} |
POST /chargers/:chargerId/commands/unlock | {"connectorId":1} |
POST /chargers/:chargerId/commands/composite-schedule | {"connectorId":0,"durationSeconds":86400,"chargingRateUnit":"W"} |
POST /chargers/:chargerId/tariff-assignments | {"tariffId":17,"connectorId":0} |
PATCH /chargers/:chargerId/tariff-assignments/:assignmentId | {"tariffId":17,"connectorId":1} |
POST ili PATCH /chargers/:chargerId/profile-assignments[...] | {"profileId":8,"connectorId":1} |
PATCH /users/:userId | {"name":"Updated Driver"} |
POST /users/invitations/resend ili DELETE /users/invitations | {"email":"new.driver@example.com"} |
PATCH /users/:userId/rfids/:rfidId | {"name":"Replacement label"}; null briše oznaku |
POST /users/:userId/limits | {"limitTypeId":1,"energyValue":20000,"timeValue":0} |
PATCH /users/:userId/limits/:limitId | {"energyValue":25000} |
POST /chargers/:chargerId/local-users | {"customerId":42,"expiresAt":"2026-12-31T23:59:59Z"} |
POST /chargers/:chargerId/local-users/invitations ili njegov pandan DELETE | {"email":"driver@example.com"} |
PATCH /chargers/:chargerId/local-users/:localUserId | {"expiresAt":null} |
Sve ostale operacije koje mijenjaju podatke nemaju tijelo zahtjeva. I dalje zahtijevaju točno jedno zaglavlje Idempotency-Key.
Dodatni primjeri uspješnih odgovora
Prazni popisi su valjani i čine omotnice na najvišoj razini jednoznačnima:
{"items":[],"metricsWindow":{"from":"2026-05-26T00:00:00.000Z","to":"2026-08-24T00:00:00.000Z","sessionLimit":10000,"sessionsIncluded":0,"totalsCapped":false},"connectorLookups":{"formats":[],"types":[],"powerTypes":[]}}
{"items":[],"pageTotals":{"sessions":0,"energyWh":0,"durationSeconds":0,"costs":[]},"page":{"limit":50,"nextCursor":null},"range":{"from":"2026-07-01T00:00:00.000Z","to":"2026-08-01T00:00:00.000Z","toExclusive":true}}
{"status":"Accepted"}
{"status":"Accepted","connectorResults":[{"connectorId":1,"status":"Accepted"}]}
{"sent":true,"format":"csv","rowCount":12,"range":{"from":"2026-07-01T00:00:00.000Z","to":"2026-08-01T00:00:00.000Z"}}
{"items":[],"invitations":[],"chargers":[],"page":{"nextCursor":null,"memberNextCursor":null,"invitationNextCursor":null,"limit":50}}
Za odgovore koji sadrže objekte zamijenite točno imenovani DTO iz prethodnih odjeljaka u omotnici navedenoj u Referentnom pregledu krajnjih točaka; primjerice, stvaranje tarife je { "tariff": Tariff }, stvaranje profila { "profile": ChargingProfile }, a stvaranje korisnika { "user": User }.