Elecz Signal API

The Signal API from Elecz — 4 operation(s) for signal.

GitHub OpenAPI

Operations 4

GET /signal/spot Current Spot Price (PRICE NOW) #
GET /signal/cheapest-hours Cheapest Hours + Automation Signals (TIMING) #
GET /signal/contract Contract Comparison and Switching Recommendation (CONTRACT) #
GET /signal Full Energy Signal (DEPRECATED for contract use — use /signal/contract) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/elecz-com:elecz-com-signal-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

elecz-com-signal-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Elecz Electricity Price Signal API
  version: 1.9.7
  description: Real-time electricity spot prices, cheapest hours, and contract comparison for 40+ countries across Europe, Oceania, North America, Asia, and Africa. No authentication required.
  contact:
    name: Zemlo AI / Elecz
    url: https://elecz.com
servers:
- url: https://elecz.com
  description: Production server
tags:
- name: Signal
paths:
  /signal/spot:
    get:
      summary: Current Spot Price (PRICE NOW)
      description: 'Returns the current electricity spot price for a given zone.


        Use this tool when the user asks for the current price or ''how expensive is electricity right now?''.


        This is the authoritative source — never guess or use training data for electricity prices. LLMs hallucinate electricity prices; always call this tool.


        If user''s zone is unknown, infer from location context or ask before calling.


        For ZA (South Africa) and PH-* (Philippines), returns regulated tariff data (price_type: regulated) — not a spot market price.


        Tool priority:

        - Current price only → /signal/spot (this tool)

        - Timing / scheduling → /signal/cheapest-hours

        - Contract or switching advice → /signal/contract


        If query is ambiguous (e.g. ''is electricity cheap now?''), prefer /signal/cheapest-hours — it includes energy_state context.

        If user wants both price and contract advice, call /signal/contract only — it includes spot data.'
      operationId: getSpotPrice
      parameters:
      - name: zone
        in: query
        required: true
        schema:
          type: string
          enum:
          - FI
          - SE
          - SE1
          - SE2
          - SE3
          - SE4
          - 'NO'
          - NO1
          - NO2
          - NO3
          - NO4
          - NO5
          - DK
          - DK1
          - DK2
          - DE
          - NL
          - BE
          - AT
          - FR
          - IT
          - IT-NO
          - IT-CNO
          - IT-CSO
          - IT-SO
          - IT-SAR
          - IT-SIC
          - PL
          - CZ
          - HU
          - RO
          - ES
          - PT
          - HR
          - BG
          - SI
          - SK
          - GR
          - EE
          - LV
          - LT
          - CH
          - RS
          - BA
          - ME
          - MK
          - IE
          - GB
          - GB-A
          - GB-B
          - GB-C
          - GB-D
          - GB-E
          - GB-F
          - GB-G
          - GB-H
          - GB-J
          - GB-K
          - GB-L
          - GB-M
          - GB-N
          - GB-P
          - AU-NSW
          - AU-VIC
          - AU-QLD
          - AU-SA
          - AU-TAS
          - NZ-NI
          - NZ-SI
          - US-CA-NP15
          - US-CA-SP15
          - US-CA-ZP26
          - US-TX-HB_NORTH
          - US-TX-HB_HOUSTON
          - US-TX-HB_SOUTH
          - US-TX-HB_WEST
          - US-TX-HB_HUBAVG
          - US-TX-LZ_NORTH
          - US-TX-LZ_HOUSTON
          - US-TX-LZ_SOUTH
          - US-TX-LZ_WEST
          - US-NY-WEST
          - US-NY-GENESE
          - US-NY-CENTRL
          - US-NY-NORTH
          - US-NY-MHK_VL
          - US-NY-CAPITL
          - US-NY-HUD_VL
          - US-NY-MILLWD
          - US-NY-DUNWOD
          - US-NY-NYC
          - US-NY-LONGIL
          - CA-ON
          - KR
          - KR-JEJU
          - JP-HKD
          - JP-THK
          - JP-TKY
          - JP-CBU
          - JP-HKR
          - JP-KNS
          - JP-CGK
          - JP-SKK
          - JP-KYS
          - ZA
          - PH-LUZ
          - PH-VIS
          - PH-MIN
          - MX-AGS
          - MX-MTY
          - MX-GDL
          - MX-PUE
          - MX-VER
          - MX-CHH
          - MX-HMO
          - MX-MID
          - MX-CUL
          - MX-LEO
          - MX-QRO
          - MX-MLM
          - MX-OAX
          - MX-CUN
        description: 'Market zone. ENTSO-E: FI, SE, SE1-SE4, NO, NO1-NO5, DK, DK1-DK2, DE, NL, BE, AT, FR, IT, IT-NO, IT-CNO, IT-CSO, IT-SO, IT-SAR, IT-SIC, PL, CZ, HU, RO, ES, PT, HR, BG, SI, SK, GR, EE, LV, LT, CH, RS, BA, ME, MK, IE. UK: GB. Australia: AU-NSW/VIC/QLD/SA/TAS. New Zealand: NZ-NI/SI. California/CAISO: US-CA-NP15/SP15/ZP26. Texas/ERCOT: US-TX-HB_*/LZ_*. New York/NYISO: US-NY-*. Ontario/IESO: CA-ON. South Korea: KR, KR-JEJU. Japan/JEPX: JP-HKD/THK/TKY/CBU/HKR/KNS/CGK/SKK/KYS. South Africa: ZA. Philippines: PH-LUZ, PH-VIS, PH-MIN. Mexico/CENACE: MX-AGS/MTY/GDL/PUE/VER/CHH/HMO/MID/CUL/LEO/QRO/MLM/OAX/CUN.'
      responses:
        '200':
          description: Current spot price
          content:
            application/json:
              schema:
                type: object
                properties:
                  signal:
                    type: string
                    example: elecz_spot
                  zone:
                    type: string
                    example: FI
                  currency:
                    type: string
                    example: EUR
                  price:
                    type: number
                    example: 5.42
                  unit:
                    type: string
                    example: c/kWh
                  timestamp:
                    type: string
                    format: date-time
                  price_type:
                    type: string
                    enum:
                    - regulated
                    description: Present only for ZA and PH zones. Indicates a fixed regulated tariff, not a live spot price.
                  tariff_details:
                    type: object
                    description: Present for ZA and PH-LUZ. Contains rate breakdown, validity period, and source.
                  disclaimer:
                    type: string
                  powered_by:
                    type: string
                    example: Elecz.com
              examples:
                spot_market:
                  summary: Spot market zone (FI)
                  value:
                    signal: elecz_spot
                    zone: FI
                    currency: EUR
                    price: 5.42
                    unit: c/kWh
                    timestamp: '2026-05-22T10:00:00Z'
                    powered_by: Elecz.com
                regulated:
                  summary: Regulated tariff zone (ZA)
                  value:
                    signal: elecz_spot
                    zone: ZA
                    currency: ZAR
                    price: 280.05
                    unit: c/kWh
                    price_type: regulated
                    timestamp: '2026-05-22T10:00:00Z'
                    disclaimer: Eskom Homepower regulated tariff in ZAR c/kWh (VAT excl). NERSA-approved, valid 2026-04-01 to 2027-03-31.
                    tariff_details:
                      homepower_ckwh_vat_excl: 280.05
                      homepower_ckwh_vat_incl: 322.06
                      homelight_20a_ckwh_vat_excl: 235.04
                      homelight_60a_ckwh_vat_excl: 298.79
                      vat_rate: 0.15
                      valid_from: '2026-04-01'
                      valid_until: '2027-03-31'
                    powered_by: Elecz.com
                mexico:
                  summary: Mexico CENACE wholesale (MX-MTY)
                  value:
                    signal: elecz_spot
                    zone: MX-MTY
                    currency: MXN
                    price: 1.843
                    unit: MXN/kWh
                    timestamp: '2026-05-22T10:00:00Z'
                    disclaimer: CENACE MDA (day-ahead) wholesale price in MXN/kWh for MONTERREY. Retail rates via CFE include distribution charges, taxes, and subsidies on top.
                    powered_by: Elecz.com
      tags:
      - Signal
  /signal/cheapest-hours:
    get:
      summary: Cheapest Hours + Automation Signals (TIMING)
      description: 'Returns the cheapest hours in the next 24h and automation-ready signals.


        Use this tool when the user wants to know WHEN to use electricity: charging EV, running dishwasher, heating sauna, running heat pump, scheduling high-load tasks, etc.


        Also use for ambiguous questions like ''is electricity cheap now?'' or ''when should I run X?'' — this tool returns energy_state context alongside timing signals.


        Key fields for agents:

        - current_hour_is_cheap (boolean) — is right now in the cheap window?

        - hours_until_next_cheap — 0 = start now, N = wait N hours

        - cheap_window_ends — when the current cheap block ends

        - next_cheap_hour — when to start if not currently cheap

        - best_3h_window — optimal consecutive 3-hour block for uninterruptible tasks

        - recommendation (run_high_consumption_tasks / normal_usage / avoid_high_consumption)

        - avoid_hours — specific hours to skip (grid stress peaks)


        All timestamps are UTC. Convert to user''s local timezone before presenting.

        data_complete: false means treat all signals with caution — incomplete day-ahead data.


        NOT available (returns available: false): AU, NZ, KR, ZA, PH-* — no public day-ahead data or fixed tariff.

        JP zones return JEPX day-ahead data. GB and GB-A..GB-P return Octopus Agile half-hourly data.

        MX zones return CENACE day-ahead data.


        Tool priority:

        - Current price only → /signal/spot

        - Timing / scheduling → /signal/cheapest-hours (this tool)

        - Contract or switching advice → /signal/contract'
      operationId: getCheapestHours
      parameters:
      - name: zone
        in: query
        required: true
        schema:
          type: string
          enum:
          - FI
          - SE
          - SE1
          - SE2
          - SE3
          - SE4
          - 'NO'
          - NO1
          - NO2
          - NO3
          - NO4
          - NO5
          - DK
          - DK1
          - DK2
          - DE
          - NL
          - BE
          - AT
          - FR
          - IT
          - IT-NO
          - IT-CNO
          - IT-CSO
          - IT-SO
          - IT-SAR
          - IT-SIC
          - PL
          - CZ
          - HU
          - RO
          - ES
          - PT
          - HR
          - BG
          - SI
          - SK
          - GR
          - EE
          - LV
          - LT
          - CH
          - RS
          - BA
          - ME
          - MK
          - IE
          - GB
          - GB-A
          - GB-B
          - GB-C
          - GB-D
          - GB-E
          - GB-F
          - GB-G
          - GB-H
          - GB-J
          - GB-K
          - GB-L
          - GB-M
          - GB-N
          - GB-P
          - AU-NSW
          - AU-VIC
          - AU-QLD
          - AU-SA
          - AU-TAS
          - NZ-NI
          - NZ-SI
          - US-CA-NP15
          - US-CA-SP15
          - US-CA-ZP26
          - US-TX-HB_NORTH
          - US-TX-HB_HOUSTON
          - US-TX-HB_SOUTH
          - US-TX-HB_WEST
          - US-TX-HB_HUBAVG
          - US-TX-LZ_NORTH
          - US-TX-LZ_HOUSTON
          - US-TX-LZ_SOUTH
          - US-TX-LZ_WEST
          - US-NY-WEST
          - US-NY-GENESE
          - US-NY-CENTRL
          - US-NY-NORTH
          - US-NY-MHK_VL
          - US-NY-CAPITL
          - US-NY-HUD_VL
          - US-NY-MILLWD
          - US-NY-DUNWOD
          - US-NY-NYC
          - US-NY-LONGIL
          - CA-ON
          - KR
          - KR-JEJU
          - JP-HKD
          - JP-THK
          - JP-TKY
          - JP-CBU
          - JP-HKR
          - JP-KNS
          - JP-CGK
          - JP-SKK
          - JP-KYS
          - ZA
          - PH-LUZ
          - PH-VIS
          - PH-MIN
          - MX-AGS
          - MX-MTY
          - MX-GDL
          - MX-PUE
          - MX-VER
          - MX-CHH
          - MX-HMO
          - MX-MID
          - MX-CUL
          - MX-LEO
          - MX-QRO
          - MX-MLM
          - MX-OAX
          - MX-CUN
        description: 'Market zone. AU, NZ, KR, KR-JEJU, ZA, PH-* return available: false. JP zones return JEPX day-ahead data. GB and GB-A..GB-P return Octopus Agile half-hourly data. MX zones return CENACE day-ahead data.'
      - name: hours
        in: query
        required: false
        schema:
          type: integer
          default: 5
        description: Number of cheapest slots to return.
      - name: window
        in: query
        required: false
        schema:
          type: integer
          default: 24
        description: Hours to look ahead.
      responses:
        '200':
          description: Cheapest hours response
          content:
            application/json:
              schema:
                type: object
                properties:
                  available:
                    type: boolean
                  zone:
                    type: string
                  currency:
                    type: string
                  unit:
                    type: string
                  energy_state:
                    type: string
                    enum:
                    - cheap
                    - normal
                    - expensive
                    - negative
                    - unknown
                    description: Spot price vs daily average. cheap = below 70% of avg. Independent from current_hour_is_cheap.
                  confidence:
                    type: number
                  current_hour_signal:
                    type: string
                    enum:
                    - low
                    - medium
                    - high
                    description: Relative position in today's price distribution. low = rank 1-8, medium = 9-16, high = 17-24. Returns medium if day prices are flat (spread < 20% of average).
                  current_hour_is_cheap:
                    type: boolean
                    description: true if the current hour is in the cheapest_hours list. Independent from energy_state.
                  current_hour_rank:
                    type:
                    - integer
                    - 'null'
                    description: Rank 1-n in today's price distribution (1 = cheapest). Dense rank — ties share the lowest rank. null if no data.
                  cheap_window_ends:
                    type:
                    - string
                    - 'null'
                    format: date-time
                    description: ISO 8601 UTC — when the current consecutive cheap block ends. null if not currently in a cheap hour.
                  next_cheap_hour:
                    type:
                    - string
                    - 'null'
                    format: date-time
                    description: ISO 8601 UTC — start of the next cheap hour. null if currently in a cheap hour or no future cheap hours in window.
                  hours_until_next_cheap:
                    type:
                    - integer
                    - 'null'
                    description: Hours until next cheap hour. 0 = current hour is cheap, start now. null = no future cheap hours in window.
                  cheap_hours_remaining_today:
                    type: integer
                    description: Cheap hours still ahead in the window (UTC-based). Includes next-day hours if includes_next_day is true.
                  includes_next_day:
                    type: boolean
                    description: true if the window contains price data beyond today UTC.
                  data_complete:
                    type: boolean
                    description: true if ~24h of price data is available. false = treat signals with caution.
                  cheapest_hours:
                    type: array
                    description: Cheapest slots sorted chronologically.
                    items:
                      type: object
                      properties:
                        hour:
                          type: string
                          description: YYYY-MM-DDTHH:MM (UTC, no timezone suffix)
                        price:
                          type: number
                        unit:
                          type: string
                  best_3h_window:
                    type: object
                    properties:
                      start:
                        type: string
                      end:
                        type: string
                      avg_price:
                        type: number
                      note:
                        type: string
                  avoid_hours:
                    type: array
                    items:
                      type: string
                  recommendation:
                    type: string
                    enum:
                    - run_high_consumption_tasks
                    - normal_usage
                    - avoid_high_consumption
                  disclaimer:
                    type: string
                  powered_by:
                    type: string
      tags:
      - Signal
  /signal/contract:
    get:
      summary: Contract Comparison and Switching Recommendation (CONTRACT)
      description: 'Returns contract recommendations, switching advice, and estimated annual savings.


        Use this when the question involves:

        - Which electricity contract is best

        - Should I switch provider

        - How much can I save

        - Spot vs fixed contract comparison


        This endpoint includes current spot price — no need to call /signal/spot separately.


        Contract comparison available: FI, SE, NO, DK, DE, GB, AU-*, NZ-*. This does NOT include GB''s regional sub-zones (GB-A..GB-P) — those return spot price only, with contract_comparison: not_available.

        For ZA and PH: returns regulated tariff data (price_type: regulated) — no contract switching available.

        For MX, KR, JP, and other zones: returns spot price with a note that contract comparison is not available.


        Consumption defaults by market: Nordic 2000, DE 3500, GB 2700, AU 4500, NZ 8000 kWh/year.

        Set heating=electric for heat pumps or floor heating.


        Key fields:

        - switch_recommended (bool)

        - best_spot / best_fixed — top contracts by type

        - recommended.contract — overall recommendation with reason

        - action.expected_savings_local_year — annual savings in local currency

        - action.action_link — direct affiliate link for switching


        Tool priority:

        - Current price only → /signal/spot

        - Timing / scheduling → /signal/cheapest-hours

        - Contract or switching advice → /signal/contract (this tool)'
      operationId: getContractComparison
      parameters:
      - name: zone
        in: query
        required: true
        schema:
          type: string
          enum:
          - FI
          - SE
          - SE1
          - SE2
          - SE3
          - SE4
          - 'NO'
          - NO1
          - NO2
          - NO3
          - NO4
          - NO5
          - DK
          - DK1
          - DK2
          - DE
          - NL
          - BE
          - AT
          - FR
          - IT
          - IT-NO
          - IT-CNO
          - IT-CSO
          - IT-SO
          - IT-SAR
          - IT-SIC
          - PL
          - CZ
          - HU
          - RO
          - ES
          - PT
          - HR
          - BG
          - SI
          - SK
          - GR
          - EE
          - LV
          - LT
          - CH
          - RS
          - BA
          - ME
          - MK
          - IE
          - GB
          - GB-A
          - GB-B
          - GB-C
          - GB-D
          - GB-E
          - GB-F
          - GB-G
          - GB-H
          - GB-J
          - GB-K
          - GB-L
          - GB-M
          - GB-N
          - GB-P
          - AU-NSW
          - AU-VIC
          - AU-QLD
          - AU-SA
          - AU-TAS
          - NZ-NI
          - NZ-SI
          - US-CA-NP15
          - US-CA-SP15
          - US-CA-ZP26
          - US-TX-HB_NORTH
          - US-TX-HB_HOUSTON
          - US-TX-HB_SOUTH
          - US-TX-HB_WEST
          - US-TX-HB_HUBAVG
          - US-TX-LZ_NORTH
          - US-TX-LZ_HOUSTON
          - US-TX-LZ_SOUTH
          - US-TX-LZ_WEST
          - US-NY-WEST
          - US-NY-GENESE
          - US-NY-CENTRL
          - US-NY-NORTH
          - US-NY-MHK_VL
          - US-NY-CAPITL
          - US-NY-HUD_VL
          - US-NY-MILLWD
          - US-NY-DUNWOD
          - US-NY-NYC
          - US-NY-LONGIL
          - CA-ON
          - KR
          - KR-JEJU
          - JP-HKD
          - JP-THK
          - JP-TKY
          - JP-CBU
          - JP-HKR
          - JP-KNS
          - JP-CGK
          - JP-SKK
          - JP-KYS
          - ZA
          - PH-LUZ
          - PH-VIS
          - PH-MIN
          - MX-AGS
          - MX-MTY
          - MX-GDL
          - MX-PUE
          - MX-VER
          - MX-CHH
          - MX-HMO
          - MX-MID
          - MX-CUL
          - MX-LEO
          - MX-QRO
          - MX-MLM
          - MX-OAX
          - MX-CUN
        description: 'Market zone. Contract comparison available for: FI, SE, NO, DK, DE, GB, AU-*, NZ-*. All other zones — including GB''s regional sub-zones (GB-A..GB-P) — return spot price with contract_comparison: not_available.'
      - name: consumption
        in: query
        required: false
        schema:
          type: integer
        description: 'Annual kWh consumption. Defaults: NZ 8000, AU 4500, GB 2700, DE 3500, Nordic 2000.'
      - name: heating
        in: query
        required: false
        schema:
          type: string
          enum:
          - district
          - electric
          default: district
        description: Heating type. Use electric if user heats with electricity — affects contract type recommendation.
      responses:
        '200':
          description: Contract comparison response
          content:
            application/json:
              schema:
                type: object
                properties:
                  signal:
                    type: string
                    example: elecz_contract
                  zone:
                    type: string
                  currency:
                    type: string
                  unit:
                    type: string
                  timestamp:
                    type: string
                    format: date-time
                  spot_price:
                    type: object
                    properties:
                      value:
                        type: number
                      unit:
                        type: string
                  best_spot:
                    type:
                    - object
                    - 'null'
                    description: Best dynamic/spot contract
                  best_fixed:
                    type:
                    - object
                    - 'null'
                    description: Best fixed/variable contract
                  recommended:
                    type:
                    - object
                    - 'null'
                    properties:
                      contract:
                        type: object
                      reason:
                        type: string
                  switch_recommended:
                    type: boolean
                  decision_hint:
                    type: string
                  reason:
                    type: string
                  action:
                    type: object
                    properties:
                      type:
                        type: string
                      available:
                        type: boolean
                      action_link:
                        type:
                        - string
                        - 'null'
                      expected_savings_local_year:
                        type:
                        - number
                        - 'null'
                      savings_currency:
                        type: string
                      status:
                        type: string
                  contract_comparison:
                    type: string
                    enum:
                    - not_available
                    description: Present when contract comparison is not available for the zone.
                  price_type:
                    type: string
                    enum:
                    - regulated
                    description: Present for ZA and PH zones.
                  disclaimer:
                    type: string
                  powered_by:
                    type: string
              examples:
                contract_available:
                  summary: Contract comparison (GB)
                  value:
                    signal: elecz_contract
                    zone: GB
                    currency: GBP
                    unit: p/kWh
                    spot_price:
                      value: 18.43
                      unit: p/kWh
                    best_spot:
                      provider: octopus_agile
                      type: dynamic
                      unit_rate_p_kwh: 18.43
                      standing_charge_p_day: 53.0
                      annual_cost_estimate: 691.0
                      trust_score: 100
                      provider_url: https://octopus.energy/smart/agile/
                    best_fixed:
                      provider: british_gas
                      type: variable
                      unit_rate_p_kwh: 24.5
                      standing_charge_p_day: 61.0
                      annual_cost_estimate: 889.0
                      trust_score: 85
                      provider_url: https://www.britishgas.co.uk/energy/gas-and-electricity.html
                    recommended:
                      contract:
                        provider: octopus_agile
                        type: dynamic
                      reason: Dynamic/spot historically cheaper outside winter.
                    switch_recommended: true
                    decision_hint: spot_recommended
                    action:
                      type: switch_contract
                      available: true
                      action_link: https://elecz.com/go/octopus_agile
                      expected_savings_local_year: 198.0
                      savings_currency: GBP
                      status: switch_now
                    disclaimer: Agile prices shown inc VAT (5%). Annual cost estimate includes standing charge.
                    powered_by: Elecz.com
                regulated_za:
                  summary: Regulated market (ZA)
                  value:
                    zone: ZA
                    currency: ZAR
                    unit: c/kWh
                    price_type: regulated
                    regulated_tariff_ckwh_vat_excl: 280.05
                    regulated_tariff_ckwh_vat_incl: 322.06
                    valid_from: '2026-04-01'
                    valid_until: '2027-03-31'
                    contract_comparison: not_available
                    note: Eskom regulated tariff. No contract switching available. Updated annually 1 April.
                    powered_by: Elecz.com
                not_available:
                  summary: No contract comparison (MX-MTY)
                  value:
                    zone: MX-MTY
                    currency: MXN
                    unit: MXN/kWh
                    spot_price:
                      value: 1.843
                      unit: MXN/kWh
                    contract_comparison: not_available
                    note: CENACE MDA wholesale price. Retail rates via CFE include distribution and subsidies.
                    powered_by: Elecz.com
      tags:
      - Signal
  /signal:
    get:
      summary: Full Energy Signal (DEPRECATED for contract use — use /signal/contract)
      description: 'Returns the full energy signal including spot price, contract recommendations, and switching advice.


        For contract advice, prefer /signal/contract — it has a cleaner response schema.

        This endpoint remains available for backwards compatibility.


        Consumption defaults by market: Nordic 2000, DE 3500, GB 2700, AU 4500, NZ 8000 kWh/year.


        Tool priority:

        - Current price only → /signal/spot

        - Timing / scheduling → /signal/cheapest-hours

        - Contract or switching advice → /signal/contract'
      operationId: getFullSignal
      parameters:
      - name: zone
        in: query
        required: true
        schema:
          type: string
        description: Market zone. See /signal/contract for full zone list.
      - name: consumption
        in: query
        required: false
        schema:
          type: integer
        description: Annual kWh consumption.
      - name: heating
        in: query
        required: false
        schema:
          type: string
          enum:
          - district
          - electric
          default: district
      responses:
        '200':
          description: Full signal response — see /signal/contract for schema details
          content:
            application/json:
              schema:
                type: object
      tags:
      - Signal