Endpoints

Talbiet u risponsi tal-endpoints tal-API tal-Amministrazzjoni tal-Ispazju tax-Xogħol

Din hija r-referenza tat-talbiet/risponsi għal kull endpoint /v2/admin. L-awtentikazzjoni, l-idempotenza, il-limiti tar-rata, il-ħolqien tat-tokens u s-semantika tal-ambiti huma dokumentati f'API tal-Amministrazzjoni tal-Ispazju tax-Xogħol. Tipi u eżempji fil-livell tal-qasam li jistgħu jerġgħu jintużaw jinsabu f'Skemi u eżempji. Aqra kull ringiela tal-endpoint flimkien ma' Kuntratt tar-risponsi u l-iżbalji, li jelenka l-bodies kollha possibbli tar-risponsi mhux ta' suċċess kondiviżi u speċifiċi għall-endpoint.

Kuntratt komuni

Kull path jibda bl-origin implimentata app-api. L-ispazju tax-xogħol jiġi derivat esklussivament mit-token awtentikat; il-klijenti ma għandhomx jibagħtu cpoId. Il-valuri kollha dokumentati tal-path tar-riżorsi :...Id huma numri sħaħ deċimali pożittivi. Kull talba teħtieġ eżattament wieħed:

Authorization: Bearer <workspace-access-token>

Talbiet murija b'body JSON jeħtieġu Content-Type: application/json. Il-mutazzjonijiet kollha jeħtieġu Idempotency-Key (POST, PUT, PATCH u DELETE), inkluż POST /v2/admin/reports/send; sakemm ringiela ma tgħidx mod ieħor, it-tip ta' kontenut tas-suċċess huwa application/json, id-dati JSON huma strings RFC 3339 u n-numri huma numri JSON.

Kull talba tista' tinkludi X-Request-Id u X-Error-Format: envelope; ara Kuntratt tar-risponsi u l-iżbalji. Dawn il-headers ma jbiddlux l-iskemi tas-suċċess.

Notazzjoni użata hawn taħt:

  • none ifisser ebda body tat-talba. DELETE li jiddokumenta body JSON xorta jeħtieġ dik il-body.
  • ? jimmarka proprjetà jew parametru tal-query fakultattiv.
  • T | null ifisser li l-proprjetà hija preżenti u tista' tkun null.
  • 204 empty ifisser ebda body tar-rispons.
  • CursorPage<T> ifisser { items: T[], nextCursor: number|string|null }, ħlief fejn ir-ringiela ssemmi oġġett page jew pagination espliċitament.
  • Ir-riżorsi nested kollha li ma jinstabux, inklużi IDs minn spazji tax-xogħol oħra, jużaw 404 { "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" } sakemm funzjoni ma tiddokumentax kunflitt aktar speċifiku.

Skemi kondiviżi tat-talbiet

Inputs tal-ispazju tax-xogħol u tas-sit

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
}

Input tal-ġestjoni tal-qawwa

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
}

Inputs taċ-ċarġers

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]
}

Inputs tar-rapporti

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"
}

Il-firxiet tar-rapporti jridu jissodisfaw from < to u ma jistgħux jaqbżu 90 jum. Meta jitħallew barra, jintuża l-aħħar perjodu ta' 90 jum. userId u anonymous=true jeskludu lil xulxin. Esportazzjonijiet skedati jirkupraw minuta UTC mitlufa u jużaw tentattivi limitati (stennija ta' 5/10 minuti, lease ta' 30 minuta għal claim qadim, tliet tentattivi).

Inputs tat-tariffi

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 }

Inputs tal-profili tal-iċċarġjar

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 }

Inputs tal-utent

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 }

Mill-inqas wieħed minn energyValue jew timeValue irid ikun akbar minn żero meta jinħoloq limitu. Jitneħħew l-ispazji mit-truf tal-emails u jiġu kkonvertiti f'ittri żgħar. UIDs RFID jiġu aċċettati biss fil-kitbiet u huma moħbija fir-risponsi tal-qari.

Sommarju tad-DTOs tar-risponsi

It-tabelli tal-endpoints juru kull envelope tar-rispons fl-ogħla livell. Dawn huma d-DTOs prinċipali li jistgħu jerġgħu jintużaw f'dawk l-envelopes:

