Végpontok

Munkaterület-adminisztrációs API végpontkérései és válaszai

Ez minden /v2/admin végpont kérés-/válaszreferenciája. A hitelesítést, idempotenciát, sebességkorlátokat, tokenlétrehozást és a hatókörök jelentését a Munkaterület-adminisztrációs API dokumentálja. Az újrafelhasználható mezőszintű típusok és példák a Sémák és példák oldalon találhatók. Minden végpontsort a Válasz- és hibaszerződéssel együtt olvasson, amely az összes lehetséges közös és végpontspecifikus sikertelen választörzset felsorolja.

Közös szerződés

Minden elérési út a telepített app-api eredettel kezdődik. A munkaterület kizárólag a hitelesített tokenből származik; a kliensek nem küldhetnek cpoId értéket. Minden dokumentált :...Id erőforrásútvonal-érték pozitív decimális egész szám. Minden kéréshez pontosan egy szükséges:

Authorization: Bearer <workspace-access-token>

A JSON-törzzsel jelzett kérésekhez Content-Type: application/json szükséges. Minden módosításhoz Idempotency-Key (POST, PUT, PATCH és DELETE) kell, beleértve a(z) POST /v2/admin/reports/send műveletet is; ha a sor nem jelzi másként, a sikeres válasz tartalomtípusa application/json, a JSON-dátumok RFC 3339 karakterláncok, a számok pedig JSON-számok.

Minden kérés tartalmazhat X-Request-Id és X-Error-Format: envelope fejlécet; lásd a Válasz- és hibaszerződést. Ezek a fejlécek nem módosítják a sikersémákat.

Az alább használt jelölések:

  • A(z) none azt jelenti, hogy nincs kéréstörzs. A JSON-törzset dokumentáló DELETE továbbra is igényli azt a törzset.
  • A(z) ? opcionális tulajdonságot vagy lekérdezési paramétert jelöl.
  • A(z) T | null azt jelenti, hogy a tulajdonság jelen van, és null is lehet.
  • A(z) 204 empty azt jelenti, hogy nincs választörzs.
  • A(z) CursorPage<T> jelentése { items: T[], nextCursor: number|string|null }, kivéve ha a sor kifejezetten page vagy pagination objektumot nevez meg.
  • Minden hiányzó beágyazott erőforrás, beleértve a más munkaterülethez tartozó azonosítókat is, 404 { "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" } választ használ, kivéve ha egy funkció konkrétabb ütközést dokumentál.

Közös kéréssémák

Munkaterület- és helyszínbemenetek

WorkspacePatch = {
  name?: string(1..100), email?: email|null, website?: string|null,
  addressLine1?: string|null, addressLine2?: string|null,
  postalCode?: string|null, city?: string|null, state?: string|null,
  countryId?: positive integer
} // at least one property

SiteInput = {
  name: string(1..255), description?: string|null = null,
  addressLine1?: string|null = null, addressLine2?: string|null = null,
  postalCode?: string|null = null, city?: string|null = null, state?: string|null = null,
  countryId: positive integer, timezoneId: positive integer,
  latitude?: number[-90,90]|null = null, longitude?: number[-180,180]|null = null
}

Teljesítménykezelési bemenet

PowerConfigurationInput = { pools: PowerPoolInput[0..200] }
PowerPoolInput = {
  id?: positive integer|null, name?: string(0..255),
  limit: integer[0,100000000], meterSources?: ExternalMeterInput[0..16],
  children?: (PowerPoolInput | ChargerPoolChild)[0..1000]
}
ChargerPoolChild = { chargepointId: positive integer, priority?: integer[-1000000,1000000] }
ExternalMeterInput = {
  id?: positive integer|null, sourceId?: positive integer|null,
  provider?: "perific", name?: string(0..255), externalId: string(1..80),
  measurementMode?: "available_headroom"|"external_non_ev_load_only"|"total_site_load_including_ev",
  valueMode?: "perific_relative"|"perific_direct"|"perific_meter",
  reserveA?: integer[0,100000], offlineSafeA?: integer[0,100000],
  ttlSeconds?: integer[30,86400], enabled?: boolean
}

