Symptom index for integrators. Full multi-party contracts: Session Lifecycle — Failure scenarios.
Authentication
| Symptom | Hub response | Fix |
|---|---|---|
2000 + HTTP 401 on all Hub requests | OCPI 2000 | Re-check credentials; see Token Rotation |
HTTP 401 with status_code: 2000 | Suspended party | Contact your ChargeIndia account team |
| Auth works on some routes only | — | Send Authorization: Token {Base64(UTF-8(token))} per Authentication |
HTTP 401, from-header mismatch | OCPI 2000 | OCPI-from-* must match your authenticated party — Message routing headers |
Routing
| Symptom | Hub response | Likely cause | Fix |
|---|---|---|---|
| Empty location or tariff list | Empty data | No routing rules | Enable routing |
| Authorize blocked for a CPO | HTTP 200, allowed: NOT_ALLOWED | Not in routing matrix / unknown CPO | Enable routing — not "Not routed" |
| Command blocked for routing | HTTP 403, "Not routed" | No eMSP↔CPO rule | Enable routing |
| Command reaches wrong party | — | Wrong CPO {cc}/{pid} | Use owning CPO identifiers |
HTTP 400, to-header mismatch | "OCPI-to headers do not match resolved destination" | OCPI-to-* disagrees with location_id / path / cdr_token | Align headers with body ownership or omit OCPI-to-* for Open Routing |
Sessions and CDRs
| Symptom | Hub response | Likely cause | Fix |
|---|---|---|---|
| Session not received by eMSP | CPO got 1000; no forward | Missing/wrong cdr_token | CPO re-pushes with eMSP identity — Failure scenarios |
Session not delivered; cdr_token is Hub (CIH) | CPO got 1000; no (or mis-targeted) forward | cdr_token is Hub; COMPLIANT/expired grace or no matching START_SESSION for COMPATIBILITY rewrite | CPO re-PUT/PATCH with eMSP identity from START_SESSION token — Failure scenarios, Hub Receiver Identity (CPO) |
| CDR not received by eMSP | Same as session | Bad cdr_token or receiver URL | Fix CPO fields + eMSP receiver |
| Async delivery delayed | Silent to CPO | eMSP down / transient | Hub retries timeout/unavailable; idempotent receivers — Async Delivery |
Wrong party GET session | HTTP 404, "Not found" | Outside cdr_token / ownership scope | Ownership |
Commands
| Symptom | Hub response | Hub retry? | Fix |
|---|---|---|---|
| CPO timed out | HTTP 502, "CPO command forward timed out" | No | Check CPO; eMSP may re-issue |
| CPO unavailable / circuit | HTTP 502, "CPO command forward unavailable" | No | Connection Health; re-issue later |
| Command not routed | HTTP 403, "Not routed" | No | Enable routing |
| Unknown location / session | HTTP 404, "Location not found" | No | Fix IDs; ensure CPO published location/session |
Command REJECTED | data.result: REJECTED | No | Fix eligibility / EVSE state |
ACCEPTED but no session | Immediate ack only | No | Honor data.timeout; CPO must callback — Failure scenarios |
Callback 401 | OCPI 2000 | No | CPO must authenticate and own the command — CPO Commands |
| No async command result | Possible Hub 502 on callback | No | Keep eMSP response_url healthy; CPO may retry callback |
Async delivery and receivers
| Symptom | Likely cause | Fix |
|---|---|---|
| HTTP 400: invalid path party on eMSP receiver | Path must be owning CPO, not eMSP or Hub | Hub Receiver Identity (eMSP) |
| Catalog updates missing | publish: false or routing gap | Check publish flag + routing |
| Duplicate records after retry | Receiver not idempotent | Dedupe on resource IDs |
Rate limits
| Symptom | Hub response | Fix |
|---|---|---|
| Rate limited | status_code: 2901 or HTTP 429 | Exponential backoff — Rate Limits & Errors |
Connection health
| Symptom | Hub response | Hub retry? | Fix |
|---|---|---|---|
| Authorize timeout | HTTP 504, allowed: UNKNOWN, "CPO authorize timeout" | No | Poll HubClientInfo; eMSP may retry |
| Authorize unavailable | HTTP 502, allowed: UNKNOWN + status_message | No | Restore CPO / wait for circuit close |
| Partner missing from HubClientInfo | — | — | Finish Onboarding + routing |
What to send support
Include:
X-Request-IDandX-Correlation-ID- Timestamp (UTC), endpoint, HTTP method, party identity
- Request/response bodies with tokens redacted (include HTTP status +
status_message)
See Support & Security.