DTOOqsma
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; id-dettall iżid chargers normalizzat u l-istat tal-konnettur
GeocodeCandidateplaceId, displayName, latitude, longitude; kredenzjali tal-fornitur u metadata speċifika għall-fornitur qatt ma jiġu rritornati
MetricsWindowfrom, to, limiti/għadd tas-sessjonijiet u totalsCapped fejn applikabbli
Chargerid, name, identifier, cpoId, site, status normalizzat, isPublic, flags RFID/intelliġenti/awtomazzjoni, provisioned, connection, evses, connectors, createdAt, updatedAt; id-dettall iżid configuration b'data sensittiva moħbija, firmware u għadd
ConnectorportId, connectorId, IDs tal-lookup tal-konnettur, maxVoltage, maxAmperage, maxElectricPower
ReportSessionid, ċarġer/sit, IDs tal-port u l-konnettur, utent minimizzat, active, energyWh, bidu/tmiem/tul u spejjeż netti/taxxa/totali għal kull munita
ReportScheduleid, workspaceId, enabled, recipientEmail, format, sendDay/sendTime UTC, metadata tal-ħolqien/aġġornament u metadata sigura tal-aħħar twassil inkluż in-numru tat-tentattivi
Tariffid, cpoId, name, oġġetti tat-tip/sit/munita/żona tal-offerti, tax, fallbackPrice, price effettiv, components, assignmentCount
ChargingProfileid, cpoId, label, description, stackLevel, oġġetti tal-post/skop/tip/rikorrenza/unità tar-rata, validità, skeda, assignmentCount, timestamps
Userid, membershipId, name, email, rfids moħbi, access taċ-ċarġer, limitCount; id-dettall iżid phone, createdAt u limits. Kredenzjali tal-awtorizzazzjoni OCPP bħal contractId qatt ma jiġu rritornati.
RFIDid, maskedUid, name, type, valid; UID mhux moħbi qatt ma jiġi rritornat
AccessallChargers, chargerIds ordnat u items li fih metadata tal-permess/ċarġer/sit/skadenza
Limitid, limitTypeId, label, energyValue, timeValue
LocalUserDTO tal-lista: id, customerId, name, email, expiresAt, systemManaged. Il-mutazzjonijiet tal-utenti lokali jużaw l-istrutturi distinti LocalUserMutation/LocalUserUpdate f'Skemi u eżempji.

L-oġġetti lookup jiġu rritornati mir-rotot tal-lista/dettall biex min jagħmel is-sejħa jkun jista' jsib IDs validi. Qis oqsma ġodda mhux magħrufa bħala kompatibbli ma' verżjonijiet futuri u ddistingwi każijiet biss fuq oqsma stabbli u kodiċijiet tal-iżbalji dokumentati.

Endpoints tal-ispazju tax-xogħol

Metodu u pathAmbituTalbaRispons ta' suċċess
GET /v2/adminworkspaces:readBody: xejn200 { workspace: Workspace }
PATCH /v2/adminworkspaces:updateBody: WorkspacePatch200 { workspace: Workspace }
GET /v2/admin/dashboardworkspaces:read + reports:readBody/query: xejn200 { window, stats { chargerCount, onlineChargerCount, siteCount, userCount }, sessions: DashboardSession[], analytics }; is-sessjonijiet huma limitati għal 1,000 fuq 90 jum

Endpoints tas-siti u tal-ġestjoni tal-qawwa

Metodu u pathAmbituTalbaRispons ta' suċċess
GET /v2/admin/sitessites:readBody/query: xejn200 { items: Site[], metricsWindow: MetricsWindow, lookups { countries, timezones } }
GET /v2/admin/sites/geocodesites:readQuery: street fakultattiv (massimu 160), city, state, country (massimu 100 kull wieħed), countryCode (massimu 2); header Accept-Language fakultattiv; huma meħtieġa mill-inqas żewġ karattri tat-triq/belt/stat flimkien200 { results: GeocodeCandidate[] }; tfittxijiet identiċi li għaddejjin jingħaqdu u x-xogħol tal-fornitur juża kju sekwenzjali limitat flimkien ma' cache limitata fuq is-server; tfittxijiet invalidi jirritornaw 400 INVALID_GEOCODE_QUERY, saturazzjoni tal-kju tirritorna 429 GEOCODING_BUSY b'Retry-After, u ħsarat tal-fornitur jirritornaw 502 GEOCODING_UNAVAILABLE
POST /v2/admin/sitessites:createBody: SiteInput201 { site: Site }
GET /v2/admin/sites/:siteIdsites:read + reports:readBody/query: xejn200 { site: SiteDetail, recentSessions: SiteSession[], totals, metricsWindow }
PATCH /v2/admin/sites/:siteIdsites:updateBody: SiteInput komplut200 { site: Site }
DELETE /v2/admin/sites/:siteIdsites:deleteBody: xejn204 empty; sit mhux vojt jirritorna 409 SITE_NOT_EMPTY
GET /v2/admin/sites/:siteId/power-managementsites:power-managementBody/query: xejn200 { configuration: PowerConfiguration } li fih sit taħt is-sjieda, ċarġers/konnetturi, pools, sorsi tal-miters, assenjazzjonijiet u stat tal-kompatibbiltà
PUT /v2/admin/sites/:siteId/power-managementsites:power-managementBody: PowerConfigurationInput200 { configuration: PowerConfiguration }; rifjut OCPP, timeout jew bidla konkorrenti jirritornaw 409 POWER_MANAGEMENT_CONFLICT mingħajr ma japplikaw is-sostituzzjoni

