> ## Documentation Index
> Fetch the complete documentation index at: https://developers.podero.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get one standalone HEMS session with its decision timeline and command verdicts



## OpenAPI

````yaml https://app.podero.com/api/partners/v2.0/openapi.json get /api/partners/v2.0/org/{org_id}/users/{user_id}/wallboxes/{wallbox_id}/hems-sessions/{session_id}
openapi: 3.1.0
info:
  title: Podero Partner API
  version: '2.0'
  description: >-
    This API provides a unified interaction point for Podero's partner
    companies.


    The goal of this API is to give partners easily integratable endpoints that
    don't require extensive software

    development. For this reason, the endpoints focus around user and device
    management, setting of preferences

    and high level device controls.


    While direct control of devices is implemented for special use cases such as
    pause power, we abstract away low level

    direct device steering so developers and partners can focus on delivering
    maximum value to end users.
  termsOfService: https://www.podero.com/terms-and-conditions
servers: []
security: []
paths:
  /api/partners/v2.0/org/{org_id}/users/{user_id}/wallboxes/{wallbox_id}/hems-sessions/{session_id}:
    get:
      tags:
        - Wallbox HEMS Sessions
      summary: >-
        Get one standalone HEMS session with its decision timeline and command
        verdicts
      operationId: >-
        integrations_api_api_v2_organizations_users_wallboxes_hems_sessions_router_get_hems_session_endpoint
      parameters:
        - in: path
          name: org_id
          schema:
            description: The organization ID
            format: uuid
            title: Org Id
            type: string
          required: true
          description: The organization ID
        - in: path
          name: user_id
          schema:
            description: The user ID
            format: uuid
            title: User Id
            type: string
          required: true
          description: The user ID
        - in: path
          name: wallbox_id
          schema:
            description: The wallbox ID
            format: uuid
            title: Wallbox Id
            type: string
          required: true
          description: The wallbox ID
        - in: path
          name: session_id
          schema:
            description: The HEMS session ID
            title: Session Id
            type: integer
          required: true
          description: The HEMS session ID
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HEMSSessionDetail'
      security:
        - OAuth2: []
