# Netzhandwerker Cohort Retention Analysis

> Netzhandwerker Cohort Retention Analysis is a paid API for AI agents from tools.halowerk.com, paid per call via x402, $0.002/call, status unknown (last checked 2026-10-12).

Builds a cohort retention table from raw events, grouping users by their first-event period and tracking re-engagement across subsequent periods, with optional value accumulation metrics.

## Facts

- Endpoint: POST https://tools.halowerk.com/v1/cohort/retention?utm_source=zero.xyz
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-12
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/netzhandwerker-cohort-retention-analysis-5747a7a7
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_kjQjT4_sHXbQrv1MszQfB

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability netzhandwerker-cohort-retention-analysis-5747a7a7 -d '<json body>'
```

Example prompt: Build a weekly cohort retention table from these events for the past 12 weeks — users should only enter a cohort when they trigger a 'signup' event, and count as retained only when they trigger a 'purchase' event. Week starts on Monday.

## When to prefer this

Choose this endpoint when you have raw event logs and want server-side cohort grouping and retention curve computation without storing data or implementing period-boundary logic yourself. It is especially useful when you need real calendar periods (day/week/month) with correct timezone alignment, want to separate activation events from retention events, or need cumulative value metrics alongside user counts. Prefer it over spreadsheet or client-side solutions when event volume is up to 4,000 records and you want a stateless, pay-per-call computation.

## Known failure modes

- Events missing user_id or timestamp fields return a validation error
- Unknown field names in event objects are rejected rather than silently ignored
- Request body exceeding 256 KB is rejected regardless of item count
- Invalid timezone_offset_s outside [-50400, 50400] range returns an error
- Periods value exceeding 52 causes a validation error
- activation_type or retention_types referencing event types not present in the data return empty cohorts without error

## How this service works

Builds the cohort table from the events you pass: users grouped by the period of their first event, counted again in each following period. Returns the table per cohort, a retention curve across all cohorts, and, where events carry a value, cumulative value and value per user. The curve counts only cohorts old enough for a given period, so a young cohort is not scored as churn. Day, week and month are real calendar periods. Nothing is fetched, nothing is stored.

## Output

Returns a per-cohort retention table showing user counts in each subsequent period, a blended retention curve across all cohorts (excluding cohorts too young to score a given period), and — when events carry a value field — cumulative value and value-per-user metrics per cohort per period.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "events": {
   "type": "array",
   "maxItems": 4000,
   "minItems": 1,
   "description": "Each event needs user_id and a timestamp (time_unix_s in seconds since 1970, or time as ISO 8601). Optional: type and value. Any other field name is rejected rather than guessed. The service caps the whole request body at 256 KB, so long records reach that limit before maxItems."
  },
  "period": {
   "enum": [
    "day",
    "week",
    "month"
   ],
   "type": "string",
   "default": "week"
  },
  "periods": {
   "type": "integer",
   "default": 12,
   "maximum": 52,
   "minimum": 1,
   "description": "How many periods the table runs, period 0 being the entry period."
  },
  "week_start": {
   "enum": [
    "monday",
    "sunday"
   ],
   "type": "string",
   "default": "monday"
  },
  "activation_type": {
   "type": "string",
   "maxLength": 120,
   "description": "If set, only events of this type put a user into a cohort. Without it the first event of any type counts."
  },
  "retention_types": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "maxItems": 50,
   "description": "If set, only events of these types count as being active. Without it every event counts."
  },
  "timezone_offset_s": {
   "type": "integer",
   "default": 0,
   "maximum": 50400,
   "minimum": -50400,
   "description": "Offset from UTC in seconds used to place period boundaries."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/netzhandwerker-cohort-retention-analysis-5747a7a7/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from tools.halowerk.com](https://www.zero.xyz/host/tools.halowerk.com/llms.txt)