Endpoints taċ-ċarġers

Metodu u pathAmbituTalbaRispons ta' suċċess
GET /v2/admin/chargerschargers:readBody/query: xejn200 { items: Charger[], metricsWindow: MetricsWindow, connectorLookups { formats, types, powerTypes } }
POST /v2/admin/chargerschargers:createBody: ChargerCreate; l-identifikatur jiġi kkonvertit f'ittri kbar201 { charger: Charger }; il-password qatt ma tiġi rritornata
GET /v2/admin/chargers/:chargerIdchargers:readBody/query: xejn200 { charger: ChargerDetail }
PATCH /v2/admin/chargers/:chargerIdchargers:updateBody: ChargerPatch200 { charger: ChargerDetail }
DELETE /v2/admin/chargers/:chargerIdchargers:deleteBody: xejn204 empty
PATCH /v2/admin/chargers/:chargerId/credentialschargers:credentialsBody: { password: string(0..40) }200 { success: true }
PATCH /v2/admin/chargers/:chargerId/connectors/:portIdchargers:connector-settingsBody: ConnectorPatch200 { connector: Connector }
PATCH /v2/admin/chargers/:chargerId/public-listingchargers:publicBody: { isPublic: boolean }200 { isPublic: boolean }; prontezza mhux sodisfatta tirritorna 409 CHARGER_CONFLICT
GET /v2/admin/chargers/:chargerId/public-readinesschargers:readBody/query: xejn200 { readiness: { ready, missingRequirements, connectorIds, missingTariffConnectorIds, ...commercialState } }
GET /v2/admin/chargers/:chargerId/logschargers:readQuery: 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:readQuery: 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:readQuery: connector?: integer[0,255]200 image/png binarju, 300 px, Content-Disposition: inline, Cache-Control: no-store
GET /v2/admin/chargers/:chargerId/composite-scheduleschargers:readQuery: cursor?, limit?=20 (1..50), connectorId?200 { items: CompositeSchedule[], nextCursor: number or null }
GET /v2/admin/chargers/:chargerId/configurationchargers:readBody/query: xejn200 { items: ChargerConfiguration[] }; valuri li jixbhu sigrieti huma [REDACTED]
PATCH /v2/admin/chargers/:chargerId/configurationchargers:configurationBody: { key: string(1..50), value: string(0..500) }200 { status: string } fejn l-istatus huwa r-riżultat taċ-ċarġer/OCPP
POST /v2/admin/chargers/:chargerId/configuration/reloadchargers:configurationBody: xejn200 { status: string }
GET /v2/admin/chargers/:chargerId/firmwarechargers:readBody/query: xejn200 { firmware: { status, notifiedAt, currentVersion, bootNotifiedAt } }
POST /v2/admin/chargers/:chargerId/firmwarechargers:firmwareBody: { url: HTTP-or-HTTPS URL, max 2048 characters }202 { status: string }
POST /v2/admin/chargers/:chargerId/commands/resetchargers:commandsBody: { resetType: "Soft" or "Hard" }200 { status: string }
POST /v2/admin/chargers/:chargerId/commands/availabilitychargers:commandsBody: { availabilityType: "Operative" or "Inoperative" }200 { status: string }
POST /v2/admin/chargers/:chargerId/commands/triggerchargers:commandsBody: { messageType: "BootNotification", "Heartbeat", "StatusNotification", or "MeterValues" }200 { status: string, connectorResults: { connectorId, status }[] }
POST /v2/admin/chargers/:chargerId/commands/unlockchargers:commandsBody: { connectorId: positive integer }200 { status: string }
POST /v2/admin/chargers/:chargerId/commands/composite-schedulechargers:commandsBody: { connectorId: nonnegative integer, durationSeconds?: integer[60,604800], chargingRateUnit?: "W" or "A" }200 { status: string, connectorId: number, compositeSchedule: CompositeSchedule or null }

