Aedifion · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the aedifion HTTP API

7 actions 7 updates update extends openapi/aedifion-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Aedifion's API. It is a proposal applied on top of the contract, not a document Aedifion publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-notex-agentic-accesstitleversioncontactexternalDocsx-apievangelist-discoveryx-apievangelist-recommended-flow

Targets 6

$.info
$.servers
$.components.securitySchemes.openIDConnect
$.components.securitySchemes.basicAuth
$.paths['/v2/datapoint/setpoint'].post
$.paths['/v2/controls/app/{controls_app_id}/run'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the aedifion HTTP API
  version: 1.0.0
extends: openapi/aedifion-openapi.yml
x-generated: '2026-09-09'
x-method: generated
x-source: >-
  Derived from the live spec at https://api.aedifion.io/openapi.json plus aedifion's published
  documentation. This overlay records API Evangelist's enhancements without mutating the
  harvested original at openapi/_original/aedifion-openapi.json.
actions:
- target: $.info
  description: >-
    The published spec's info block is nearly empty - title is the generic "API Docs", version
    is an empty string, and there is no contact, licence or externalDocs. Fill it in.
  update:
    title: aedifion HTTP API
    version: '2'
    x-apievangelist-note: >-
      info.title in the published spec is "API Docs" and info.version is an empty string. A
      generated client would be named after the Swagger UI page rather than the product, and no
      client can pin a version.
    contact:
      name: aedifion GmbH
      url: https://www.aedifion.com/kontakt
      email: contact@aedifion.com
    externalDocs:
      description: aedifion developer documentation
      url: https://docs.aedifion.io/en/developers/http-api/
- target: $.servers
  description: >-
    THE SINGLE HIGHEST-VALUE FIX. The published spec declares servers as [{"url": ""}] - an
    empty string. The Swagger UI at api.aedifion.io/ui/ works because the browser resolves the
    empty URL relative to the page it is served from, but any client generated from the
    downloaded document has no host to call and every generated SDK is dead on arrival. The
    real hosts are documented at
    https://docs.aedifion.io/en/developers/http-api/ and are supplied here.
  update:
  - url: https://api.aedifion.io
    description: aedifion cloud platform
  - url: https://api.{realm}.aedifion.io
    description: Dedicated single-tenant instance
    variables:
      realm:
        default: aedifion
        description: The customer's dedicated realm name.
- target: $.components.securitySchemes.openIDConnect
  description: >-
    The spec models the Keycloak provider as an oauth2 scheme with only an implicit flow and
    only the `openid` scope. The realm's own discovery document advertises authorizationCode,
    clientCredentials and password grants, PKCE with S256, and 13 scopes. Implicit is
    discouraged by OAuth 2.1; authorizationCode + PKCE is what a client should use.
  update:
    x-apievangelist-discovery: https://auth.aedifion.io/realms/aedifion/.well-known/openid-configuration
    x-apievangelist-recommended-flow: authorizationCode with PKCE (S256)
    x-apievangelist-available-grants:
    - authorization_code
    - client_credentials
    - password
    - refresh_token
    x-apievangelist-note: >-
      Declared flows in the spec (implicit only) are a subset of what the identity provider
      actually supports. See scopes/aedifion-scopes.yml.
- target: $.components.securitySchemes.basicAuth
  description: Record the provider's own statement that this scheme is legacy.
  update:
    x-apievangelist-status: legacy
    x-apievangelist-note: >-
      aedifion's documentation states "The aedifion HTTP API supports Basic Auth for legacy
      reasons until further notice. HTTP Basic Auth may be deprecated in future." No Sunset
      date is published.
- target: $.paths['/v2/datapoint/setpoint'].post
  description: >-
    Flag the highest-consequence operation on the API with an agentic execution contract. This
    operation actuates physical building plant.
  update:
    x-agentic-access:
      action-class: acting
      consequence: physical
      audit: required
      human-in-the-loop: recommended
      token-ttl-seconds: 300
      dry-run:
        supported: true
        parameter: dryrun
      reversal:
        supported: true
        how: re-issue with value='null' to reset the point to local building automation control
        window: not stated
    x-apievangelist-note: >-
      aedifion describes this endpoint as "no-frills, non-acked, stateless, best-effort" and is
      explicit that a 200 means the request was authorized and well-formed, NOT that the
      building network applied the value. Callers must pass acked=true and redeem the returned
      reference at get_datapoint_setpoint to confirm.
- target: $.paths['/v2/controls/app/{controls_app_id}/run'].post
  description: Flag autonomous control deployment as a consequential action.
  update:
    x-agentic-access:
      action-class: acting
      consequence: physical
      audit: required
      human-in-the-loop: recommended
      token-ttl-seconds: 300
    x-apievangelist-note: This operation both starts and stops an autonomous control
      application that operates HVAC plant without further human input.
- target: $.info
  description: >-
    Record the cross-cutting semantics an integrator needs that the spec does not state - error
    format, rate-limit signalling and idempotency posture.
  update:
    x-apievangelist-conventions:
      error_format: custom-json (not RFC 9457); single Error schema across all 269 error
        responses
      idempotency: partial - no Idempotency-Key header; two set-membership operations
        documented as idempotent
      rate_limit_headers: none declared
      rate_limit_status_codes: [423, 429]
      pagination: page/per_page with a PaginationMeta envelope, on 20 of 208 operations
      conditional_requests: no ETag or If-Match support
      request_tracing: no request-id header
    x-apievangelist-artifacts:
      conventions: conventions/aedifion-conventions.yml
      errors: errors/aedifion-problem-types.yml
      authentication: authentication/aedifion-authentication.yml
      rate_limits: rate-limits/aedifion-rate-limits.yml
      data_model: data-model/aedifion-data-model.yml
      events: asyncapi/aedifion-event-surface.yml