docs: refresh Overkiz End-User RESTful API mirror (2026.2.1) - #2223
docs: refresh Overkiz End-User RESTful API mirror (2026.2.1)#2223iMicknl wants to merge 1 commit into
Conversation
Re-saved from the upstream doc page. Local asset paths were flattened to match the existing docs/api/ layout. Covers upstream changes through version 2026.2.1: 495 -> 504 operations, a new Local Devices section replacing UPnP Control protocol, and a reshaped event envelope (timestamp -> eventTime, name -> type, new siteOID).
Verified against the live Somfy Europe API 🔍Probed a real Somfy account read-only (GETs, an event listener, non-mutating state refreshes). Gateway firmware The event-envelope rename is a doc artifact — no code change needed. The live stream still sends
Confirmed live: Unconfirmed: One genuine gap: |
Refreshes
docs/api/from a fresh save of the upstream Overkiz End-User RESTful API doc page. Local<link>/<script>paths were flattened (from./API Documentation - End-User RESTful API_files/) to match the existing layout.Only two files actually change:
docs/api/index.html— the doc content.docs/api/jquery-ui.min.js— not a version bump. Same jQuery UI 1.13.2 build; the previously committed copy contained a mojibake double-encoded U+FFFD (C3 AF C2 BD C2 BD) where the fresh save has a correct one (EF BF BD). 3 bytes smaller.jquery.min.jsandapiDocStyle.csswere byte-identical.apiDocDyn.jsdiffered only in trailing whitespace, which the repo's pre-commit hooks strip, so it nets to no change.Newest upstream version marker in the page is 2026.2.1 (previous mirror topped out at 2021.6). Operation count: 495 → 504.
Verified by serving
docs/api/locally: all five files return 200, the HTML parses, and the operation count is stable after the whitespace pre-commit hooks run.✅ Verified against the live Somfy Europe API
Probed with a real Somfy account (read-only: GETs, an event listener, and non-mutating state refreshes). Gateway firmware
2026.3.3-7, i.e. newer than this doc's 2026.2.1 marker — so the server is at or beyond the documented version, and anything the docs claim that the server doesn't do is a doc bug, not a not-yet-deployed feature.The event-envelope rename is a documentation artifact — no code change needed
The live event stream (
POST /events/{listenerId}/fetch) still uses the old field names:{"siteOID": "<redacted>", "setupOID": "<redacted>", "gatewayId": "<redacted>", "timestamp": 1786543241494, "name": "GatewaySynchronizationStartedEvent"}name→typetypename(5/5 events)timestamp→eventTimeeventTimetimestamp(5/5 events)siteOIDaddedpyoverkiz/models.pyEventis correct as-is. Thename/timestamp→type/eventTimerename in the doc's event samples is a generator artifact (the samples appear to be rendered through a Jacksontypediscriminator that the wire format doesn't use). Same for the knock-ontype→placeTyperename: liveGET /setup/placesstill returns"type": 200, notplaceType.This retires the blocking concern. No change to event parsing.
eventTimeis real — but on executions, not stream eventsThe rename is genuine for execution objects, where the previous mirror was the wrong one:
{"eventTime": 1786451177935, "executionType": "Immediate execution", "type": "Planning - TIME_TRIGGER", "state": "COMPLETED", ...}GET /history/executionsand/history/executions/daily/...returneventTimeandexecutionType, with notimestamp.HistoryExecutioninpyoverkiz/models.py:926already models both asevent_time/execution_type, so there's no gap here either.Confirmed real (live values)
siteOIDonGET /setupsiteOIDon eventsDeviceStateChangedEvent)updateDeferralEnabledon gatewayfalseroleNameonGET /enduser/setupsFullAccessEndUserTemplateGET /history/dataRetentionPolicy{"states": 60, "executions": 90}GET /setup/localDevices[](endpoint exists; account has none)GET /history/executions/daily/{y}/{m}/{d}{"limitReached": false, "executions": [...]}GET /config/{gatewayId}/upnpcontrol/sonos/checkActionGroupsNo such resourceNot confirmed either way
relatedDevices/technicalon executions — absent from this account's execution history. Plausibly only on technical or multi-device executions.category/localDeviceOID/localDeviceData/mapped— absent from all 12 devices, but the account has zero local devices, so there was nothing to populate them.zoneType— the account has no zones.commandLess/authenticationRestrictedCommands/partnerId/modelonGET /setup— not present here.The one genuine gap
siteOIDis live on bothGET /setupand most stream events, and is not modelled anywhere in the library (nosite_oidonSetuporEvent; unknown keys are silently dropped by the converter). That's the only field this refresh surfaces that we're actually missing.New: Local Devices
New section, replacing the removed UPnP Control protocol section. All at scope
enduser/*.GET /setup/localDevicesincludeMappedparam)POST /setup/localDevicesGET /setup/localDevices/{localDeviceOID}DELETE /setup/localDevices/{localDeviceOID}forcedto allow deleting a mapped device)PUT /setup/localDevices/{localDeviceOID}/label/{newLabel}PUT /setup/localDevices/{localDeviceOID}/localDeviceDataPUT /setup/localDevices/{localDeviceOID}/relocate/{placeOID}PUT /setup/devices/{deviceURL}/localDeviceData/{key}New events:
LocalDeviceCreatedEvent,LocalDeviceUpdatedEvent(label/place),LocalDeviceDeletedEvent,LocalDeviceDataUpdatedEvent.New: history endpoints
GET /history/dataRetentionPolicyGET /history/executions/daily/{year}/{month}/{day}New: device rename endpoint (+ deprecation)
PUT /setup/devices/{deviceURL}/label/{label}— update the name of a device, with anupdateDeviceNameparam ("If true, device name will also be updated").PUT /setup/devices/{deviceURL}/{label}— since version 2026.2.1. This is the only newly deprecated operation; the deprecated total goes 73 → 74.Removed
GET /config/{gatewayId}/upnpcontrol/sonos/checkActionGroupsPOST /config/{gatewayId}/upnpcontrol/sonos/topology/{deviceURL}Along with the whole UPnP Control protocol section (private tag
upnpcontrol-config) and its events:SonosGetTopologySuccessEvent,SonosGetTopologyFailedEvent,SonosTopologyChangedEvent.Net event count: 138 → 139.
New query parameters on existing operations
actionGroupCategorypersistent,nonPersistent,any(defaultany)executionCategorymanual,automation,any(defaultany)includeMappedGET /setup/localDevicesfalse)forcedDELETE /setup/localDevices/{localDeviceOID}updateDeviceNamePUT /setup/devices/{deviceURL}/label/{label}New response fields on existing operations
Fields absent from the previous mirror entirely:
siteOIDrelatedDevicestechnicallocalDeviceOID,localDeviceData,localDevices,mappedGET /setup,/setup/devices,/setup/devices/hidden,/setup/devices/{deviceURL}categorycommandLess,authenticationRestrictedCommandsGET /setup(device definitions)updateDeferralEnabledGET /setup,/setup/gateways,/setup/gateways/{gatewayId}partnerId,modelGET /setuproleNameGET /enduser/setups,POST /enduser/mainAccount,POST /enduser/secondaryAccounts,POST /enduser/setup,POST /setup/enduser,PUT /enduser/accountexecutionTypeis not new but its use widened substantially (11 → 47 occurrences), as didfeatures(1 → 7) andattributes(5 → 11).Other changes
Add one or more device commissioning code(s) on given protocol for a future pairing procedure).GET /setup/devices/{deviceURL}/states/{name}/history/exportnow documents a200response code.Access scope : Full enduser API access (enduser/*)→Access scope : enduser/*, andEnduser Open API (enduser/o)→enduser/o. Cosmetic; touches nearly every operation and accounts for most of the diff noise.Not changed
No library code was touched in this PR. Verified follow-ups, in priority order:
site_oidtoSetupandEvent— confirmed live, currently dropped.Confirm— done; event parsing needs no change.eventTime/type/siteOIDagainst a real event streamConsider—relatedDevices/executionTypeon execution modelsexecution_typealready modelled;relatedDevicesunobserved.