{"service":"HALOWERK iotwerk","version":"1.0.0","currency":"USDC","network":"eip155:8453","network_name":"Base Mainnet","recipient":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","payment_header":"PAYMENT-SIGNATURE","endpoints":[{"method":"POST","path":"/v1/device-auth","url":"https://iot.halowerk.com/v1/device-auth","tool":"iotwerk_device_auth","price_usdc":0.002,"price_model":"per_call","summary":"Builds and verifies an HMAC-SHA256 authentication tag for a canonical device challenge.","description":"Canonicalizes device_id, nonce and message, computes an HMAC-SHA256 tag with caller-supplied ephemeral key material, and optionally compares a claimed tag in constant time. It does not provision devices, store keys or replace asymmetric device identity; do not submit long-lived production secrets.","input_schema":{"type":"object","required":["device_id","nonce","message","ephemeral_key"],"additionalProperties":false,"properties":{"device_id":{"type":"string","minLength":1,"maxLength":128,"description":"Stable device identifier."},"nonce":{"type":"string","minLength":8,"maxLength":256,"description":"Fresh caller-generated challenge nonce."},"message":{"type":"string","minLength":1,"maxLength":4096,"description":"Challenge payload."},"ephemeral_key":{"type":"string","minLength":16,"maxLength":512,"description":"Ephemeral HMAC key; long-lived production keys must not be sent."},"claimed_tag_hex":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/sensor-calibration","url":"https://iot.halowerk.com/v1/sensor-calibration","tool":"iotwerk_sensor_calibration","price_usdc":0.003,"price_model":"per_call","summary":"Fits an affine sensor calibration and reports slope, offset, residuals and RMSE.","description":"Fits reference = slope × observed + offset with ordinary least squares over paired caller-supplied readings. It reports residual diagnostics and does not claim traceability, uncertainty accreditation or suitability beyond the supplied calibration range.","input_schema":{"type":"object","required":["observed","reference"],"additionalProperties":false,"properties":{"observed":{"type":"array","minItems":2,"maxItems":10000,"items":{"type":"number","minimum":-1000000000000,"maximum":1000000000000}},"reference":{"type":"array","minItems":2,"maxItems":10000,"items":{"type":"number","minimum":-1000000000000,"maximum":1000000000000}}}},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/ota-sign","url":"https://iot.halowerk.com/v1/ota-sign","tool":"iotwerk_ota_sign","price_usdc":0.003,"price_model":"per_call","summary":"Creates a canonical OTA manifest digest and an HMAC release-integrity tag.","description":"Canonicalizes firmware hash, version, device model and minimum bootloader version, then produces a SHA-256 manifest digest and HMAC-SHA256 release tag using caller-supplied ephemeral key material. This is a symmetric integrity tag, not a vendor PKI signature or code-signing service.","input_schema":{"type":"object","required":["firmware_sha256","version","device_model","minimum_bootloader","ephemeral_release_key"],"additionalProperties":false,"properties":{"firmware_sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"},"version":{"type":"string","minLength":1,"maxLength":64},"device_model":{"type":"string","minLength":1,"maxLength":128},"minimum_bootloader":{"type":"string","minLength":1,"maxLength":64},"ephemeral_release_key":{"type":"string","minLength":16,"maxLength":512,"description":"Ephemeral example key; do not submit a long-lived production signing key."}}},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/mesh-route","url":"https://iot.halowerk.com/v1/mesh-route","tool":"iotwerk_mesh_route","price_usdc":0.004,"price_model":"per_call","summary":"Finds the minimum-cost route through a supplied mesh graph using Dijkstra’s algorithm.","description":"Computes a deterministic shortest path over caller-supplied directed or bidirectional links with non-negative costs. It does not measure live radio conditions, reserve capacity or push routes to devices.","input_schema":{"type":"object","required":["nodes","links","start","goal"],"additionalProperties":false,"properties":{"nodes":{"type":"array","minItems":2,"maxItems":500,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":64}},"links":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object","required":["from","to","cost"],"additionalProperties":false,"properties":{"from":{"type":"string","minLength":1,"maxLength":64},"to":{"type":"string","minLength":1,"maxLength":64},"cost":{"type":"number","minimum":0,"maximum":1000000000},"bidirectional":{"type":"boolean","default":true}}}},"start":{"type":"string","minLength":1,"maxLength":64},"goal":{"type":"string","minLength":1,"maxLength":64}}},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/fleet-anomaly","url":"https://iot.halowerk.com/v1/fleet-anomaly","tool":"iotwerk_fleet_anomaly","price_usdc":0.003,"price_model":"per_call","summary":"Flags fleet readings that deviate from the cohort using median absolute deviation.","description":"Computes cohort median, median absolute deviation and robust z-scores for one numeric reading per device. A caller-selected threshold determines flags. It detects cross-sectional outliers only and does not diagnose root cause or learn temporal behavior.","input_schema":{"type":"object","required":["readings"],"additionalProperties":false,"properties":{"readings":{"type":"array","minItems":3,"maxItems":10000,"items":{"type":"object","required":["device_id","value"],"additionalProperties":false,"properties":{"device_id":{"type":"string","minLength":1,"maxLength":128},"value":{"type":"number","minimum":-1000000000000,"maximum":1000000000000}}}},"threshold":{"type":"number","minimum":0.1,"maximum":20,"description":"Absolute robust z-score threshold."}}},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/edge-compute-bid","url":"https://iot.halowerk.com/v1/edge-compute-bid","tool":"iotwerk_edge_compute_bid","price_usdc":0.004,"price_model":"per_call","summary":"Ranks edge-compute bids by capacity, deadline feasibility, quoted cost and latency.","description":"Filters caller-supplied bids by CPU, memory and latency constraints, computes workload cost from quoted unit prices, and ranks feasible candidates by total cost then latency. It does not contact providers, attest hardware or place a bid.","input_schema":{"type":"object","required":["cpu_seconds","memory_gb_seconds","max_latency_ms","candidates"],"additionalProperties":false,"properties":{"cpu_seconds":{"type":"number","minimum":0.001,"maximum":1000000000},"memory_gb_seconds":{"type":"number","minimum":0,"maximum":1000000000000},"max_latency_ms":{"type":"number","minimum":0,"maximum":1000000000},"candidates":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["provider","available_cpu_seconds","available_memory_gb_seconds","latency_ms","price_per_cpu_second","price_per_memory_gb_second"],"additionalProperties":false,"properties":{"provider":{"type":"string","minLength":1,"maxLength":128},"available_cpu_seconds":{"type":"number","minimum":0,"maximum":1000000000000},"available_memory_gb_seconds":{"type":"number","minimum":0,"maximum":1000000000000000},"latency_ms":{"type":"number","minimum":0,"maximum":1000000000},"price_per_cpu_second":{"type":"number","minimum":0,"maximum":1000000},"price_per_memory_gb_second":{"type":"number","minimum":0,"maximum":1000000}}}}}},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/lora-coverage","url":"https://iot.halowerk.com/v1/lora-coverage","tool":"iotwerk_lora_coverage","price_usdc":0.003,"price_model":"per_call","summary":"Estimates LoRa link margin from a transparent log-distance path-loss budget.","description":"Computes free-space loss at one metre, applies a caller-supplied path-loss exponent over distance, then reports estimated receive power and margin against receiver sensitivity. This planning estimate does not model terrain, Fresnel obstruction, interference, antenna mismatch or regulatory duty cycle.","input_schema":{"type":"object","required":["frequency_mhz","distance_km","tx_power_dbm","tx_antenna_gain_dbi","rx_antenna_gain_dbi","receiver_sensitivity_dbm","path_loss_exponent"],"additionalProperties":false,"properties":{"frequency_mhz":{"type":"number","minimum":100,"maximum":10000},"distance_km":{"type":"number","minimum":0.001,"maximum":10000},"tx_power_dbm":{"type":"number","minimum":-100,"maximum":100},"tx_antenna_gain_dbi":{"type":"number","minimum":-50,"maximum":100},"rx_antenna_gain_dbi":{"type":"number","minimum":-50,"maximum":100},"receiver_sensitivity_dbm":{"type":"number","minimum":-200,"maximum":0},"path_loss_exponent":{"type":"number","minimum":1,"maximum":8},"miscellaneous_loss_db":{"type":"number","minimum":0,"maximum":200}}},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/digital-twin-sync","url":"https://iot.halowerk.com/v1/digital-twin-sync","tool":"iotwerk_digital_twin_sync","price_usdc":0.004,"price_model":"per_call","summary":"Merges local and remote digital-twin changes by field version and exposes conflicts.","description":"Groups caller-supplied scalar field changes by field name, selects the highest version, and reports a conflict when equal-version values differ. It does not connect to a twin platform, merge nested documents or resolve semantic conflicts.","input_schema":{"type":"object","required":["local_changes","remote_changes"],"additionalProperties":false,"properties":{"local_changes":{"type":"array","maxItems":10000,"items":{"type":"object","required":["field","value","version"],"additionalProperties":false,"properties":{"field":{"type":"string","minLength":1,"maxLength":256},"value":{"type":["string","number","boolean","null"]},"version":{"type":"integer","minimum":0,"maximum":1000000000000}}}},"remote_changes":{"type":"array","maxItems":10000,"items":{"type":"object","required":["field","value","version"],"additionalProperties":false,"properties":{"field":{"type":"string","minLength":1,"maxLength":256},"value":{"type":["string","number","boolean","null"]},"version":{"type":"integer","minimum":0,"maximum":1000000000000}}}}}},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/battery-degradation","url":"https://iot.halowerk.com/v1/battery-degradation","tool":"iotwerk_battery_degradation","price_usdc":0.003,"price_model":"per_call","summary":"Estimates cycle and calendar capacity fade from explicit engineering coefficients.","description":"Applies a transparent heuristic: cycle fade scales with equivalent full cycles and depth-of-discharge exponent; calendar fade scales with square-root time and a temperature factor. Coefficients are caller supplied or declared defaults. This is not cell-chemistry validation, warranty advice or a safety prognosis.","input_schema":{"type":"object","required":["initial_capacity_ah","equivalent_full_cycles","average_depth_of_discharge_percent","average_temperature_c","calendar_days"],"additionalProperties":false,"properties":{"initial_capacity_ah":{"type":"number","minimum":0.001,"maximum":1000000000},"equivalent_full_cycles":{"type":"number","minimum":0,"maximum":1000000000},"average_depth_of_discharge_percent":{"type":"number","minimum":0,"maximum":100},"average_temperature_c":{"type":"number","minimum":-50,"maximum":150},"calendar_days":{"type":"number","minimum":0,"maximum":100000},"cycle_fade_per_full_cycle_percent":{"type":"number","minimum":0,"maximum":10},"calendar_fade_per_sqrt_year_percent":{"type":"number","minimum":0,"maximum":100}}},"needs_history":false,"payment_required":true},{"method":"POST","path":"/v1/robotic-path-clearance","url":"https://iot.halowerk.com/v1/robotic-path-clearance","tool":"iotwerk_robotic_path_clearance","price_usdc":0.004,"price_model":"per_call","summary":"Checks a polyline robot path against circular obstacles and reports minimum clearance.","description":"Computes the minimum Euclidean distance from each circular obstacle center to every path segment, then subtracts obstacle radius and robot radius. It detects planar static clearance only; it does not model robot shape beyond a circle, dynamics, uncertainty or moving obstacles.","input_schema":{"type":"object","required":["path","obstacles","robot_radius"],"additionalProperties":false,"properties":{"path":{"type":"array","minItems":2,"maxItems":10000,"items":{"type":"object","required":["x","y"],"additionalProperties":false,"properties":{"x":{"type":"number","minimum":-1000000000,"maximum":1000000000},"y":{"type":"number","minimum":-1000000000,"maximum":1000000000}}}},"obstacles":{"type":"array","maxItems":10000,"items":{"type":"object","required":["id","x","y","radius"],"additionalProperties":false,"properties":{"id":{"type":"string","minLength":1,"maxLength":128},"x":{"type":"number","minimum":-1000000000,"maximum":1000000000},"y":{"type":"number","minimum":-1000000000,"maximum":1000000000},"radius":{"type":"number","minimum":0,"maximum":1000000000}}}},"robot_radius":{"type":"number","minimum":0,"maximum":1000000000},"required_margin":{"type":"number","minimum":0,"maximum":1000000000}}},"needs_history":false,"payment_required":true}],"updated_at":"2026-08-31T21:34:33.249Z"}