Odgovori in napake

Pogodba odgovorov in napak Admin API

Ta datoteka dopolnjuje pogodbo odgovorov za vsako končno točko v Referenci končnih točk. Za uspešno telo preberite vrstico končne točke, za vsa skupna ali posebna neuspešna telesa pa spodnje tabele. Napake privzeto uporabljajo več združljivostnih oblik; klicatelji lahko izberejo eno univerzalno ovojnico.

Neobvezna strukturirana ovojnica napak

Kateri koli končni točki pošljite to glavo zahteve:

X-Error-Format: envelope

Primerjava vrednosti odstrani robne presledke in ne razlikuje velikosti črk. Pri tej natančni vrednosti se vsak odgovor JSON s stanjem 400 ali višjim pretvori v:

ErrorEnvelope = {
  error: {
    code: string,
    message: string,
    details: Record<string, unknown>,
    requestId: string
  }
}

Primer pretvorbe privzetega telesa preverjanja:

{
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "Invalid request",
    "details": {
      "fields": {
        "name": ["String must contain at least 1 character(s)"]
      }
    },
    "requestId": "integration-42"
  }
}

Pravila pretvorbe so natančna:

  • validationErrors postane details.fields in code postane VALIDATION_FAILED, tudi če je privzeto telo imelo domensko kodo.
  • Privzeti code na najvišji ravni se ohrani, kadar ni polj za preverjanje veljavnosti.
  • Druge lastnosti najvišje ravni razen error, message, validationErrors in code se premaknejo v details; na primer limit izvoza poročila postane details.limit.
  • Niz error na najvišji ravni postane message. Če ga ni, se uporabi nadomestna vrednost za stanje.
  • Nadomestne kode so AUTH_REQUIRED (401), PERMISSION_DENIED (403), RESOURCE_NOT_FOUND (404), CONFLICT (409), VALIDATION_FAILED (422 in drugi nerazvrščeni 4xx), RATE_LIMITED (429), EXTERNAL_PROVIDER_FAILED (502) in INTERNAL_ERROR (drugi 5xx, vključno z 503).
  • requestId je natančna glava odgovora X-Request-Id. ID zahteve, ki ga poda klicatelj, se uporabi samo, če po obrezovanju ustreza [A-Za-z0-9._:-]{1,128}; sicer strežnik ustvari UUID.

Ta pretvorba ne spreminja stanja ali glav, nepovezanih s telesom. Velja tudi za idempotentne ponovitve glede na glavo X-Error-Format ponovljene zahteve. Binarni uspešni odgovori ostanejo binarni; njihove napake JSON dobijo ovojnico. Preostale tabele prikazujejo privzeta telesa; zgornja pravila dajo drugo možno telo odgovora za vsako vrstico.

Oznake odgovorov

ValidationError = {
  validationErrors: Record<string, string[]>,
  code?: string
}

CodedError = {
  error: string,
  code: string,
  // a route may add fields explicitly listed below
}

PlainError = { error: string }

error in besedilo sporočila preverjanja sta opisna, ne stabilna programska razlikovalnika. Razvejite po code, kadar je prisoten. Preverjanje zahteve vrne 422 ValidationError; preverjanje celotnega objekta lahko vrne { "validationErrors": {} }, kadar posamezno polje ni določeno. Neveljaven JSON in nepričakovane napake vrnejo spodaj prikazani globalni 500 PlainError.

Vsi primeri JSON prikazujejo natančne oblike teles. Besedilo <message> je vrnjeno sporočilo preverjanja ali operacije in je niz JSON, ne dobesedna vrednost v kotnih oklepajih.

Vrstni red obdelave zahtev

Zahteve se obdelajo v tem vrstnem redu:

  1. konfiguracija in overjanje žetona delovnega prostora;
  2. pravilnik gostitelja in omejitve zahtev žetona/delovnega prostora;
  3. filtriranje trenutnih pravic;
  4. za vsako spremembo preverjanje/rezervacija idempotentnosti;
  5. preverjanje obsegov končne točke, preverjanje zahteve in zahtevana operacija.

Zato mora tudi sprememba z veljavnim žetonom s preozkim obsegom poslati Idempotency-Key. Dokončan odgovor spremembe 403, 404, 409 ali 422 je mogoče ponoviti z istim ključem/zahtevo.

Odgovori za overjanje, pravilnike in omejevanje zahtev

Ti odgovori se lahko pojavijo pri vsaki registrirani končni točki /v2/admin pred obdelavo, značilno zanjo.