Töltőbemenetek

ChargerCreate = { name: string(1..40), identifier: string(1..40), password?: string(0..40) = "", siteId: positive integer }
ChargerPatch = {
  name?: string(1..40), siteId?: positive integer, invertedRfid?: boolean,
  smartMode?: integer[0,3], automationDisabled?: boolean
} // at least one
ConnectorPatch = {
  connectorFormatId: positive integer, connectorTypeId: positive integer,
  powerTypeId: positive integer, maxVoltage: integer[1,10000],
  maxAmperage: integer[1,10000], maxElectricPower: integer[1,100000000]
}

Jelentésbemenetek

ReportFilters = {
  from?: RFC3339, to?: RFC3339, siteId?: positive integer,
  chargerId?: positive integer, userId?: positive integer,
  anonymous?: true|false|1|0, active?: true|false|1|0
}
ReportScheduleInput = {
  enabled: boolean, recipientEmail: email(max 255; may be empty only when disabled), format: "csv"|"pdf",
  sendDay: integer[1,28], sendTime: UTC "HH:mm"
}

A jelentéstartományoknak meg kell felelniük a(z) from < to feltételnek, és legfeljebb 90 naposak lehetnek. Elhagyásukkor a legutóbbi 90 nap érvényesül. A(z) userId és anonymous=true kölcsönösen kizárja egymást. Az ütemezett exportok pótolják az elmulasztott UTC-percet, és korlátozott újrapróbálkozásokat használnak (5/10 perces várakozás, elavult foglaláshoz 30 perces időtartam, három kísérlet).

Tarifabemenetek

TariffInput = {
  name: string(1..64),
  exactly one of currencyId: positive integer, currencyCode: 3 letters, currency: 3 letters,
  biddingZoneId?: positive integer|null, tax?: finite number
}
TariffComponentInput = {
  typeId: positive integer, seasonId: positive integer, priority?: finite number,
  price: finite number, validFromMonth?: finite number, validToMonth?: finite number,
  validFromWeekDay?: finite number, validToWeekDay?: finite number,
  validFromHour?: finite number, validToHour?: finite number
}
TariffAssignmentCreateInput = { tariffId: positive integer, connectorId?: nonnegative integer }
TariffAssignmentUpdateInput = { tariffId: positive integer, connectorId: positive integer }

Töltésiprofil-bemenetek

ChargingProfileInput = {
  label: string(1..40), locationId: positive integer, stackLevel: nonnegative number,
  purposeId: positive integer, kindId: positive integer,
  recurrencyKindId?: positive integer|null, validFrom?: RFC3339|null,
  validTo?: RFC3339|null, startSchedule?: RFC3339|null,
  rateUnitId: positive integer, minChargingRate?: nonnegative number|null
}
ChargingProfileCreate = ChargingProfileInput & { schedule?: SchedulePeriod[0..256] }
SchedulePeriod = { startPeriod: nonnegative number, limit: nonnegative number, numberOfPhases?: positive integer|null }
ChargingScheduleInput = { rateUnitId: positive integer, periods: SchedulePeriod[1..256] }
ProfileAssignmentInput = { profileId: positive integer, connectorId?: nonnegative integer }

Felhasználói bemenetek

UserCreate = { email: email(max 255), name: string(1..255) }
InvitationInput = {
  email: email, name?: string|null, rfid?: string|null,
  allChargers?: boolean, chargerIds?: unique positive integer[0..500]
} // chargerIds must be non-empty unless allChargers=true
AccessInput = { allChargers?: boolean, chargerIds?: unique positive integer[0..500] }
LimitCreate = { limitTypeId: positive integer, energyValue?: nonnegative integer = 0, timeValue?: nonnegative integer = 0 }
LimitPatch = { limitTypeId?: positive integer, energyValue?: nonnegative integer, timeValue?: nonnegative integer }