Endpoints tar-rapporti

Metodu u pathAmbituTalbaRispons ta' suċċess
GET /v2/admin/reports/datareports:readQuery: ReportFilters, cursor? opak, limit?=50 (1..100)200 { items: ReportSession[], pageTotals, page { limit, nextCursor }, range { from, to, toExclusive: true } }
GET /v2/admin/reports/schedulereports:readBody/query: xejn200 { schedule: ReportSchedule or null }
PUT /v2/admin/reports/schedulereports:schedulesBody: ReportScheduleInput strett200 { schedule: ReportSchedule }
POST /v2/admin/reports/sendreports:sendBody: xejn; il-header Idempotency-Key huwa meħtieġ200 { sent: true, format: "csv" or "pdf", rowCount: number, range { from, to } }; ebda skeda salvata tirritorna 409 REPORT_SCHEDULE_REQUIRED
GET /v2/admin/reports/measurementsreports:readQuery: transactionLogId meħtieġ, cursor? opak, limit?=500 (1..1000)200 { transactionLogId, measurements: { name, unit, lines[] }[], page { limit, nextCursor, sampleValuesTruncated, sampleLimitPerMeterValue: 64 } }
GET /v2/admin/reports/exportreports:exportQuery: ReportFilters, format?="csv" or "pdf"200 binarju CSV/PDF b'isem tal-fajl mehmuż, Cache-Control: private, no-store, X-Content-Type-Options: nosniff; aktar minn 2,000 ringiela jirritornaw 422 REPORT_EXPORT_ROW_LIMIT

Endpoints tat-tariffi

Metodu u pathAmbituTalbaRispons ta' suċċess
GET /v2/admin/tariffstariffs:readBody/query: xejn200 { items: Tariff[], lookups { currencies, biddingZones, currencyRates, componentTypes, seasons, tariffTypes } }
POST /v2/admin/tariffstariffs:createBody: TariffInput201 { tariff: Tariff }
GET /v2/admin/tariffs/:tariffIdtariffs:readBody/query: xejn200 { tariff: Tariff, lookups }
PATCH /v2/admin/tariffs/:tariffIdtariffs:updateBody: TariffInput komplut200 { tariff: Tariff }
PUT /v2/admin/tariffs/:tariffId/componentstariffs:componentsBody: { components: TariffComponentInput[0..256] }200 { tariff: Tariff, components: TariffComponent[] }
DELETE /v2/admin/tariffs/:tariffIdtariffs:deleteBody: xejn204 empty; referenzi għal rekords tal-iċċarġjar jirritornaw 409 TARIFF_CONFLICT
GET /v2/admin/tariffs/:tariffId/market-pricestariffs:readQuery: startsAt timestamp Unix mhux negattiv meħtieġ200 { items: { id, value, currencyId, startsAt, endsAt, startsAtIso, endsAtIso, intervalMinutes }[], truncated: boolean }; massimu ta' 10,000 ringiela
GET /v2/admin/chargers/:chargerId/tariff-assignmentschargers:tariff-assignments + tariffs:readBody/query: xejn200 { items: TariffAssignment[], tariffs: Tariff[] }
POST /v2/admin/chargers/:chargerId/tariff-assignmentschargers:tariff-assignments + tariffs:assignBody: TariffAssignmentCreateInput; connectorId jew connectorId=0 mhux inkluż ifisser il-konnetturi kollha201 { assignments: TariffAssignment[] }
PATCH /v2/admin/chargers/:chargerId/tariff-assignments/:assignmentIdchargers:tariff-assignments + tariffs:assignBody: TariffAssignmentUpdateInput; il-konnettur huwa meħtieġ u ma jistax ikun 0200 { assignment: TariffAssignment }
DELETE /v2/admin/chargers/:chargerId/tariff-assignments/:assignmentIdchargers:tariff-assignments + tariffs:assignBody: xejn204 empty

TariffAssignment fih id, chargerId, connectorId, sommarju sigur tat-tariffa/munita, createdAt u updatedAt.

Endpoints tal-profili tal-iċċarġjar