StanjeKdajNatančno teloUstrezne glave
401Manjkajoči, podvojeni, z vejico združeni, ne-Bearer, napačno oblikovani, neznani, potekli, preklicani ali drugače neveljavni žeton delovnega prostora{ "error": "Unauthorized", "code": "INVALID_WORKSPACE_TOKEN" }WWW-Authenticate: Bearer, Cache-Control: no-store
404Žeton je veljaven, vendar gostitelj njegovega delovnega prostora nima adminApiEnabled{ "error": "Not Found" }Cache-Control: no-store
429Kvota zahtev žetona ali delovnega prostora je izčrpana{ "error": "Too many attempts. Please try again later." }Retry-After: <seconds>
503Overjanje z žetonom delovnega prostora začasno ni na voljo{ "error": "Admin API workspace-token configuration is unavailable", "code": "WORKSPACE_API_CONFIG_UNAVAILABLE" }—
503Iskanje pravilnika gostitelja ali preverjanje trenutnih pravic ni uspelo{ "error": "Workspace authorization is temporarily unavailable", "code": "WORKSPACE_AUTHORIZATION_UNAVAILABLE" }—

Dostop API je vključen v vsak paket. Izklop nastavitve adminApiEnabled gostitelja delovnega prostora vrne 404; izguba dodatne pravice do funkcije odstrani samo prizadete obsege. Nastala zavrnitev obsega uporabi spodnji odgovor in ne postopka osveževanja žetona.

Obseg, idempotentnost, razčlenjevanje, lastništvo in nepričakovane napake

Velja zaStanjeNatančno teloGlave/opombe
Vsaka pot po overjanju403{ "error": "Insufficient workspace-token scope", "code": "INSUFFICIENT_SCOPE" }Vrne se, če manjka kateri koli zahtevani obseg.
Vsaka sprememba400{ "error": "Idempotency-Key is required for this operation", "code": "IDEMPOTENCY_KEY_REQUIRED" }Ključ ni podan.
Vsaka sprememba400{ "error": "Exactly one Idempotency-Key is required", "code": "INVALID_IDEMPOTENCY_KEY" }Podvojena glava ali vrednosti, združene z vejico.
Vsaka sprememba400{ "error": "Idempotency-Key must contain 1 to 255 visible characters", "code": "INVALID_IDEMPOTENCY_KEY" }Prazno, predolgo ali vsebuje nadzorni znak.
Vsaka sprememba409{ "error": "Idempotency-Key was already used with a different request", "code": "IDEMPOTENCY_CONFLICT" }Isti žeton/metoda/pot/ključ, drug URL ali telo.
Vsaka sprememba409{ "error": "Request is already processing", "code": "IDEMPOTENT_REQUEST_PROCESSING" }Retry-After: 5.
Vsaka sprememba409{ "error": "Previous request outcome is unknown; verify its effects before attempting the operation again", "code": "IDEMPOTENCY_OUTCOME_UNKNOWN" }Prejšnji najem obdelave je potekel, povezava se je zaprla ali se je zahteva končala z 5xx.
Vsaka sprememba503{ "error": "Idempotency storage unavailable", "code": "IDEMPOTENCY_UNAVAILABLE" }API ne more preveriti ali shraniti zapisa idempotentnosti.
Katera koli končna točka z neveljavno shemo poizvedbe/telesa/poti422{ "validationErrors": { "<field>": ["<message>"] } }Prisotnih je lahko več polj/sporočil. Klicatelji ne morejo podati cpoId; delovni prostor vedno izhaja iz žetona.
Kateri koli manjkajoči gnezdeni vir ali ID drugega delovnega prostora404{ "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" }Dosledno uporabljeno, razen če spodnja tabela navaja drugače.
Katera koli končna točka z nepričakovano napako500{ "error": "Something went wrong" }Pri spremembah poznejši ponovni poskus z istim ključem vrne 409 IDEMPOTENCY_OUTCOME_UNKNOWN.

ID-ji poti virov morajo biti pozitivna števila. Nepozitivni ali neštevilčni :siteId, :chargerId, :portId, :tariffId, :profileId, :assignmentId, :userId, :rfidId, :accessId, :limitId ali :localUserId vrne 422 ValidationError, ne 400.

Napake lokacij in upravljanja moči

Končne točkeStanjeNatančno telo
Ustvarjanje/posodobitev lokacije; preverjanje polj delovnega prostora422{ "validationErrors": { "<field>": ["<message>"] } }
DELETE /v2/admin/sites/:siteId, kadar ima lokacija odvisnosti409{ "error": "<message>", "code": "SITE_NOT_EMPTY" }
GET /v2/admin/sites/geocode neveljavno normalizirano iskanje400{ "error": "<message>", "code": "INVALID_GEOCODE_QUERY" }
Enako, omejena čakalna vrsta ponudnika je polna429{ "error": "<message>", "code": "GEOCODING_BUSY" }; vključuje Retry-After, kadar ga poda geokoder
Enako, časovna omejitev/napaka ponudnika ali nepričakovana napaka geokoderja502{ "error": "<message>", "code": "GEOCODING_UNAVAILABLE" }; nepričakovana napaka uporablja Address search is temporarily unavailable
PUT /v2/admin/sites/:siteId/power-management neveljavna topologija/domenska konfiguracija422{ "error": "<message>", "code": "INVALID_POWER_MANAGEMENT_CONFIGURATION" }
Enako, zavrnitev OCPP/časovna omejitev, sočasna sprememba ali spor uskladitve409{ "error": "<message>", "code": "POWER_MANAGEMENT_CONFLICT" }