Korlát létrehozásakor a(z) energyValue vagy timeValue érték közül legalább az egyiknek nullánál nagyobbnak kell lennie. Az e-mail-címek szélső szóközeit a rendszer eltávolítja, és kisbetűssé alakítja őket. Az RFID UID-k csak íráskor fogadhatók el, az olvasási válaszokban maszkoltak.

Válasz-DTO-k összefoglalója

A végponttáblázatok minden legfelső szintű válaszburkolót mutatnak. Ezek a burkolók fő újrafelhasználható DTO-i:

DTOMezők
Workspaceid, name, email, website, address { line1, line2, postalCode, city, state, countryId, countryCode, countryName }, createdAt, updatedAt
Siteid, name, description, address, timezone { id, name }, latitude, longitude, chargerCount; a részletekhez normalizált chargers és csatlakozóállapot adódik
GeocodeCandidateplaceId, displayName, latitude, longitude; a szolgáltatói hitelesítő adatok és szolgáltatóspecifikus metaadatok soha nem kerülnek visszaadásra
MetricsWindowfrom, to, töltési korlátok/darabszámok és adott esetben totalsCapped
Chargerid, name, identifier, cpoId, site, normalizált status, isPublic, RFID-/intelligens-/automatizálási jelzők, provisioned, connection, evses, connectors, createdAt, updatedAt; a részletekhez kitakart configuration, firmware és darabszámok adódnak
ConnectorportId, connectorId, csatlakozó-hivatkozási azonosítók, maxVoltage, maxAmperage, maxElectricPower
ReportSessionid, töltő/helyszín, port- és csatlakozóazonosítók, minimalizált felhasználó, active, energyWh, indítás/leállítás/időtartam és pénznemenkénti nettó/adó/teljes költség
ReportScheduleid, workspaceId, enabled, recipientEmail, format, UTC sendDay/sendTime, létrehozási/frissítési és biztonságos utolsókézbesítési metaadatok, beleértve a kísérletek számát
Tariffid, cpoId, name, típus-/helyszín-/pénznem-/ajánlattételizóna-objektumok, tax, fallbackPrice, tényleges price, components, assignmentCount
ChargingProfileid, cpoId, label, description, stackLevel, hely-/cél-/fajta-/ismétlődési-/rátaegység-objektumok, érvényesség, ütemezés, assignmentCount, időbélyegek
Userid, membershipId, name, email, maszkolt rfids, töltő access, limitCount; a részletekhez phone, createdAt és limits adódik. OCPP-hitelesítő adat, például contractId, soha nem kerül visszaadásra.
RFIDid, maskedUid, name, type, valid; a nyers UID soha nem kerül visszaadásra
AccessallChargers, rendezett chargerIds és jogosultság-/töltő-/helyszín-/lejárati metaadatokat tartalmazó items
Limitid, limitTypeId, label, energyValue, timeValue
LocalUserLista-DTO: id, customerId, name, email, expiresAt, systemManaged. A helyi felhasználók módosításai a Sémák és példák oldalon szereplő különálló LocalUserMutation/LocalUserUpdate szerkezeteket használják.

A lista-/részletútvonalak hivatkozási objektumokat adnak vissza, hogy a hívók megtalálhassák az érvényes azonosítókat. Az ismeretlen új mezőket kezelje jövőbeli verziókkal kompatibilisként, és csak dokumentált stabil mezők és hibakódok alapján ágaztassa el a programot.

Munkaterület-végpontok

Metódus és elérési útHatókörKérésSikeres válasz
GET /v2/adminworkspaces:readTörzs: nincs200 { workspace: Workspace }
PATCH /v2/adminworkspaces:updateTörzs: WorkspacePatch200 { workspace: Workspace }
GET /v2/admin/dashboardworkspaces:read + reports:readTörzs/lekérdezés: nincs200 { window, stats { chargerCount, onlineChargerCount, siteCount, userCount }, sessions: DashboardSession[], analytics }; legfeljebb 1 000 töltés 90 nap alatt

Helyszín- és teljesítménykezelési végpontok