components:
  schemas:
    HEMSSessionDetail:
      properties:
        session:
          $ref: '#/components/schemas/HEMSSessionItem'
        decisions:
          items:
            $ref: '#/components/schemas/HEMSDecisionItem'
          title: Decisions
          type: array
        commands:
          items:
            $ref: '#/components/schemas/HEMSCommandItem'
          title: Commands
          type: array
      required:
        - session
        - decisions
        - commands
      title: HEMSSessionDetail
      type: object
    HEMSSessionItem:
      properties:
        id:
          title: Id
          type: integer
        ocpp_transaction_id:
          anyOf:
            - type: integer
            - type: 'null'
          title: Ocpp Transaction Id
        started_at:
          format: date-time
          title: Started At
          type: string
        ended_at:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          title: Ended At
        final_hems_state:
          title: Final Hems State
          type: string
        outcome:
          anyOf:
            - $ref: '#/components/schemas/WBHEMSSessionOutcome'
            - type: 'null'
        energy_from_solar_kwh:
          anyOf:
            - type: number
            - type: 'null'
          title: Energy From Solar Kwh
        savings_eur:
          anyOf:
            - type: number
            - type: 'null'
          title: Savings Eur
        has_complete_price_coverage:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Has Complete Price Coverage
        commands_sent:
          title: Commands Sent
          type: integer
        commands_applied:
          title: Commands Applied
          type: integer
        commands_ineffective:
          title: Commands Ineffective
          type: integer
      required:
        - id
        - ocpp_transaction_id
        - started_at
        - ended_at
        - final_hems_state
        - outcome
        - energy_from_solar_kwh
        - savings_eur
        - has_complete_price_coverage
        - commands_sent
        - commands_applied
        - commands_ineffective
      title: HEMSSessionItem
      type: object
    HEMSDecisionItem:
      description: |-
        One steering decision point. Typed view over the SmartChargingDecision
        row — the wallbox context fields are extracted from its JSON envelope so
        the partner contract stays flat and typed.
      properties:
        time:
          format: date-time
          title: Time
          type: string
        hems_state:
          title: Hems State
          type: string
        decision:
          $ref: '#/components/schemas/SmartChargingDecisionKind'
        reason:
          title: Reason
          type: string
        export_w:
          anyOf:
            - type: number
            - type: 'null'
          title: Export W
        target_w:
          anyOf:
            - type: number
            - type: 'null'
          title: Target W
        phases:
          anyOf:
            - type: integer
            - type: 'null'
          title: Phases
        dispatched:
          title: Dispatched
          type: boolean
        steering_command_id:
          anyOf:
            - type: integer
            - type: 'null'
          title: Steering Command Id
      required:
        - time
        - hems_state
        - decision
        - reason
        - export_w
        - target_w
        - phases
        - dispatched
        - steering_command_id
      title: HEMSDecisionItem
      type: object
    HEMSCommandItem:
      properties:
        id:
          title: Id
          type: integer
        time:
          format: date-time
          title: Time
          type: string
        commanded_watts:
          title: Commanded Watts
          type: number
        commanded_amps:
          title: Commanded Amps
          type: number
        commanded_phases:
          anyOf:
            - type: integer
            - type: 'null'
          title: Commanded Phases
        dispatch_status:
          title: Dispatch Status
          type: string
        outcome:
          $ref: '#/components/schemas/SteeringOutcome'
        observed_current_offered_a:
          anyOf:
            - type: number
            - type: 'null'
          title: Observed Current Offered A
        observed_power_w:
          anyOf:
            - type: number
            - type: 'null'
          title: Observed Power W
      required:
        - id
        - time
        - commanded_watts
        - commanded_amps
        - commanded_phases
        - dispatch_status
        - outcome
        - observed_current_offered_a
        - observed_power_w
      title: HEMSCommandItem
      type: object
    WBHEMSSessionOutcome:
      description: >-
        Rolled-up outcome of one standalone wallbox HEMS session (SC-56).


        Mirrors the EV SessionOutcome idea at minimum-viable level: a single
        value

        an evaluator can read instead of the decision timeline.


        CHARGED_FROM_SOLAR    - at least one applied steering command delivered
        energy.

        NO_SURPLUS            - the loop ran but never saw enough surplus to
        start.

        STEERING_INEFFECTIVE  - commands dispatched but none verified as applied
                                (the Go-E silent no-op class — SC-55 verdicts).
        ABORTED               - exited without a clean finalize (eligibility
        flipped
                                off mid-charge, workflow terminated).
      enum:
        - charged_from_solar
        - no_surplus
        - steering_ineffective
        - aborted
      title: WBHEMSSessionOutcome
      type: string
    SmartChargingDecisionKind:
      description: >-
        What a Smart Charging steering loop decided at one decision point
        (SC-56).


        Smart Charging vertical only (EVs + wallboxes — not inverters/heat
        pumps,

        which are separate verticals with their own observability). One row per

        decision point makes the timeline queryable — "started because surplus
        held

        for N readings", "held through the commitment window", "re-modulated to

        track surplus", "stopped on sustained import" — without reading Temporal

        histories or Loki. Values are device-neutral within the vertical; the EV

        path adopts the same kinds when it lands (PLF-700 direction).


        START - steering began: first rate/command imposed (e.g.
        IDLE→COMMITMENT).

        STEP  - adjusted the rate/plan to track conditions.

        HOLD  - no dispatch at this decision point (gates not met / window
        ticking / no data).

        STOP  - steering ended: profile cleared / charging stopped.

        SKIP  - decision point aborted (inputs unavailable) — recorded so gaps
        are explainable.
      enum:
        - start
        - step
        - hold
        - stop
        - skip
      title: SmartChargingDecisionKind
      type: string
    SteeringOutcome:
      description: >-
        Per-command verdict for a wallbox steering command, recorded once we

        know whether the wallbox actually applied the cap — not just whether it

        replied Accepted (SC-55).


        The first four mirror the dispatch-time CommandStatus the CSMS reports.

        The verification verdicts are layered on top of an `applied` dispatch,
        by

        reading the next MeterValues Current.Offered (and, for a phase command,
        the

        per-phase currents):


        APPLIED              - dispatched Accepted AND Current.Offered converged
                               to the commanded amps within tolerance (and, when a
                               phase count was commanded and observable, the
                               energized phase count matched). Proven.
        ACCEPTED_INEFFECTIVE - dispatched Accepted but Current.Offered never
                               moved toward the command (Go-E silent no-op). The
                               failure SC-55 exists to catch.
        PHASE_SWITCH_INEFFECTIVE - dispatched Accepted, the amperage cap took
                               effect, but the observed energized phase count did
                               not match the commanded one (e.g. a Go-E that honours
                               the amp limit but drops the OCPP numberPhases switch).
                               Only raised on positive evidence — a phase mismatch
                               seen in per-phase MeterValues (SC-61).
        UNVERIFIED           - dispatched Accepted but no Current.Offered sample
                               landed in the verification window, so we can't say
                               either way (wallbox dropped the measurand / went
                               silent). Not counted as success.
        REJECTED             - wire response was Rejected / NotSupported.

        UNREACHABLE          - no live WS / no open transaction (transient).

        TIMEOUT              - CSMS server budget elapsed (transient).

        NOT_CAPABLE          - adapter-side: wallbox lacks current modulation.
      enum:
        - applied
        - accepted_ineffective
        - phase_switch_ineffective
        - unverified
        - rejected
        - unreachable
        - timeout
        - not_capable
      title: SteeringOutcome
      type: string
  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        password:
          tokenUrl: /api/partners/v2.0/auth/token
          scopes: {}
        clientCredentials:
          tokenUrl: /api/partners/v2.0/auth/token
          scopes: {}

````