Metodu u pathAmbituTalbaRispons ta' suċċess
GET /v2/admin/charging-profileschargingProfiles:readBody/query: xejn200 { items: ChargingProfile[], lookups { locations, purposes, kinds, recurrencyKinds, rateUnits, allowedRateUnits } }
POST /v2/admin/charging-profileschargingProfiles:createBody: ChargingProfileCreate201 { profile: ChargingProfile }
GET /v2/admin/charging-profiles/:profileIdchargingProfiles:readBody/query: xejn200 { profile: ChargingProfile, lookups, isEditBlocked: boolean, usage { simpleChargingSchedule, smartSchedule, chargePoolChargepoint, isUsed } }
PATCH /v2/admin/charging-profiles/:profileIdchargingProfiles:updateBody: ChargingProfileInput komplut200 { profile: ChargingProfile, ocppSync: OcppCommandResult[] }
PUT /v2/admin/charging-profiles/:profileId/schedulechargingProfiles:updateBody: ChargingScheduleInput200 { profile: ChargingProfile, schedule: SchedulePeriod[], ocppSync: OcppCommandResult[] }
DELETE /v2/admin/charging-profiles/:profileIdchargingProfiles:deleteBody: xejn204 empty biss wara li ċ-ċarġers assenjati kollha jaċċettaw it-tneħħija u l-istat jerġa' jiġi vvalidat; inkella 409 u l-profil jibqa'
GET /v2/admin/chargers/:chargerId/profile-assignmentschargers:profile-assignments + chargingProfiles:readBody/query: xejn200 { items: ProfileAssignment[], profiles: ChargingProfile[] }
POST /v2/admin/chargers/:chargerId/profile-assignmentschargers:profile-assignments + chargingProfiles:assignBody: ProfileAssignmentInput201 { assignment: ProfileAssignment, ocpp: OcppCommandResult }
PATCH /v2/admin/chargers/:chargerId/profile-assignments/:assignmentIdchargers:profile-assignments + chargingProfiles:assignBody: ProfileAssignmentInput200 { assignment: ProfileAssignment, ocpp: OcppCommandResult }
DELETE /v2/admin/chargers/:chargerId/profile-assignments/:assignmentIdchargers:profile-assignments + chargingProfiles:assignBody: xejn204 empty wara tneħħija sinkronizzata

ProfileAssignment fih l-ID tal-assenjazzjoni tiegħu, IDs taċ-ċarġer/konnettur u sommarju sigur tal-profil. L-oġġetti tar-riżultati OCPP juru informazzjoni stabbli tat-talba/status u qatt kredenzjali.

Endpoints tal-utenti, RFID, aċċess, limiti u utenti lokali