Metódus és elérési útHatókörKérésSikeres válasz
GET /v2/admin/sitessites:readTörzs/lekérdezés: nincs200 { items: Site[], metricsWindow: MetricsWindow, lookups { countries, timezones } }
GET /v2/admin/sites/geocodesites:readLekérdezés: opcionális street (max. 160), city, state, country (egyenként max. 100), countryCode (max. 2); opcionális Accept-Language fejléc; legalább két utca-/város-/államkarakter szükséges összesen200 { results: GeocodeCandidate[] }; az azonos folyamatban lévő keresések összevonódnak, a szolgáltatói munka korlátozott soros várólistát és korlátozott szerveroldali gyorsítótárat használ; érvénytelen keresésnél 400 INVALID_GEOCODE_QUERY, telített várólistánál 429 GEOCODING_BUSY és Retry-After, szolgáltatói hibánál 502 GEOCODING_UNAVAILABLE a válasz
POST /v2/admin/sitessites:createTörzs: SiteInput201 { site: Site }
GET /v2/admin/sites/:siteIdsites:read + reports:readTörzs/lekérdezés: nincs200 { site: SiteDetail, recentSessions: SiteSession[], totals, metricsWindow }
PATCH /v2/admin/sites/:siteIdsites:updateTörzs: teljes SiteInput200 { site: Site }
DELETE /v2/admin/sites/:siteIdsites:deleteTörzs: nincs204 empty; a nem üres helyszín 409 SITE_NOT_EMPTY választ ad
GET /v2/admin/sites/:siteId/power-managementsites:power-managementTörzs/lekérdezés: nincs200 { configuration: PowerConfiguration }, amely a tulajdonban lévő helyszínt, töltőket/csatlakozókat, csoportokat, mérőforrásokat, hozzárendeléseket és kompatibilitási állapotot tartalmazza
PUT /v2/admin/sites/:siteId/power-managementsites:power-managementTörzs: PowerConfigurationInput200 { configuration: PowerConfiguration }; OCPP-elutasítás, időtúllépés vagy párhuzamos változás 409 POWER_MANAGEMENT_CONFLICT választ ad a csere alkalmazása nélkül

Töltővégpontok

