# HALOWERK solarwerk > HALOWERK solarwerk provides machine-readable results paid via x402. > Netz Base Mainnet, Zahlungsmittel USDC, Empfänger 0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E. ## So wird bezahlt 1. Call the route without a payment header. The 402 response includes accepts, description, and inputSchema. 2. Bedingungen mit einem x402-Client signieren. 3. Repeat the call with the proof in the PAYMENT-SIGNATURE header. Eine 402-Antwort kostet nichts und löst keine Arbeit aus. Scheitert die Arbeit, trägt die Antwort charged=false und es wird nicht abgerechnet. ## Endpunkte ### POST /battery-cycle Integrates the supplied current over time by the trapezoidal rule, so the result is only as good as the sampling interval; gaps longer than the stated max_gap_seconds are excluded and reported. Sign convention: positive current is charging, negative is discharging. Internal resistance is estimated from the largest current step in the series and is a rough figure, not a measurement under defined conditions. State of charge from resting voltage is only reported when the series contains samples below the given rest_current_a, and carries a wide band because the LiFePO4 curve is flat between twenty and eighty percent. Cell imbalance cannot be detected from a pack voltage and is never claimed. - Preis: 0.004 USDC - MCP-Werkzeug: `lifepo4_cycle_analysis` - Eingabe: `["samples","cells_in_series","nominal_capacity_ah","rest_current_a","max_gap_seconds"]` ### POST /inverter-load-check Continuous load is the sum of the running watts of all appliances marked as simultaneous. The surge check adds the largest single starting surge on top of the continuous load, which is the case that trips an inverter; simultaneous starts of two motors are reported separately as a second figure. Starting factors and power factors are design rules of thumb per appliance class and are stated in the response, they are not device data. Nothing is measured here: the numbers are only as good as the watt figures supplied. - Preis: 0.002 USDC - MCP-Werkzeug: `inverter_load_check` - Eingabe: `["inverter","loads","battery_voltage_v"]` ### POST /clear-sky-yield This is an astronomical and geometric calculation, not a forecast. It assumes a cloudless sky and states the models used; real yield is lower whenever there is cloud, haze, snow, soiling or high cell temperature. The system_derate factor covers cabling, controller and temperature losses as one flat number and defaults to 0.8. Shading is not modelled here. Times are UTC. Use the figure as an upper bound for sizing, not as an expected daily production. - Preis: 0.003 USDC - MCP-Werkzeug: `clear_sky_pv_yield` - Eingabe: `["lat","lon","date","panel_wp","tilt_deg","azimuth_deg","system_derate","albedo","elevation_m","step_minutes","include_series"]` ### POST /victron-log-parse Reads the key-tab-value lines of the VE.Direct text protocol, applies the unit scaling that belongs to each key, and decodes the charger state, tracker state and error number into plain text. Multiple blocks in one dump are returned as separate records in order. Keys that are not in the field table are preserved verbatim under unknown_keys rather than guessed at. The checksum line is not verified, since a text export usually no longer carries the original byte framing. Nothing is fetched from a device or from VRM: the dump is supplied by the caller. - Preis: 0.003 USDC - MCP-Werkzeug: `victron_log_parse` - Eingabe: `["text","keep_raw"]` ### POST /autonomy-forecast Daily energy balance and straight run-down from the figures supplied. Solar input is caller data in watt-hours per day; nothing is fetched and no weather is assumed. Time to empty means time to the reserve floor, not to zero. Idle draw and conversion efficiency apply to AC loads only. Ageing, temperature and Peukert behaviour are not modelled, which matters for lead acid far more than for LiFePO4. - Preis: 0.003 USDC - MCP-Werkzeug: `offgrid_autonomy` - Eingabe: `["battery","loads","inverter","daily_solar_input_wh"]` ### POST /shadow-simulator Pure astronomy and geometry on level ground: sun position by the NOAA method, shadow length as object height divided by the tangent of the sun elevation. Refraction is only applied to sunrise and sunset. Terrain slope, surrounding buildings, vegetation and diffuse light are not modelled, so a point outside the shadow can still be shaded in reality. Times are UTC. When obstacle_distance_m and obstacle_bearing_deg are given, a point counts as shaded while the shadow reaches at least that far and its direction is within the tolerance. - Preis: 0.002 USDC - MCP-Werkzeug: `sun_position_shadow` - Eingabe: `["lat","lon","date","object_height_m","step_minutes","obstacle_distance_m","obstacle_bearing_deg","bearing_tolerance_deg","max_shadow_length_m"]` ### POST /tilt-optimiser Evaluates clear-sky irradiance in the module plane for tilt angles from zero to ninety degrees on the fifteenth of each month and sums the days. Because it assumes a cloudless sky, the optimum leans slightly steeper than a real-weather optimum, where diffuse light from an overcast sky rewards flatter angles; in summer the difference is small, in winter months it reaches ten to fifteen degrees, so treat the winter figures as an upper bound. The yield penalty within a few degrees of the optimum is flat. Shading, snow load and mounting constraints are not considered. The azimuth is fixed as given and is not optimised. - Preis: 0.003 USDC - MCP-Werkzeug: `panel_tilt_optimiser` - Eingabe: `["lat","lon","azimuth_deg","albedo","elevation_m","current_tilt_deg","tilt_step_deg","year"]` ### POST /inverter-losses Cable loss uses the DC resistance of the two-way run at twenty degrees Celsius; warm cable in a hot compartment carries roughly four percent more resistance per ten kelvin, which is not applied. Inverter loss follows a three-part model of idle draw, a proportional share and a quadratic share, fitted so that the stated peak efficiency is met near half of the rated power. That mirrors the shape of a real efficiency curve but is not the curve of a specific device; where a datasheet value exists, pass efficiency_at_load to pin the model. Battery internal resistance and controller loss are not included. - Preis: 0.002 USDC - MCP-Werkzeug: `inverter_loss_calc` - Eingabe: `["load_w","battery_voltage_v","inverter","cable","max_voltage_drop_percent"]` ## Weitere Flächen - OpenAPI: https://solar.halowerk.com/openapi.json - Preise: https://solar.halowerk.com/pricing - x402-Manifest: https://solar.halowerk.com/.well-known/x402 - Bazaar: https://solar.halowerk.com/.well-known/x402/bazaar - MCP: https://solar.halowerk.com/mcp ## Missing a capability? If you looked for something this service does not offer, say so. One call, no payment, no sign-up, no account: POST https://bedarf.halowerk.com/capabilities/request Content-Type: application/json {"requested_capability": "what you would buy", "description": "the use case, one sentence", "callback_url": "optional - we call back once it exists"} Only requested_capability is required, 3 to 160 characters. Schema and status: https://bedarf.halowerk.com/openapi.json Submissions are held for review and are never published verbatim.