Set the QR a charger screen shows
Synchronous desired state: returns immediately with delivery.state pending and never waits for the charger. Ivora pushes it on the next sweep, even while an earlier failed push is backing off, and again after reboots and price changes; applied means the charging core accepted the push. The price comes from tariff_id when you set it (a tariff in this tenant, usually the one your application bills with; 404 tariff_not_found otherwise), else from the EVSE's connector tariff; without either, adapters that always carry a price (RCD/Renova) show 0. The same body keeps its revision; any change is a new revision. unsupported means no adapter drives this charger's screen, so use a printed QR. Replays with the same Idempotency-Key return the original result.
Path parameters
- tenant_idintegerRequired
- station_idintegerRequired
- evse_numberintegerRequiredOCPP EVSE number on the station, as in connectors[].evse_numberGreater than 0 · Maximum 99
Headers
- idempotency-keystringRequired
Request body
- qrstringRequiredhttps URL the screen encodes as a QR, usually your checkout page for this EVSE. No customer data or secrets.1–500 characters
- show_pricebooleanAlso show the price where the adapter supports it: the tariff_id tariff when set, else the EVSE's connector tariff.Default
true - tariff_idinteger | nullA tariff in this tenant whose price the screen shows, usually the one your application bills with. Omit to use the EVSE's connector tariff.Greater than 0
- visibilityenumidle shows the QR only while the connector is payable, on adapters that can clear; always keeps it up.One of
idle,always· Default"idle"
Returns · 200
- idstringRequired<station_id>-<evse_number>
- tenant_idintegerRequired
- station_idintegerRequired
- evse_numberintegerRequired
- qrstringRequired
- show_pricebooleanRequired
- visibilityenumRequiredOne of
idle,always - tariff_idinteger | nullRequiredTariff the screen's price comes from; null uses the EVSE's connector tariff.
- revisionintegerRequiredIncrements whenever qr, show_price, visibility or tariff_id changes.
- adapterstring | nullRequiredDisplay adapter template that last resolved for this charger, for example builtin-rcd.
- clearbooleanRequiredThe adapter can take the QR off the screen.
- deletedbooleanRequired
- deliveryDisplayDeliveryRequired
Child attributes
- stateenumRequiredapplied: the charging core dispatched the latest push, which does not confirm what the screen shows (the generic OCPP 2.x adapters cannot tell whether a charger has a screen). unsupported: no adapter drives this charger's screen; use a printed QR.One of
pending,applied,failed,unsupported - shownboolean | nullRequiredWhether the last applied push sent the QR (false after a clear); null before the first push.
- revisioninteger | nullRequiredDesired revision the last successful push carried.
- applied_atstring | nullRequired
- last_attempt_atstring | nullRequired
- last_errorstring | nullRequiredError code of the last failed push, for example dispatch_unconfirmed or template_render_failed.
- updated_atstringRequired
curl --fail-with-body -X PUT "https://api.ivoracharge.com/v1/tenants/1042/stations/1/evses/1/display" \
-H "Authorization: Bearer $IVORA_API_KEY" \
-H "Idempotency-Key: order-2026-09-30-0001" \
-H "Content-Type: application/json" \
-d '{
"qr": "https://payment.ivoracharge.com/checkout/station-01-1",
"tariff_id": 42
}'{
"id": "id_0123456789abcdef",
"tenant_id": 1042,
"station_id": 1,
"evse_number": 1,
"qr": "string",
"show_price": false,
"visibility": "idle",
"tariff_id": 42,
"revision": 1,
"adapter": "string",
"clear": false,
"deleted": false,
"delivery": {
"state": "pending",
"shown": false,
"revision": 1,
"applied_at": "2026-09-30T17:00:00Z",
"last_attempt_at": "2026-09-30T17:00:00Z",
"last_error": "string"
},
"updated_at": "2026-09-30T17:00:00Z"
}https://api.ivoracharge.com is public. Use the code samples from your application server; Ivora grants production access. Keys are created in Developer tools.