Metódus és elérési útHatókörKérésSikeres válasz
GET /v2/admin/chargerschargers:readTörzs/lekérdezés: nincs200 { items: Charger[], metricsWindow: MetricsWindow, connectorLookups { formats, types, powerTypes } }
POST /v2/admin/chargerschargers:createTörzs: ChargerCreate; az azonosító nagybetűssé alakul201 { charger: Charger }; a jelszó soha nem kerül visszaadásra
GET /v2/admin/chargers/:chargerIdchargers:readTörzs/lekérdezés: nincs200 { charger: ChargerDetail }
PATCH /v2/admin/chargers/:chargerIdchargers:updateTörzs: ChargerPatch200 { charger: ChargerDetail }
DELETE /v2/admin/chargers/:chargerIdchargers:deleteTörzs: nincs204 empty
PATCH /v2/admin/chargers/:chargerId/credentialschargers:credentialsTörzs: { password: string(0..40) }200 { success: true }
PATCH /v2/admin/chargers/:chargerId/connectors/:portIdchargers:connector-settingsTörzs: ConnectorPatch200 { connector: Connector }
PATCH /v2/admin/chargers/:chargerId/public-listingchargers:publicTörzs: { isPublic: boolean }200 { isPublic: boolean }; hiányzó készenlét esetén 409 CHARGER_CONFLICT
GET /v2/admin/chargers/:chargerId/public-readinesschargers:readTörzs/lekérdezés: nincs200 { readiness: { ready, missingRequirements, connectorIds, missingTariffConnectorIds, ...commercialState } }
GET /v2/admin/chargers/:chargerId/logschargers:readLekérdezés: cursor?, limit?=50 (1..200), from?, to?, action?, direction?, levelId?200 { items: RedactedOcppLog[], nextCursor: number or null }
GET /v2/admin/chargers/:chargerId/sessionschargers:read + reports:readLekérdezés: page?=1, limit?=25 (1..100), from?, to?, customerId?: positive integer or "unknown"200 { items: ChargerSession[], pagination { page, limit, total, totalPages }, filters { customers }, totals, totalsCapped }
GET /v2/admin/chargers/:chargerId/qrchargers:readLekérdezés: connector?: integer[0,255]200 image/png bináris adat, 300 px, Content-Disposition: inline, Cache-Control: no-store
GET /v2/admin/chargers/:chargerId/composite-scheduleschargers:readLekérdezés: cursor?, limit?=20 (1..50), connectorId?200 { items: CompositeSchedule[], nextCursor: number or null }
GET /v2/admin/chargers/:chargerId/configurationchargers:readTörzs/lekérdezés: nincs200 { items: ChargerConfiguration[] }; a titokszerű értékek [REDACTED] alakúak
PATCH /v2/admin/chargers/:chargerId/configurationchargers:configurationTörzs: { key: string(1..50), value: string(0..500) }200 { status: string }, ahol az állapot a töltő/OCPP eredménye
POST /v2/admin/chargers/:chargerId/configuration/reloadchargers:configurationTörzs: nincs200 { status: string }
GET /v2/admin/chargers/:chargerId/firmwarechargers:readTörzs/lekérdezés: nincs200 { firmware: { status, notifiedAt, currentVersion, bootNotifiedAt } }
POST /v2/admin/chargers/:chargerId/firmwarechargers:firmwareTörzs: { url: HTTP-or-HTTPS URL, max 2048 characters }202 { status: string }
POST /v2/admin/chargers/:chargerId/commands/resetchargers:commandsTörzs: { resetType: "Soft" or "Hard" }200 { status: string }
POST /v2/admin/chargers/:chargerId/commands/availabilitychargers:commandsTörzs: { availabilityType: "Operative" or "Inoperative" }200 { status: string }
POST /v2/admin/chargers/:chargerId/commands/triggerchargers:commandsTörzs: { messageType: "BootNotification", "Heartbeat", "StatusNotification", or "MeterValues" }200 { status: string, connectorResults: { connectorId, status }[] }
POST /v2/admin/chargers/:chargerId/commands/unlockchargers:commandsTörzs: { connectorId: positive integer }200 { status: string }
POST /v2/admin/chargers/:chargerId/commands/composite-schedulechargers:commandsTörzs: { connectorId: nonnegative integer, durationSeconds?: integer[60,604800], chargingRateUnit?: "W" or "A" }200 { status: string, connectorId: number, compositeSchedule: CompositeSchedule or null }

Jelentésvégpontok

Metódus és elérési útHatókörKérésSikeres válasz
GET /v2/admin/reports/datareports:readLekérdezés: ReportFilters, átlátszatlan cursor?, limit?=50 (1..100)200 { items: ReportSession[], pageTotals, page { limit, nextCursor }, range { from, to, toExclusive: true } }
GET /v2/admin/reports/schedulereports:readTörzs/lekérdezés: nincs200 { schedule: ReportSchedule or null }
PUT /v2/admin/reports/schedulereports:schedulesTörzs: szigorú ReportScheduleInput200 { schedule: ReportSchedule }
POST /v2/admin/reports/sendreports:sendTörzs: nincs; a(z) Idempotency-Key fejléc kötelező200 { sent: true, format: "csv" or "pdf", rowCount: number, range { from, to } }; mentett ütemezés hiányában 409 REPORT_SCHEDULE_REQUIRED
GET /v2/admin/reports/measurementsreports:readLekérdezés: kötelező transactionLogId, átlátszatlan cursor?, limit?=500 (1..1000)200 { transactionLogId, measurements: { name, unit, lines[] }[], page { limit, nextCursor, sampleValuesTruncated, sampleLimitPerMeterValue: 64 } }
GET /v2/admin/reports/exportreports:exportLekérdezés: ReportFilters, format?="csv" or "pdf"200 CSV/PDF bináris adat csatolmányfájlnévvel, Cache-Control: private, no-store, X-Content-Type-Options: nosniff; több mint 2 000 sor esetén 422 REPORT_EXPORT_ROW_LIMIT

