# HALOWERK x402werk Policy Check

> HALOWERK x402werk Policy Check is a paid API for AI agents from x402.halowerk.com, paid per call via x402, $0.002/call, status unknown (last checked 2026-09-15).

Stateless rule-based validation of a proposed x402 payment against a caller-supplied spending policy and running totals, returning per-rule verdicts without storing any state.

## Facts

- Endpoint: POST https://x402.halowerk.com/policy/check
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/halowerk-x402werk-policy-check-4f70d57c
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_-zf6dZ76JMDBQLulfkKAN

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 halowerk-x402werk-policy-check-4f70d57c -d '<json body>'
```

Example prompt: Before I pay for this x402 endpoint, check whether the proposed payment of 0.05 USDC on Base to recipient 0xABC...123 is allowed under my policy — max 0.10 per call, max 1.00 per hour, max 5.00 per day, only USDC on base, with 0.30 already spent this hour and 1.20 today.

## When to prefer this

Use this endpoint when your agent needs a stateless, per-call policy gate before authorizing an x402 payment — particularly when you maintain your own spending ledger and only need rule evaluation, not deduplication or on-chain confirmation. Prefer this over HALOWERK's stateful duplicate-check endpoint when you want pure policy validation without side effects. It is ideal for budget-constrained autonomous agents that must enforce multi-dimensional limits (per-call, per-hour, per-day) and asset/chain/recipient allowlists before committing to a payment.

## Known failure modes

- Missing required proposed_payment.amount_units field returns a 400 validation error
- Invalid numeric string patterns in policy or spent_so_far fields cause schema rejection
- Ambiguous chain identifiers may result in nicht_pruefbar verdicts for chain rules
- If allowed_recipients is omitted, recipient is flagged as unverified rather than allowed/blocked
- Conflicting allowed_recipients and blocked_recipients resolved in favor of blocked_recipients
- x402 payment required to call this endpoint; missing or invalid payment returns 402

## How this service works

A stateless rule check for agents that pay for x402 endpoints. You supply the proposed payment, your policy and the amounts already spent this hour and this day; this endpoint keeps no ledger of its own and returns your counters unchanged. Every configured rule — max_per_call, max_per_hour, max_per_day, allowed_chains, allowed_assets, allowed_recipients, blocked_recipients, require_schema — is reported individually as erfuellt, verletzt, nicht_pruefbar or nicht_gesetzt, together with the limit a

## Output

A structured response listing each configured policy rule (max_per_call, max_per_hour, max_per_day, allowed_chains, allowed_assets, allowed_recipients, blocked_recipients, require_schema) with an individual verdict of erfuellt (satisfied), verletzt (violated), nicht_pruefbar (not checkable), or nicht_gesetzt (not configured), along with the configured limit value for each rule and an overall pass/fail decision. The caller's spent_so_far counters are returned unchanged since this endpoint maintains no ledger.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "policy": {
   "type": "object",
   "properties": {
    "max_per_day": {
     "type": "string",
     "pattern": "^[0-9]+(\\.[0-9]+)?$",
     "description": "Largest allowed sum per day, in whole tokens."
    },
    "max_per_call": {
     "type": "string",
     "pattern": "^[0-9]+(\\.[0-9]+)?$",
     "description": "Largest allowed single payment, in whole tokens of the proposed asset, for example \"0.05\"."
    },
    "max_per_hour": {
     "type": "string",
     "pattern": "^[0-9]+(\\.[0-9]+)?$",
     "description": "Largest allowed sum per hour, in whole tokens."
    },
    "allowed_assets": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Token addresses you accept. Omit to allow any."
    },
    "allowed_chains": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Chains you accept, as CAIP-2 or short names. Omit to allow any."
    },
    "require_schema": {
     "type": "boolean",
     "description": "Whether the offer must declare an inputSchema."
    },
    "allowed_recipients": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Recipient addresses you accept. Omit to allow any; the recipient is then flagged as unverified."
    },
    "blocked_recipients": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Recipient addresses you refuse. Beats allowed_recipients on conflict."
    }
   },
   "additionalProperties": false
  },
  "spent_so_far": {
   "type": "object",
   "properties": {
    "day": {
     "type": "string",
     "pattern": "^[0-9]+(\\.[0-9]+)?$",
     "description": "Already spent in the current day, in whole tokens."
    },
    "hour": {
     "type": "string",
     "pattern": "^[0-9]+(\\.[0-9]+)?$",
     "description": "Already spent in the current hour, in whole tokens."
    }
   },
   "additionalProperties": false
  },
  "proposed_payment": {
   "type": "object",
   "required": [
    "amount_units"
   ],
   "properties": {
    "asset": {
     "type": "string",
     "description": "Token contract address, or \"native\" for the chain coin."
    },
    "chain": {
     "type": "string",
     "description": "Chain as CAIP-2 (\"eip155:8453\"), short name (\"base\") or chain id."
    },
    "pay_to": {
     "type": "string",
     "description": "Recipient address of the proposed payment."
    },
    "resource": {
     "type": "string",
    
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/halowerk-x402werk-policy-check-4f70d57c/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.halowerk.com](https://www.zero.xyz/host/x402.halowerk.com/llms.txt)
