HALOWERK Agent Tools
Turns SenML (JSON or CBOR) and LwM2M TLV into one record shape: resolved name, unit, absolute timestamp, typed value. Optionally puts every series on a shared time axis with a chosen interval and fill rule (last value, bucket mean, linear). Works only on the payload you pass: no device is contacted, nothing is stored, the same request returns the same bytes. TLV carries no type on the wire; unmapped resource ids come back as opaque base64 with a warning instead of a guess.
Offering
- Provider
- tools.halowerk.com
- Method
- POST
- Offering type
- Api Endpoint
- Transport type
- http
- Category
- Data
- Delivery
- Not provided
- Pricing model
- Not provided
- x402 version
- 2
Endpoint context
- URL
https://tools.halowerk.com/v1/telemetry/normalize- MIME type
- application/json
- First seen
- 2026-10-16T01:50:10.647Z
- Last seen
- Tags
- X402, agent-tools, Data, telemetry_normalize
Payment pricing
x402 payment terms are the authoritative price for calling this endpoint.
- Payment option 1
- 0.002 USDC
Atomic price: 2000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Raw x402 terms
[
{
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "2000",
"payTo": "0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E"
}
]Observed health
- Status
- Healthy
- Latest latency
- 316 ms
- Average latency
- 577 ms
- HTTP status
- 204
- Last checked
- Reachability
- 100% over 12 checks
Latency is measured to the first response headers. A reachable result does not verify response accuracy or merchant identity.
Input schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"type": "string",
"enum": [
"POST"
]
},
"bodyType": {
"type": "string",
"enum": [
"json",
"form-data",
"text"
]
},
"body": {
"type": "object",
"required": [
"format",
"payload"
],
"properties": {
"format": {
"type": "string",
"enum": [
"senml_json",
"senml_cbor",
"lwm2m_tlv"
],
"description": "Wire format of payload. senml_cbor and lwm2m_tlv expect base64."
},
"payload": {
"description": "SenML records as a JSON array (or a JSON string holding one), or base64 for senml_cbor and lwm2m_tlv. At most 1000000 bytes after decoding; the service caps the whole request body at 256 KB."
},
"base_name": {
"type": "string",
"maxLength": 200,
"description": "Prefix put in front of every resolved record name. For lwm2m_tlv this is where the device identity goes."
},
"base_time_unix_s": {
"type": "number",
"description": "Anchor in seconds since 1970 for records that carry no absolute time. SenML calls times below 2^28 relative to now; this endpoint is stateless and will not invent a now."
},
"value_types": {
"type": "object",
"description": "lwm2m_tlv only: resource id as key, one of integer, float, boolean, string, time, opaque as value. Ids left out come back as opaque base64 with a warning instead of a guessed type."
},
"align": {
"type": "boolean",
"default": false,
"description": "Also return every numeric series on one shared time grid."
},
"interval_s": {
"type": "number",
"minimum": 0.001,
"maximum": 86400,
"default": 60,
"description": "Grid spacing in seconds. The grid may not exceed 10000 points."
},
"align_method": {
"type": "string",
"enum": [
"last",
"mean",
"linear"
],
"default": "last",
"description": "How a grid point is filled: last value at or before the point, mean over the bucket, or linear interpolation between neighbours."
},
"tolerance_s": {
"type": "number",
"minimum": 0,
"maximum": 86400,
"default": 0,
"description": "align_method=last only: how stale the carried value may be before the grid point is left empty. 0 means no limit."
},
"max_records": {
"type": "integer",
"minimum": 1,
"maximum": 20000,
"default": 5000,
"description": "Upper bound on records taken from the payload."
}
}
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"additionalProperties": false
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"properties": {
"align": {
"default": false,
"description": "Also return every numeric series on one shared time grid.",
"type": "boolean"
},
"align_method": {
"default": "last",
"description": "How a grid point is filled: last value at or before the point, mean over the bucket, or linear interpolation between neighbours.",
"enum": [
"last",
"mean",
"linear"
],
"type": "string"
},
"base_name": {
"description": "Prefix put in front of every resolved record name. For lwm2m_tlv this is where the device identity goes.",
"maxLength": 200,
"type": "string"
},
"base_time_unix_s": {
"description": "Anchor in seconds since 1970 for records that carry no absolute time. SenML calls times below 2^28 relative to now; this endpoint is stateless and will not invent a now.",
"type": "number"
},
"format": {
"description": "Wire format of payload. senml_cbor and lwm2m_tlv expect base64.",
"enum": [
"senml_json",
"senml_cbor",
"lwm2m_tlv"
],
"type": "string"
},
"interval_s": {
"default": 60,
"description": "Grid spacing in seconds. The grid may not exceed 10000 points.",
"maximum": 86400,
"minimum": 0.001,
"type": "number"
},
"max_records": {
"default": 5000,
"description": "Upper bound on records taken from the payload.",
"maximum": 20000,
"minimum": 1,
"type": "integer"
},
"payload": {
"description": "SenML records as a JSON array (or a JSON string holding one), or base64 for senml_cbor and lwm2m_tlv. At most 1000000 bytes after decoding; the service caps the whole request body at 256 KB."
},
"tolerance_s": {
"default": 0,
"description": "align_method=last only: how stale the carried value may be before the grid point is left empty. 0 means no limit.",
"maximum": 86400,
"minimum": 0,
"type": "number"
},
"value_types": {
"description": "lwm2m_tlv only: resource id as key, one of integer, float, boolean, string, time, opaque as value. Ids left out come back as opaque base64 with a warning instead of a guessed type.",
"type": "object"
}
},
"required": [
"format",
"payload"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}