Skip to navigation

Errors and retries

What the SDKs throw, what they retry for you, and what they never resend.

Errors

A 4xx or 5xx response raises an error that carries the status code and the response body. Each status has its own class, so you can catch only what you expect.

import { OcpplabSDK, OcpplabSDKError, OcpplabSDKTypes } from "ocpplab";
try {
await client.evcharger.commands.getStatus({ command_id: "cmd-123" });
} catch (error) {
if (error instanceof OcpplabSDKTypes.NotFoundError) {
// Not delivered to the charger yet: poll again.
} else if (error instanceof OcpplabSDKError) {
console.error(error.statusCode, error.body);
} else {
throw error;
}
}
StatusTypeScript (OcpplabSDKTypes.*)Python (ocpplab.*)
400BadRequestErrorBadRequestError
401UnauthorizedErrorUnauthorizedError
403ForbiddenErrorForbiddenError
404NotFoundErrorNotFoundError
409ConflictErrorConflictError
412PreconditionFailedErrorPreconditionFailedError
422UnprocessableEntityErrorUnprocessableEntityError
429TooManyRequestsErrorTooManyRequestsError
500InternalServerErrorInternalServerError
502BadGatewayErrorBadGatewayError
503ServiceUnavailableErrorServiceUnavailableError
504GatewayTimeoutErrorGatewayTimeoutError

All of them extend OcpplabSDKError (TypeScript) or ApiError (Python). A request that runs out of time raises OcpplabSDKTimeoutError in TypeScript and httpx.TimeoutException in Python.

Retries

The SDKs retry a failed request up to 2 times, with exponential backoff, when the response is 408, 429 or 5xx. Change it per client (maxRetries) or per request (max_retries in Python’s request_options).

What is never resent

A POST that could act twice is sent once, even after a 503. If the response was lost, the first attempt may already have created the location or started the session, so a retry would do it again. This covers creates, commands and other actions.

Before you retry one of these yourself, check whether the first attempt went through:

  • For deployments, call evcharger.deploymentRuntimeOps.status.
  • For commands, list recent ones with evcharger.commands.listResults.

Operations that require an Idempotency-Key header, such as booking.locations.create, keep their retries: the API returns the first result for a repeated key.