Log inTalk to us

Show a text message on a charger screen

post/v1/tenants/{tenant_id}/stations/{station_id}/evses/{evse_number}/display/messages
Requires an API key

Synchronous desired state: stores the message and returns at once with status pending; Ivora pushes it on the next sweep and never waits for the charger. On OCPP 2.0.1 and 2.1 it is a SetDisplayMessage (priority, state, window and plain UTF8 text). OCPP 1.6 has no display message: it goes only through the charger's display adapter template when that has text messages, otherwise status unsupported with a reason and nothing is sent. Text over the adapter's per-line limit is refused with 422 message_too_long, never truncated. Plain text only: links, markup and control characters are 422. At most 10 messages per EVSE that have not ended (past ends_at). Replays with the same Idempotency-Key return the original result. Needs stations:write.

Path parameters

  • tenant_idintegerRequired
  • station_idintegerRequired
  • evse_numberintegerRequired
    OCPP EVSE number on the station, as in connectors[].evse_number
    Greater than 0 · Maximum 99

Headers

  • idempotency-keystringRequired

Request body

  • textstringRequired
    Plain text of at most 200 characters; \n starts a new line. No links, web addresses, markup or control characters (422).
    1–200 characters
  • languagestring | null
    RFC 5646 tag, for example en or en-US. Omit when unknown.
    Up to 8 characters
  • formatstring
    Plain text is the only format.
    Default "plain"
  • starts_atstring | null
    When the message may start showing (ISO 8601 with an offset). Omit to start now.
  • ends_atstring | null
    When the charger stops showing it (after starts_at and in the future). Omit to show until deleted.
  • priorityenum
    urgent is shown in front of other messages (OCPP AlwaysFront); normal cycles with them (NormalCycle).
    One of normal, urgent · Default "normal"
  • stateenum
    Show only while the EVSE is idle or charging, or in any state.
    One of idle, charging, always · Default "always"

Returns · 201

  • idstringRequired
  • tenant_idintegerRequired
  • station_idintegerRequired
  • evse_numberintegerRequired
  • textstringRequired
  • languagestring | nullRequired
  • formatstringRequired
  • starts_atstring | nullRequired
  • ends_atstring | nullRequired
  • priorityenumRequired
    One of normal, urgent
  • stateenumRequired
    One of idle, charging, always
  • statusenumRequired
    pending: not yet sent (also while the charger is offline or has not connected). applied: the charging core accepted the push, which does not prove the screen shows it. failed: the push was refused or unconfirmed and is retried with backoff; last_error has the code. unsupported: no display adapter template carries text for this charger; reason says why and nothing is sent.
    One of pending, applied, failed, unsupported
  • last_errorstring | nullRequired
    Error code of the last failed or withheld push, for example dispatch_unconfirmed, message_too_long or no_text_adapter.
  • reasonstring | nullRequired
    Why the message is unsupported or failed, in words.
  • adapterstring | nullRequired
    What delivers it: ocpp2-display-message on OCPP 2.x, else the display adapter template with a text section, null when none applies.
  • ocpp_message_idintegerRequired
    The message id on OCPP 2.x chargers (SetDisplayMessage id). Never reused on the station and never one of the QR or price ids.
  • deletedbooleanRequired
  • last_attempt_atstring | nullRequired
  • applied_atstring | nullRequired
  • created_atstringRequired
  • updated_atstringRequired
POST /v1/tenants/{tenant_id}/stations/{station_id}/evses/{evse_number}/display/messages
curl --fail-with-body -X POST "https://api.ivoracharge.com/v1/tenants/1042/stations/1/evses/1/display/messages" \
  -H "Authorization: Bearer $IVORA_API_KEY" \
  -H "Idempotency-Key: order-2026-09-30-0001" \
  -H "Content-Type: application/json" \
  -d '{
  "text": "Out of order",
  "language": "en-US",
  "starts_at": "2026-10-23T08:00:00Z",
  "ends_at": "2026-10-24T00:00:00Z"
}'
Response · 201JSON
{
  "id": "id_0123456789abcdef",
  "tenant_id": 1042,
  "station_id": 1,
  "evse_number": 1,
  "text": "string",
  "language": "string",
  "format": "plain",
  "starts_at": "2026-09-30T17:00:00Z",
  "ends_at": "2026-09-30T17:00:00Z",
  "priority": "normal",
  "state": "idle",
  "status": "pending",
  "last_error": "string",
  "reason": "string",
  "adapter": "string",
  "ocpp_message_id": 1,
  "deleted": false,
  "last_attempt_at": "2026-09-30T17:00:00Z",
  "applied_at": "2026-09-30T17:00:00Z",
  "created_at": "2026-09-30T17:00:00Z",
  "updated_at": "2026-09-30T17:00:00Z"
}
Requires an approved production API keyProduction access starts with a request, a short meeting with Ivora and a card on file, after which Ivora staff grant your account access. How to request access
Try itproduction · api.ivoracharge.com

Paste a production api key (iv_live_…). Create keys in Developer tools. The key stays in this page's memory, is sent only to https://api.ivoracharge.com and clears when you reload. Test keys are refused.

POST is a write: you confirm the method, path and project before it is sent, with a generated Idempotency-Key.