Napake polnilnic

mapChargerErrors() se uporablja za ustvarjanje/posodobitev polnilnice, poverilnice, nastavitve priključkov, javno objavo, razreševanje vsebine QR, spremembo/ponovno nalaganje konfiguracije, začetek vdelane programske opreme, vse štiri osnovne ukaze in zahtevo sestavljenega urnika.

Končne točkeStanjeNatančno telo
Katera koli zgornja operacija z domensko napako preverjanja422{ "validationErrors": { "<field>": ["<message>"] } }
Katera koli zgornja operacija s sporom stanja, enoličnosti, povezave/OCPP, obračunavanja, Tagless, priključka ali pripravljenosti409{ "error": "<message>", "code": "CHARGER_CONFLICT" }
GET /chargers/:chargerId/sessions, neveljavno privzeto/izrecno časovno obdobje422{ "validationErrors": { "from": ["from must be before or equal to to"] } } ali { "validationErrors": { "from": ["Session range cannot exceed 90 days"] } }

Običajne bralne operacije vračajo samo skupne odgovore 401/403/404/429/500/503 in preverjanje poizvedbe/poti 422. Izbris polnilnice lahko vrne skupni 500 PlainError, če ne uspe brez natančnejšega odgovora napake.

Napake poročil

Končne točkeStanjeNatančno telo
Obdobje podatkov/izvoza, kjer from >= to422{ "validationErrors": { "range": ["from must be earlier than to"] } }
Obdobje podatkov/izvoza nad 90 dni422{ "validationErrors": { "range": ["Report ranges cannot exceed 90 days"] } }
Neveljaven neprosojni kazalec podatkov/meritev422{ "validationErrors": { "cursor": ["<message>"] } }
GET /reports/export, rezultat presega 2.000 vrstic422{ "error": "<message>", "code": "REPORT_EXPORT_ROW_LIMIT", "limit": 2000 }
POST /reports/send, brez shranjenega urnika409{ "error": "A workspace report schedule must be saved before sending", "code": "REPORT_SCHEDULE_REQUIRED" }
Enako, poštna storitev zavrne/ne uspe502{ "error": "Report delivery failed", "code": "REPORT_DELIVERY_FAILED" }
Vir urnika/meritev v lasti manjka404skupno telo RESOURCE_NOT_FOUND

Uspešen izvoz je binaren; vse napake izvoza ostanejo JSON.

Napake tarif

Končne točkeStanjeNatančno telo
Domensko preverjanje ustvarjanja/posodobitve/komponent/tržnih cen/dodelitve422{ "validationErrors": { "<field>": ["<message>"] } }
Spor stanja/odvisnosti/enoličnosti pri izbrisu ali dodelitvi tarife409{ "error": "<message>", "code": "TARIFF_CONFLICT" }
Tarifa, trgovalno območje, polnilnica, priključek, dodelitev tarife ali drug gnezdeni vir ne pripada lastniku404skupno telo RESOURCE_NOT_FOUND

Napake profilov polnjenja

Končne točkeStanjeNatančno telo
Domensko preverjanje ustvarjanja/posodobitve/urnika/dodelitve422{ "validationErrors": { "<field>": ["<message>"] } }
Na profil se sklicuje zaščitena uporaba409{ "error": "<message>", "code": "CHARGING_PROFILE_IN_USE" }
Spor sinhronizacije OCPP, dodelitve, sočasnosti ali drugega profila409{ "error": "<message>", "code": "CHARGING_PROFILE_CONFLICT" }
Profil, polnilnica, priključek, dodelitev ali drug gnezdeni vir ne pripada lastniku404skupno telo RESOURCE_NOT_FOUND

Napake uporabniške domene

Napake preverjanja uporabnikov, ki določajo polje, uporabljajo ValidationError in code; druge uporabniške napake uporabljajo CodedError. Vsi primeri manjkajočih virov uporabljajo skupni nerazkrivajoči odgovor RESOURCE_NOT_FOUND.

