Zum Inhalt
HALOWERK

Agent Tools

traffic / classify

Classifies supplied access logs when an agent needs to distinguish people, tools, crawlers and harvesters. Send timestamped request records; optional IP and user-agent fields improve grouping. Returns masked client groups, evidence-weighted labels, cadence, path, status, method and session signals. This is an estimate, not proof of identity; records are not stored and raw IP addresses are not returned.

POST https://tools.halowerk.com/v1/traffic/classify

Eingaben

Felder des veröffentlichten Eingabeschemas
FeldTypPflichtBeschreibung
requestsarrayJaAccess records. Each needs path and either time_unix_s or time. The service caps the whole request body at 256 KB, so long records reach that limit before maxItems.
session_gap_sintegerNeinSilence after which the next request starts a new session.
group_bystringNeinHow records are grouped into clients.
max_clientsintegerNeinHow many clients are reported, largest first.
min_requests_per_clientintegerNeinClients below this many requests are skipped and counted in clients_skipped.
Vollständiges Eingabeschema anzeigen
{
  "type": "object",
  "required": [
    "requests"
  ],
  "properties": {
    "requests": {
      "type": "array",
      "minItems": 1,
      "maxItems": 2000,
      "description": "Access records. Each needs path and either time_unix_s or time. The service caps the whole request body at 256 KB, so long records reach that limit before maxItems.",
      "items": {
        "type": "object",
        "required": [
          "path"
        ],
        "properties": {
          "time_unix_s": {
            "type": "number",
            "description": "Request time as Unix seconds."
          },
          "time": {
            "type": "string",
            "description": "Request time as an ISO 8601 timestamp."
          },
          "path": {
            "type": "string",
            "minLength": 1,
            "description": "Requested path, including a query string if relevant."
          },
          "method": {
            "type": "string",
            "description": "HTTP method such as GET or POST."
          },
          "status": {
            "type": "integer",
            "minimum": 100,
            "maximum": 599,
            "description": "HTTP response status."
          },
          "user_agent": {
            "type": "string",
            "description": "User-Agent header value."
          },
          "ip": {
            "type": "string",
            "description": "Client IPv4 or IPv6 address; output is masked."
          },
          "bytes": {
            "type": "integer",
            "minimum": 0,
            "description": "Response body size in bytes."
          },
          "referer": {
            "type": "string",
            "description": "Referer header value."
          }
        },
        "additionalProperties": false,
        "anyOf": [
          {
            "required": [
              "time_unix_s"
            ]
          },
          {
            "required": [
              "time"
            ]
          }
        ],
        "examples": [
          {
            "time_unix_s": 1786000000,
            "path": "/products/100",
            "method": "GET",
            "status": 200,
            "user_agent": "python-requests/2.32.3",
            "ip": "203.0.113.44"
          }
        ]
      }
    },
    "session_gap_s": {
      "type": "integer",
      "minimum": 60,
      "maximum": 86400,
      "default": 1800,
      "description": "Silence after which the next request starts a new session."
    },
    "group_by": {
      "type": "string",
      "enum": [
        "ip",
        "user_agent",
        "ip_user_agent",
        "none"
      ],
      "default": "ip_user_agent",
      "description": "How records are grouped into clients."
    },
    "max_clients": {
      "type": "integer",
      "minimum": 1,
      "maximum": 500,
      "default": 100,
      "description": "How many clients are reported, largest first."
    },
    "min_requests_per_client": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000,
      "default": 2,
      "description": "Clients below this many requests are skipped and counted in clients_skipped."
    }
  },
  "examples": [
    {
      "requests": [
        {
          "time_unix_s": 1786000000,
          "path": "/products/100",
          "method": "GET",
          "status": 200,
          "user_agent": "python-requests/2.32.3",
          "ip": "203.0.113.44"
        }
      ],
      "group_by": "ip_user_agent"
    }
  ]
}

Originalschema öffnen

Veröffentlichtes Eingabebeispiel

{
  "requests": [
    {
      "time_unix_s": 1786000000,
      "path": "/products/100",
      "method": "GET",
      "status": 200,
      "user_agent": "python-requests/2.32.3",
      "ip": "203.0.113.44"
    },
    {
      "time_unix_s": 1786000060,
      "path": "/products/101",
      "method": "GET",
      "status": 200,
      "user_agent": "python-requests/2.32.3",
      "ip": "203.0.113.44"
    },
    {
      "time_unix_s": 1786000120,
      "path": "/products/102",
      "method": "GET",
      "status": 200,
      "user_agent": "python-requests/2.32.3",
      "ip": "203.0.113.44"
    },
    {
      "time_unix_s": 1786000180,
      "path": "/products/103",
      "method": "GET",
      "status": 404,
      "user_agent": "python-requests/2.32.3",
      "ip": "203.0.113.44"
    },
    {
      "time_unix_s": 1786000240,
      "path": "/products/104",
      "method": "GET",
      "status": 200,
      "user_agent": "python-requests/2.32.3",
      "ip": "203.0.113.44"
    }
  ],
  "group_by": "ip_user_agent"
}

Ergebnis & Dokumentation

Maschinenlesbare Dokumentation dieses Hubs

Quelle dieser Seite: der veröffentlichte HALOWERK-Katalog. Stand: 2026-11-01, 15:19 UTC.

Weitere Endpunkte dieses Hubs

Alle Endpunkte dieses Hubs →