Register a station and return it

post/v1/tenants/{tenant_id}/stations
Requires an API key

Synchronous: the response is the station with its resource ID, connectors and default connection_url. Idempotency-Key replays return the same station; the journal guarantees one registration per key. A 503 outcome_unknown means the core did not answer: list stations by name or external_reference before retrying with a new key. Registration does not connect hardware; set credentials next.

Path parameters

  • tenant_idintegerRequired

Headers

  • idempotency-keystringRequired

Request body

  • namestringRequired
    Globally unique OCPP connection name; the charger connects at <connection_url>.
    Pattern ^[a-zA-Z0-9][a-zA-Z0-9_-]{2,59}$
  • location_idintegerRequired
    Greater than 0
  • connectorsinteger
    Default 1 · Minimum 1 · Maximum 8
  • external_referencestring | null
    Your stable identifier for this resource (for example a property or listing ID). Unique per tenant and resource type. Filter lists with ?external_reference=. No customer data or secrets.
    Pattern ^[A-Za-z0-9][A-Za-z0-9_.:/-]{0,127}$

Returns · 201

  • idintegerRequired
  • tenant_idintegerRequired
  • namestringRequired
  • onlinebooleanRequired
  • protocolstring | nullRequired
  • location_idinteger | nullRequired
  • vendorstring | nullRequired
  • modelstring | nullRequired
  • serialstring | null
  • last_seenstring | null
    Timestamp of the last OCPP message from this charger, if any.
  • connectorsarray of ConnectorRecordRequired
    Child attributes
    • idintegerRequired
    • numberinteger | nullRequired
    • evse_numberinteger | nullRequired
    • statusstring | nullRequired
    • tariff_idinteger | nullRequired
  • connection_urlstringRequired
    Default OCPP WebSocket URL for this station name. Custom OCPP domains publish their own template.
  • external_referencestring | null
  • displayStationDisplayRequired
    Child attributes
    • adapterstring | nullRequired
      Display adapter template that drives this charger's screen, or null when none applies.
    • reasonenumRequired
      One of assigned, matched, not_booted, no_adapter, assigned_unpublished, protocol_unsupported
    • qrbooleanRequired
      The adapter sends the payment QR to the charger's screen. The generic OCPP 2.x adapters cannot tell whether the charger has a screen, so keep a printed QR.
    • pricebooleanRequired
      The adapter also sends a price: the display's tariff_id, else the connector tariff.
    • clearbooleanRequired
      The adapter can take a QR off the screen. When false the QR can stay, even after a DELETE: until the charger reboots on RCD/Renova, until it is overwritten on Sinexcel (its configuration keys persist).
    • evsesarray of StationDisplayEvseRequired
      Configured displays and their delivery state; manage them under /evses/{evse_number}/display.
      Child attributes
      • evse_numberintegerRequired
      • stateenumRequired
        One of pending, applied, failed, unsupported
      • shownboolean | nullRequired
  • open_faultsarray of FaultRecord
    Faults still open, from the charger's status notifications; history at /faults.
    Child attributes
    • idstringRequired
      fault_id in station.fault_opened and station.fault_cleared events.
    • station_idintegerRequired
    • connector_idinteger | nullRequired
      Connector resource ID; null when the charger reported the fault for the whole station.
    • evse_numberinteger | nullRequired
    • openbooleanRequired
    • error_codestring | nullRequired
      OCPP 1.6 errorCode other than NoError; null for an OCPP 2.x Faulted status without one.
    • infostring | nullRequired
    • vendor_idstring | nullRequired
    • vendor_error_codestring | nullRequired
    • ocpp_statusstring | nullRequired
      The status the charger reported with the fault, as sent.
    • opened_atstringRequired
      The charger's timestamp of the notification that opened the fault, else when Ivora observed it.
    • cleared_atstring | nullRequired
POST /v1/tenants/{tenant_id}/stations
curl --fail-with-body -X POST "https://api.ivoracharge.com/v1/tenants/1042/stations" \
  -H "Authorization: Bearer $IVORA_API_KEY" \
  -H "Idempotency-Key: order-2026-09-30-0001" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "bay-01",
  "location_id": 7
}'
Response · 201
{
  "id": 1,
  "tenant_id": 1042,
  "name": "bay-01",
  "online": false,
  "protocol": "string",
  "location_id": 7,
  "vendor": "string",
  "model": "string",
  "serial": "string",
  "last_seen": "string",
  "connectors": [
    {
      "id": 1,
      "number": 1,
      "evse_number": 1,
      "status": "string",
      "tariff_id": 42
    }
  ],
  "connection_url": "https://app.example.com/return",
  "external_reference": "property:1001",
  "display": {
    "adapter": "string",
    "reason": "assigned",
    "qr": false,
    "price": false,
    "clear": false,
    "evses": [
      {
        "evse_number": 1,
        "state": "pending",
        "shown": false
      }
    ]
  },
  "open_faults": [
    {
      "id": "id_0123456789abcdef",
      "station_id": 1,
      "connector_id": 1,
      "evse_number": 1,
      "open": false,
      "error_code": "string",
      "info": "string",
      "vendor_id": "vendor_0123456789abcdef",
      "vendor_error_code": "string",
      "ocpp_status": "string",
      "opened_at": "2026-09-30T17:00:00Z",
      "cleared_at": "2026-09-30T17:00:00Z"
    }
  ]
}
Try it is not available here yetRequests from this page are off until the production API at https://api.ivoracharge.com is public. Use the code samples from your application server; Ivora grants production access. Keys are created in Developer tools.