StanjeKodeTelo
400INVALID_USER_CURSOR{ "validationErrors": { "cursor": ["The user-list cursor is invalid for the selected status"] }, "code": "INVALID_USER_CURSOR" }
409USER_ALREADY_EXISTS, CUSTOMER_CONTRACT_MISSING, INVITATION_EMAIL_IN_USE, RFID_ALREADY_EXISTS, ACCESS_ALREADY_EXISTS, ACCESS_ALL_ALREADY_EXISTS, LIMIT_ALREADY_EXISTS, LOCAL_USER_ALREADY_EXISTS, PROTECTED_WORKSPACE_USER, TAGLESS_USER_PROTECTED, USER_RELATED_DATA{ "error": "<message>", "code": "<listed code>" }
422INVALID_EMAIL, INVALID_RFID, INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE{ "validationErrors": { "<field>": ["<message>"] }, "code": "<listed code>" }
422NO_CHARGERS_AVAILABLE{ "error": "No chargers are available", "code": "NO_CHARGERS_AVAILABLE" }
429INVITATION_RESEND_THROTTLED{ "error": "Invitation resend is temporarily unavailable", "code": "INVITATION_RESEND_THROTTLED" }; vključuje Retry-After
503USER_CURSOR_UNAVAILABLE{ "error": "User pagination is temporarily unavailable", "code": "USER_CURSOR_UNAVAILABLE" }
404RESOURCE_NOT_FOUND{ "error": "Workspace resource not found", "code": "RESOURCE_NOT_FOUND" }

POST /users/invitations lahko po razčlenjevanju telesa vrne tudi skupni 403 INSUFFICIENT_SCOPE, če manjka users:access ali če je podan RFID in manjka users:rfid. Končne točke lokalnih uporabnikov navajajo vsak zahtevani obseg v Referenci končnih točk.

Kode uporabniških napak se uporabljajo tako:

Skupina končnih točkUporabniške domenske kode, različne od 404, poleg skupnih odgovorov
GET /usersINVALID_USER_CURSOR (400), USER_CURSOR_UNAVAILABLE (503)
POST /usersUSER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409)
PATCH /users/:userIdTAGLESS_USER_PROTECTED (409)
DELETE /users/:userIdTAGLESS_USER_PROTECTED, PROTECTED_WORKSPACE_USER, USER_RELATED_DATA (409)
Branje podrobnosti uporabnika, vozil, RFID/dostopa/omejitevbrez domenske kode, različne od 404
Ustvarjanje RFIDCUSTOMER_CONTRACT_MISSING, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_RFID (422)
Posodobitev/izbris RFIDTAGLESS_USER_PROTECTED (409)
Zamenjava dostopaTAGLESS_USER_PROTECTED (409); NO_CHARGERS_AVAILABLE (422)
Preklic dostopaTAGLESS_USER_PROTECTED (409)
Ustvarjanje/posodobitev omejitveTAGLESS_USER_PROTECTED, LIMIT_ALREADY_EXISTS (409); INVALID_LIMIT_TYPE, INVALID_LIMIT_VALUE (422)
Izbris omejitveTAGLESS_USER_PROTECTED (409)
Ustvarjanje povabila v delovni prostorCUSTOMER_CONTRACT_MISSING, INVITATION_EMAIL_IN_USE, RFID_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL/INVALID_RFID (422); INVITATION_RESEND_THROTTLED (429), kadar velja čakalni čas dostave
Ponovno pošiljanje povabila v delovni prostorINVALID_EMAIL (422), INVITATION_RESEND_THROTTLED (429)
Preklic povabila v delovni prostorINVALID_EMAIL (422)
Ustvarjanje lokalnega uporabnika polnilnice za obstoječo strankoLOCAL_USER_ALREADY_EXISTS, TAGLESS_USER_PROTECTED (409)
Povabilo lokalnega uporabnika polnilniceLOCAL_USER_ALREADY_EXISTS, INVITATION_EMAIL_IN_USE, TAGLESS_USER_PROTECTED (409); INVALID_EMAIL (422); INVITATION_RESEND_THROTTLED (429), kadar velja čakalni čas dostave
Preklic povabila lokalnega uporabnikaINVALID_EMAIL (422)
Posodobitev/izbris lokalnega uporabnikaTAGLESS_USER_PROTECTED (409)

Vsi izidi lastništva in manjkajočih virov v teh skupinah, tudi neregistriran e-poštni naslov pri POST /users, uporabljajo skupno telo 404 RESOURCE_NOT_FOUND.

Odgovori brez telesa in ponovljeni odgovori

Uspešen odgovor 204 nima telesa. To velja za vsak dokumentiran izbris, ki navaja 204 empty. Dokončano idempotentno ponavljanje nastavi Idempotency-Replayed: true in uporabi shranjeno stanje/telo; pri 204 odgovor HTTP ostane brez telesa. API nikoli ne vrne uspešnega objekta JSON za dokumentirano operacijo 204.