Tarifavégpontok

Metódus és elérési útHatókörKérésSikeres válasz
GET /v2/admin/tariffstariffs:readTörzs/lekérdezés: nincs200 { items: Tariff[], lookups { currencies, biddingZones, currencyRates, componentTypes, seasons, tariffTypes } }
POST /v2/admin/tariffstariffs:createTörzs: TariffInput201 { tariff: Tariff }
GET /v2/admin/tariffs/:tariffIdtariffs:readTörzs/lekérdezés: nincs200 { tariff: Tariff, lookups }
PATCH /v2/admin/tariffs/:tariffIdtariffs:updateTörzs: teljes TariffInput200 { tariff: Tariff }
PUT /v2/admin/tariffs/:tariffId/componentstariffs:componentsTörzs: { components: TariffComponentInput[0..256] }200 { tariff: Tariff, components: TariffComponent[] }
DELETE /v2/admin/tariffs/:tariffIdtariffs:deleteTörzs: nincs204 empty; töltésirekord-hivatkozások esetén 409 TARIFF_CONFLICT
GET /v2/admin/tariffs/:tariffId/market-pricestariffs:readLekérdezés: kötelező startsAt nemnegatív Unix-időbélyeg200 { items: { id, value, currencyId, startsAt, endsAt, startsAtIso, endsAtIso, intervalMinutes }[], truncated: boolean }; legfeljebb 10 000 sor
GET /v2/admin/chargers/:chargerId/tariff-assignmentschargers:tariff-assignments + tariffs:readTörzs/lekérdezés: nincs200 { items: TariffAssignment[], tariffs: Tariff[] }
POST /v2/admin/chargers/:chargerId/tariff-assignmentschargers:tariff-assignments + tariffs:assignTörzs: TariffAssignmentCreateInput; az elhagyott connectorId vagy connectorId=0 az összes csatlakozót jelenti201 { assignments: TariffAssignment[] }
PATCH /v2/admin/chargers/:chargerId/tariff-assignments/:assignmentIdchargers:tariff-assignments + tariffs:assignTörzs: TariffAssignmentUpdateInput; a csatlakozó kötelező, és nem lehet 0200 { assignment: TariffAssignment }
DELETE /v2/admin/chargers/:chargerId/tariff-assignments/:assignmentIdchargers:tariff-assignments + tariffs:assignTörzs: nincs204 empty

A(z) TariffAssignment tartalma: id, chargerId, connectorId, biztonságos tarifa-/pénznemösszefoglaló, createdAt és updatedAt.

Töltésiprofil-végpontok

Metódus és elérési útHatókörKérésSikeres válasz
GET /v2/admin/charging-profileschargingProfiles:readTörzs/lekérdezés: nincs200 { items: ChargingProfile[], lookups { locations, purposes, kinds, recurrencyKinds, rateUnits, allowedRateUnits } }
POST /v2/admin/charging-profileschargingProfiles:createTörzs: ChargingProfileCreate201 { profile: ChargingProfile }
GET /v2/admin/charging-profiles/:profileIdchargingProfiles:readTörzs/lekérdezés: nincs200 { profile: ChargingProfile, lookups, isEditBlocked: boolean, usage { simpleChargingSchedule, smartSchedule, chargePoolChargepoint, isUsed } }
PATCH /v2/admin/charging-profiles/:profileIdchargingProfiles:updateTörzs: teljes ChargingProfileInput200 { profile: ChargingProfile, ocppSync: OcppCommandResult[] }
PUT /v2/admin/charging-profiles/:profileId/schedulechargingProfiles:updateTörzs: ChargingScheduleInput200 { profile: ChargingProfile, schedule: SchedulePeriod[], ocppSync: OcppCommandResult[] }
DELETE /v2/admin/charging-profiles/:profileIdchargingProfiles:deleteTörzs: nincs204 empty csak akkor, ha minden hozzárendelt töltő elfogadta a törlést, és az állapot újraellenőrzése megtörtént; máskülönben 409, és a profil megmarad
GET /v2/admin/chargers/:chargerId/profile-assignmentschargers:profile-assignments + chargingProfiles:readTörzs/lekérdezés: nincs200 { items: ProfileAssignment[], profiles: ChargingProfile[] }
POST /v2/admin/chargers/:chargerId/profile-assignmentschargers:profile-assignments + chargingProfiles:assignTörzs: ProfileAssignmentInput201 { assignment: ProfileAssignment, ocpp: OcppCommandResult }
PATCH /v2/admin/chargers/:chargerId/profile-assignments/:assignmentIdchargers:profile-assignments + chargingProfiles:assignTörzs: ProfileAssignmentInput200 { assignment: ProfileAssignment, ocpp: OcppCommandResult }
DELETE /v2/admin/chargers/:chargerId/profile-assignments/:assignmentIdchargers:profile-assignments + chargingProfiles:assignTörzs: nincs204 empty szinkronizált törlés után

