Api Endpoint

HALOWERK Agent Tools

Runs three detectors over one series and reports what each saw: a robust z score on median and median absolute deviation, a robust seasonal-trend decomposition with a z score on the residual, and an isolation forest over value and step-to-previous. Every score is returned per point, so callers set their own threshold instead of trusting a verdict. The forest draws from a fixed seed: same request, same result. Under three full cycles the seasonal figure is marked as not robust.

Open interactive test console

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/series/anomaly
MIME type
application/json
First seen
2026-10-16T01:50:06.715Z
Last seen
Tags
X402, agent-tools, Analysis, series_anomaly

Payment pricing

x402 payment terms are the authoritative price for calling this endpoint.

Payment option 1
0.004 USDC
Atomic price: 4000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Raw x402 terms
[
  {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "4000",
    "payTo": "0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E"
  }
]

Observed health

Status
Healthy
Latest latency
316 ms
Average latency
460 ms
HTTP status
204
Last checked
Reachability
100% over 10 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": [
        "points"
      ],
      "properties": {
        "points": {
          "type": "array",
          "minItems": 3,
          "maxItems": 5000,
          "description": "Either plain numbers or objects with value and optionally time_unix_s (seconds since 1970), time (ISO 8601) and label. The service caps the whole request body at 256 KB, so long records reach that limit before maxItems."
        },
        "methods": {
          "type": "array",
          "minItems": 1,
          "maxItems": 3,
          "items": {
            "type": "string",
            "enum": [
              "robust_z",
              "stl_residual",
              "isolation_forest"
            ]
          },
          "default": [
            "robust_z",
            "stl_residual",
            "isolation_forest"
          ],
          "description": "Which detectors to run."
        },
        "robust_z_threshold": {
          "type": "number",
          "minimum": 0.5,
          "maximum": 20,
          "default": 3.5,
          "description": "Absolute robust z score at which a point counts as an outlier."
        },
        "season_period": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000,
          "default": 0,
          "description": "Points per season, e.g. 24 for hourly data with a daily rhythm. 0 leaves the seasonal part out."
        },
        "stl_z_threshold": {
          "type": "number",
          "minimum": 0.5,
          "maximum": 20,
          "default": 3.5,
          "description": "Threshold on the robust z score of the residual."
        },
        "contamination": {
          "type": "number",
          "minimum": 0.0001,
          "maximum": 0.5,
          "default": 0.02,
          "description": "Expected share of outliers. Sets where the isolation forest cuts."
        },
        "trees": {
          "type": "integer",
          "minimum": 10,
          "maximum": 300,
          "default": 100,
          "description": "Number of isolation trees."
        },
        "sample_size": {
          "type": "integer",
          "minimum": 8,
          "maximum": 1024,
          "default": 256,
          "description": "Points drawn per tree, capped at the series length."
        },
        "seed": {
          "type": "integer",
          "minimum": 0,
          "maximum": 2147483647,
          "default": 42,
          "description": "Fixed starting value for the forest. Same seed, same answer."
        },
        "min_votes": {
          "type": "integer",
          "minimum": 1,
          "maximum": 3,
          "default": 1,
          "description": "How many detectors must agree before a point is called an anomaly."
        }
      }
    }
  },
  "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": {
            "contamination": {
              "default": 0.02,
              "description": "Expected share of outliers. Sets where the isolation forest cuts.",
              "maximum": 0.5,
              "minimum": 0.0001,
              "type": "number"
            },
            "methods": {
              "default": [
                "robust_z",
                "stl_residual",
                "isolation_forest"
              ],
              "description": "Which detectors to run.",
              "items": {
                "enum": [
                  "robust_z",
                  "stl_residual",
                  "isolation_forest"
                ],
                "type": "string"
              },
              "maxItems": 3,
              "minItems": 1,
              "type": "array"
            },
            "min_votes": {
              "default": 1,
              "description": "How many detectors must agree before a point is called an anomaly.",
              "maximum": 3,
              "minimum": 1,
              "type": "integer"
            },
            "points": {
              "description": "Either plain numbers or objects with value and optionally time_unix_s (seconds since 1970), time (ISO 8601) and label. The service caps the whole request body at 256 KB, so long records reach that limit before maxItems.",
              "maxItems": 5000,
              "minItems": 3,
              "type": "array"
            },
            "robust_z_threshold": {
              "default": 3.5,
              "description": "Absolute robust z score at which a point counts as an outlier.",
              "maximum": 20,
              "minimum": 0.5,
              "type": "number"
            },
            "sample_size": {
              "default": 256,
              "description": "Points drawn per tree, capped at the series length.",
              "maximum": 1024,
              "minimum": 8,
              "type": "integer"
            },
            "season_period": {
              "default": 0,
              "description": "Points per season, e.g. 24 for hourly data with a daily rhythm. 0 leaves the seasonal part out.",
              "maximum": 1000,
              "minimum": 0,
              "type": "integer"
            },
            "seed": {
              "default": 42,
              "description": "Fixed starting value for the forest. Same seed, same answer.",
              "maximum": 2147483647,
              "minimum": 0,
              "type": "integer"
            },
            "stl_z_threshold": {
              "default": 3.5,
              "description": "Threshold on the robust z score of the residual.",
              "maximum": 20,
              "minimum": 0.5,
              "type": "number"
            },
            "trees": {
              "default": 100,
              "description": "Number of isolation trees.",
              "maximum": 300,
              "minimum": 10,
              "type": "integer"
            }
          },
          "required": [
            "points"
          ],
          "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"
}