# HALOWERK x402 Payment Policy Checker

> HALOWERK x402 Payment Policy Checker is a paid API for AI agents from x402.netzhandwerker.de, paid per call via x402, $0.002/call, status unknown (last checked 2026-09-15).

Validates a proposed x402 micropayment against configurable policy rules (spending limits, allowed assets/chains, recipient filters) before executing it

## Facts

- Endpoint: POST https://x402.netzhandwerker.de/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-x402-payment-policy-checker-b8a1b663
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_2_JmtVZDR6PEJUVQtqJ_M

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-x402-payment-policy-checker-b8a1b663 -d '<json body>'
```

Example prompt: Before you pay for that API call, check if the proposed payment of 0.002 USDC on Base to recipient 0xAbC...123 complies with my policy — max $0.05 per call, max $1.00 per day, and I've already spent $0.30 today.

## When to prefer this

Use this endpoint when an AI agent needs to autonomously make x402 micropayments and requires a pre-flight policy gate to enforce spending controls, asset whitelisting, chain restrictions, or recipient filtering before committing a payment. It is especially valuable for agentic workflows where the agent has a budget ceiling and must avoid overspending across calls. Prefer this over manual limit-checking logic when you need a stateless, structured policy evaluation that accounts for accumulated hourly and daily spend.

## Known failure modes

- Payment amount exceeds max_per_call threshold — returns policy violation with the exceeded limit
- Hourly spend plus proposed amount exceeds max_per_hour — returns budget exceeded error
- Daily spend cap reached — returns daily limit exhausted response
- Recipient address is in blocked_recipients list — returns recipient blocked error
- Proposed asset token address not in allowed_assets — returns asset not permitted error
- Chain not in allowed_chains — returns chain not permitted error
- Missing required amount_units in proposed_payment — returns schema validation error
- Malformed numeric strings in policy fields — returns pattern validation error

## How this service works

HALOWERK x402werk — bezahlte Endpunkte nach x402. Preise in USDC auf Base Mainnet.

## Output

Returns a validation outcome indicating whether the proposed payment passes or fails the configured policy, including which specific rule was violated (e.g. per-call limit exceeded, recipient blocked, asset not allowed, daily budget exhausted), and flags the recipient as unverified if no allowed_recipients list was provided.

## 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-x402-payment-policy-checker-b8a1b663/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.netzhandwerker.de](https://www.zero.xyz/host/x402.netzhandwerker.de/llms.txt)