A(z) ProfileAssignment tartalmazza a hozzárendelés azonosítóját, a töltő/csatlakozó azonosítóit és a profil biztonságos összefoglalóját. Az OCPP-eredményobjektumok stabil kérés-/állapotadatokat mutatnak, hitelesítő adatokat soha.

Felhasználó-, RFID-, hozzáférés-, korlát- és helyifelhasználó-végpontok

Metódus és elérési útHatókörKérésSikeres válasz
GET /v2/admin/usersusers:readLekérdezés: állapotnak megfelelő cursor? (members: pozitív numerikus; invitations: hitelesített átlátszatlan i2.*; all: régi numerikus tagfolytatás vagy hitelesített átlátszatlan összetett a2.*), limit?=50 (1..100), status?="all", "members", or "invitations"; opcionális X-Admin-User-Search fejléc (max. 100)200 { items: User[], invitations: Invitation[], chargers: ChargerSummary[], page { nextCursor, memberNextCursor, invitationNextCursor, limit } }; a meghívások lapozása és adatfeltöltése ugyanazzal a normalizált e-mail-kifejezéssel történik, így régi kis-/nagybetűk vagy szóközök nem rejthetnek el sorokat; a kurzorok a munkaterülethez és keresési szűrőhöz kötöttek, nem tartalmaznak olvasható e-mail-címet, és változtatás nélkül kell visszaküldeni őket; a(z) all kurzorok a tag- és meghívásfolyamokat külön léptetik
POST /v2/admin/usersusers:createTörzs: UserCreate; az ügyfélnek már regisztráltnak kell lennie201 { user: User }; ismeretlen e-mail-cím felderítést megakadályozó 404 RESOURCE_NOT_FOUND törzset kap, és meghívást kell használnia
POST /v2/admin/users/invitationsusers:invitations + users:access; továbbá users:rfid, ha rfid megadvaTörzs: InvitationInput200 or 201 { result }; hozzákapcsolt eredmény: { kind:"attached", user, accessChanged, rfidChanged }; függő eredmény: { kind:"invited", email, name, maskedRfid, chargerIds, createdCount, emailSent, emailRetryReady, alreadyInvited }
POST /v2/admin/users/invitations/resendusers:invitationsTörzs: { email: email }200 { result: { targetedChargers, emailSent, emailRetryReady } }; a címzett összes kérésére vonatkozó várakozási idő érvényesül
DELETE /v2/admin/users/invitationsusers:invitationsTörzs: { email: email }204 empty
GET /v2/admin/users/:userIdusers:read + reports:readTörzs/lekérdezés: nincs200 { user: UserDetail, sessions: UserSession[], totals { count, energyWh, durationSeconds }, window, limitTypes, chargers }; legfeljebb 200 töltés 90 nap alatt
PATCH /v2/admin/users/:userIdusers:updateTörzs: { name: string(1..255) }200 { user: User }
DELETE /v2/admin/users/:userIdusers:deleteTörzs: nincs204 empty
GET /v2/admin/users/:userId/vehiclesusers:readLekérdezés: numerikus cursor?, limit?=50 (1..100)200 { items: Vehicle[], page { nextCursor, limit } }; a jármű-DTO biztonságos szolgáltató-/állapot-/modell-/telemetriamezőket tartalmaz
GET /v2/admin/users/:userId/rfidsusers:readTörzs/lekérdezés: nincs200 { items: RFID[] }; az UID-k maszkoltak
POST /v2/admin/users/:userId/rfidsusers:rfidTörzs: { uid: string(1..36), name?: string or null }201 { rfid: RFID }; a nyers UID nem jelenik meg a válaszban
PATCH /v2/admin/users/:userId/rfids/:rfidIdusers:rfidTörzs: { name: string or null }200 { rfid: RFID }
DELETE /v2/admin/users/:userId/rfids/:rfidIdusers:rfidTörzs: nincs204 empty
GET /v2/admin/users/:userId/accessusers:readTörzs/lekérdezés: nincs200 { access: Access }
PUT /v2/admin/users/:userId/accessusers:accessTörzs: AccessInput200 { access: Access }
DELETE /v2/admin/users/:userId/access/:accessIdusers:accessTörzs: nincs204 empty
GET /v2/admin/users/:userId/limitsusers:readTörzs/lekérdezés: nincs200 { items: Limit[] }
POST /v2/admin/users/:userId/limitsusers:limitsTörzs: LimitCreate201 { limit: Limit }
PATCH /v2/admin/users/:userId/limits/:limitIdusers:limitsTörzs: LimitPatch, legalább egy tulajdonság200 { limit: Limit }
DELETE /v2/admin/users/:userId/limits/:limitIdusers:limitsTörzs: nincs204 empty
GET /v2/admin/chargers/:chargerId/local-userschargers:read + users:readTörzs/lekérdezés: nincs200 { charger: ChargerSummary, items: LocalUser[], invitations: { email }[], availableMembers: [] }; az API szándékosan kihagyja a portál széles körű, elérhetőtag-jegyzékét
POST /v2/admin/chargers/:chargerId/local-userschargers:local-users + users:accessTörzs: { customerId: positive integer, expiresAt?: RFC3339 or null }201 { localUser: LocalUserMutation }
POST /v2/admin/chargers/:chargerId/local-users/invitationschargers:local-users + users:invitations + users:accessTörzs: { email: email }200 or 201 { result }; meglévő ügyfél: { invited:false, localUser: LocalUserMutation }; meghívás: { invited:true, alreadyInvited, emailSent, emailRetryReady }
DELETE /v2/admin/chargers/:chargerId/local-users/invitationschargers:local-users + users:invitationsTörzs: { email: email }204 empty
PATCH /v2/admin/chargers/:chargerId/local-users/:localUserIdchargers:local-users + users:accessTörzs: { expiresAt: RFC3339 or null }200 { localUser: LocalUserUpdate }
DELETE /v2/admin/chargers/:chargerId/local-users/:localUserIdchargers:local-users + users:accessTörzs: nincs204 empty

A Tagless-rendszerfelhasználó védett ezektől a műveletektől. A meghívó e-mail hibái biztonságos kézbesítési állapotot adnak vissza SMTP-részletek kiszivárogtatása nélkül; a hívók újrapróbálkozhatnak, ha a(z) emailRetryReady igaz.

Bináris válaszok

Két végpontcsalád siker esetén nem ad JSON-t:

VégpontTartalomtípusFontos fejlécek
Töltő QR-kódjaimage/pngCache-Control: no-store, Content-Disposition: inline, X-Content-Type-Options: nosniff
Jelentésexporttext/csv; charset=utf-8 vagy application/pdfCache-Control: private, no-store, Content-Disposition: attachment, X-Content-Type-Options: nosniff

A bináris végpontok hibái továbbra is JSON-formátumúak.