{"service":"Agent Tools","endpoint":"/v1/telemetry/normalize","method":"POST","content_type":"application/json","inputSchema":{"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."}}},"requestExample":{"format":"senml_json","payload":[{"bn":"urn:dev:ow:10e2073a:","bt":1786000000,"bu":"Cel","n":"temp","v":21.3},{"n":"temp","t":60,"v":21.9},{"n":"hum","u":"%RH","t":60,"v":48}],"align":true,"interval_s":60,"align_method":"last"},"operations":[{"method":"POST","inputSchema":{"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."}}},"requestExample":{"format":"senml_json","payload":[{"bn":"urn:dev:ow:10e2073a:","bt":1786000000,"bu":"Cel","n":"temp","v":21.3},{"n":"temp","t":60,"v":21.9},{"n":"hum","u":"%RH","t":60,"v":48}],"align":true,"interval_s":60,"align_method":"last"}}]}