Metodu u pathAmbituTalbaRispons ta' suċċess
GET /v2/admin/usersusers:readQuery: cursor? skont l-istatus (members: numeriku pożittiv; invitations: i2.* opak awtentikat; all: kontinwazzjoni numerika ta' membru antik jew a2.* kompost opak awtentikat), limit?=50 (1..100), status?="all", "members", or "invitations"; header X-Admin-User-Search fakultattiv (massimu 100)200 { items: User[], invitations: Invitation[], chargers: ChargerSummary[], page { nextCursor, memberNextCursor, invitationNextCursor, limit } }; l-istediniet jiġu paġinati u jimtlew bl-istess espressjoni normalizzata tal-email sabiex ittri kbar/żgħar jew spazji antiki ma jaħbux ringieli; il-cursors huma marbuta mal-ispazju tax-xogħol u l-filtru tat-tfittxija, ma fihomx indirizz tal-email li jinqara u jridu jiġu rritornati mingħajr tibdil; cursors all javvanzaw il-flussi tal-membri u tal-istediniet indipendentement
POST /v2/admin/usersusers:createBody: UserCreate; il-klijent irid ikun diġà reġistrat201 { user: User }; email mhux magħrufa tirritorna l-body 404 RESOURCE_NOT_FOUND li ma tiżvelax ir-riżorsi u għandha tuża stediniet
POST /v2/admin/users/invitationsusers:invitations + users:access; flimkien ma' users:rfid jekk jiġi pprovdut rfidBody: InvitationInput200 or 201 { result }; ir-riżultat marbut huwa { kind:"attached", user, accessChanged, rfidChanged }; ir-riżultat pendenti huwa { kind:"invited", email, name, maskedRfid, chargerIds, createdCount, emailSent, emailRetryReady, alreadyInvited }
POST /v2/admin/users/invitations/resendusers:invitationsBody: { email: email }200 { result: { targetedChargers, emailSent, emailRetryReady } }; jiġi infurzat perjodu ta' stennija globali għar-riċevitur
DELETE /v2/admin/users/invitationsusers:invitationsBody: { email: email }204 empty
GET /v2/admin/users/:userIdusers:read + reports:readBody/query: xejn200 { user: UserDetail, sessions: UserSession[], totals { count, energyWh, durationSeconds }, window, limitTypes, chargers }; massimu ta' 200 sessjoni fuq 90 jum
PATCH /v2/admin/users/:userIdusers:updateBody: { name: string(1..255) }200 { user: User }
DELETE /v2/admin/users/:userIdusers:deleteBody: xejn204 empty
GET /v2/admin/users/:userId/vehiclesusers:readQuery: cursor? numeriku, limit?=50 (1..100)200 { items: Vehicle[], page { nextCursor, limit } }; id-DTO tal-vettura jinkludi oqsma siguri tal-fornitur/status/mudell/telemetrija
GET /v2/admin/users/:userId/rfidsusers:readBody/query: xejn200 { items: RFID[] }; l-UIDs huma moħbija
POST /v2/admin/users/:userId/rfidsusers:rfidBody: { uid: string(1..36), name?: string or null }201 { rfid: RFID }; UID mhux moħbi ma jiġix ripetut
PATCH /v2/admin/users/:userId/rfids/:rfidIdusers:rfidBody: { name: string or null }200 { rfid: RFID }
DELETE /v2/admin/users/:userId/rfids/:rfidIdusers:rfidBody: xejn204 empty
GET /v2/admin/users/:userId/accessusers:readBody/query: xejn200 { access: Access }
PUT /v2/admin/users/:userId/accessusers:accessBody: AccessInput200 { access: Access }
DELETE /v2/admin/users/:userId/access/:accessIdusers:accessBody: xejn204 empty
GET /v2/admin/users/:userId/limitsusers:readBody/query: xejn200 { items: Limit[] }
POST /v2/admin/users/:userId/limitsusers:limitsBody: LimitCreate201 { limit: Limit }
PATCH /v2/admin/users/:userId/limits/:limitIdusers:limitsBody: LimitPatch, mill-inqas proprjetà waħda200 { limit: Limit }
DELETE /v2/admin/users/:userId/limits/:limitIdusers:limitsBody: xejn204 empty
GET /v2/admin/chargers/:chargerId/local-userschargers:read + users:readBody/query: xejn200 { charger: ChargerSummary, items: LocalUser[], invitations: { email }[], availableMembers: [] }; l-API intenzjonalment tħalli barra d-direttorju wiesa' tal-membri disponibbli tal-portal
POST /v2/admin/chargers/:chargerId/local-userschargers:local-users + users:accessBody: { customerId: positive integer, expiresAt?: RFC3339 or null }201 { localUser: LocalUserMutation }
POST /v2/admin/chargers/:chargerId/local-users/invitationschargers:local-users + users:invitations + users:accessBody: { email: email }200 or 201 { result }; klijent eżistenti: { invited:false, localUser: LocalUserMutation }; stedina: { invited:true, alreadyInvited, emailSent, emailRetryReady }
DELETE /v2/admin/chargers/:chargerId/local-users/invitationschargers:local-users + users:invitationsBody: { email: email }204 empty
PATCH /v2/admin/chargers/:chargerId/local-users/:localUserIdchargers:local-users + users:accessBody: { expiresAt: RFC3339 or null }200 { localUser: LocalUserUpdate }
DELETE /v2/admin/chargers/:chargerId/local-users/:localUserIdchargers:local-users + users:accessBody: xejn204 empty

L-utent tas-sistema Tagless huwa protett minn dawn l-operazzjonijiet. Żbalji fl-email tal-istedina jirritornaw stat sigur tat-twassil mingħajr ma jikxfu dettalji SMTP; min jagħmel is-sejħa jista' jerġa' jipprova meta emailRetryReady jkun veru.

Risponsi binarji

Żewġ familji ta' endpoints ma jirritornawx JSON meta jirnexxu:

EndpointTip ta' kontenutHeaders importanti
QR taċ-ċarġerimage/pngCache-Control: no-store, Content-Disposition: inline, X-Content-Type-Options: nosniff
Esportazzjoni tar-rapporttext/csv; charset=utf-8 jew application/pdfCache-Control: private, no-store, Content-Disposition: attachment, X-Content-Type-Options: nosniff

L-iżbalji minn endpoints binarji xorta huma JSON.