Clevergy · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Clevergy Connect API

11 actions 11 updates documentation extends openapi/clevergy-connect-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Clevergy's API. It is a proposal applied on top of the contract, not a document Clevergy publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-docsx-apievangelist-consequencex-human-in-the-loopx-unitx-idempotencyx-retry-hazardx-apievangelist-sourcex-apievangelist-source-status

Targets 10

$.info
$.securityDefinitions.key
$.paths['/auth/{userId}/token'].get
$.paths['/contracts/{contractId}/invoices'].post
$.paths['/equipments/{equipmentId}/storage/schedule'].post
$.paths['/users/{userId}/houses'].get
$.paths['/users'].get
$.paths['/users/{userId}/virtual-wallet'].post
$.paths['/users/{userId}/virtual-battery'].post
$.paths['/users/{userId}'].delete

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Clevergy Connect API
  version: 1.0.0
extends: openapi/clevergy-connect-api-openapi.yml
x-generated: '2026-08-17'
x-method: generated
x-source: >-
  Enhancements derived from the API Evangelist enrichment pass on all/clevergy/ — the harvested
  Swagger 2.0 document at https://assets.clever.gy/swagger/connect-api.yaml is never mutated.
  Every value below is either an observed fact about the published document or a pointer at
  another artifact in this repo.
actions:
- target: $.info
  description: >-
    Record provenance, the artifact graph, and the two facts a consumer most needs and the
    document does not state: where the spec is published and that it is Swagger 2.0.
  update:
    x-apievangelist-source: https://assets.clever.gy/swagger/connect-api.yaml
    x-apievangelist-source-status: 200
    x-apievangelist-source-content-type: application/yaml
    x-apievangelist-harvested: '2026-08-17'
    x-apievangelist-spec-version: swagger-2.0
    x-apievangelist-docs: https://docs.clever.gy/connect-api/clevergy-connect-api
    x-apievangelist-postman: https://www.postman.com/clevergy/clevergy-public-workspace
    x-apievangelist-artifacts:
      authentication: authentication/clevergy-authentication.yml
      conventions: conventions/clevergy-conventions.yml
      errors: errors/clevergy-problem-types.yml
      lifecycle: lifecycle/clevergy-lifecycle.yml
      data_model: data-model/clevergy-data-model.yml
      conformance: conformance/clevergy-conformance.yml
      webhooks: asyncapi/clevergy-webhooks.yml
      components: components/clevergy-components.yml
      agentic_access: agentic-access/clevergy-agentic-access.yml
      skills: skills/_index.yml
- target: $.info
  description: >-
    Add the contact and terms the document omits, sourced from the description Clevergy itself
    wrote into info.description and from its published legal pages.
  update:
    contact:
      name: Clevergy customer support
      email: soporte.clientes@clever.gy
      url: https://docs.clever.gy/developer
    termsOfService: https://clever.gy/en/terms-conditions-web/
- target: $.securityDefinitions.key
  description: >-
    Document how the API key is actually obtained and rotated — the spec declares the header but
    not the lifecycle, which is the part an integrator gets stuck on.
  update:
    description: >-
      Tenant API key, sent in the clevergy-api-key request header. Not self-service: issued per
      environment on request to soporte.clientes@clever.gy or a Customer Success Manager, and
      revealable/regenerable in the Operations Portal under Settings > API key management.
      Regenerating revokes the previous key immediately. Must never be exposed to a browser —
      mint a per-user JWT with retrieveUserAccessToken and pass that to microfrontends instead.
    x-provisioning: sales-gated
    x-rotation: self-service regenerate, immediate revocation of prior key
    x-docs: https://docs.clever.gy/developer/getting-started/authentication
- target: $.paths['/auth/{userId}/token'].get
  description: >-
    Flag this operation as the hinge of the whole integration: it is what turns a server-side API
    key into a browser-safe, 1-hour user token for the microfrontend layer.
  update:
    x-apievangelist-role: token-exchange
    x-token-ttl-seconds: 3600
    x-consumed-by: microfrontend data-token attribute; login-with-token webview URL
    x-docs: https://docs.clever.gy/developer/getting-started/authentication#authentication-with-jwt
- target: $.paths['/contracts/{contractId}/invoices'].post
  description: >-
    Record the two-step upload contract. The 200 response is not the end of the operation: an
    invoice whose PDF is never PUT to the returned signed URL is silently never processed.
  update:
    x-apievangelist-two-step: true
    x-upload-url-field: fileUrl
    x-upload-url-ttl-seconds: 900
    x-failure-mode: >-
      If the PDF is not uploaded to fileUrl within 15 minutes the invoice is not processed and
      never becomes visible to the customer. There is no error — the caller must verify.
    x-docs: https://docs.clever.gy/developer/how-to-set-up/invoices
- target: $.paths['/equipments/{equipmentId}/storage/schedule'].post
  description: >-
    Mark the only operation in the API that actuates physical hardware, and record its
    undocumented precondition.
  update:
    x-apievangelist-consequence: physical
    x-precondition: >-
      Battery information (capacity, SOC history) is readable for all users, but battery CONTROL
      actions require the customer to have connected their system and granted permission via the
      Huawei OAuth integration. Other inverter vendors are not yet supported for control.
    x-human-in-the-loop: recommended
    x-docs: https://docs.clever.gy/developer/how-to-set-up/battery-management
- target: $.paths['/users/{userId}/houses'].get
  description: Name the replacement for this deprecated operation, which the spec flags but does not redirect.
  update:
    x-apievangelist-superseded-by: getUserSupplies
    x-apievangelist-superseded-path: /users/{userId}/supplies
- target: $.paths['/users'].get
  description: >-
    Record the undocumented precondition behind this operation's 400 response — it rejects an
    unfiltered call.
  update:
    x-apievangelist-requires-filter: true
    x-filter-params: [userId, externalUserId, nif, email, status, product, name]
    x-error-note: >-
      Returns 400 "Incorrect sort criteria or no filter parameter provided" when called with no
      filter parameter.
- target: $.paths['/users/{userId}/virtual-wallet'].post
  description: Flag the monetary write and the absence of any replay protection.
  update:
    x-apievangelist-consequence: monetary
    x-unit: EUR
    x-idempotency: none
    x-retry-hazard: >-
      No Idempotency-Key mechanism exists. A retried call posts a second balance delta. Callers
      must deduplicate client-side.
- target: $.paths['/users/{userId}/virtual-battery'].post
  description: Flag the balance write and the absence of any replay protection.
  update:
    x-apievangelist-consequence: write
    x-unit: kWh
    x-idempotency: none
    x-retry-hazard: >-
      No Idempotency-Key mechanism exists. A retried call posts a second balance delta. Callers
      must deduplicate client-side.
- target: $.paths['/users/{userId}'].delete
  description: Flag the irreversible personal-data deletion.
  update:
    x-apievangelist-consequence: irreversible
    x-human-in-the-loop: required
    x-note: >-
      Hard delete of an end customer's account. This is the operation a GDPR erasure request would
      run through; it should never be reachable by an unsupervised agent.