# HALOWERK x402werk Receipt Verifier

> HALOWERK x402werk Receipt Verifier is a paid API for AI agents from x402.halowerk.com, paid per call via x402, $0.003/call, status unknown (last checked 2026-09-14).

Verifies a signed x402 payment offer and optional receipt, checking signature validity, field matching, and timestamp plausibility

## Facts

- Endpoint: POST https://x402.halowerk.com/receipt/verify
- Price: $0.003/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/halowerk-x402werk-receipt-verifier-a21539f2
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_IQbyp1WjXdpRTwtAHtQlW

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-receipt-verifier-a21539f2 -d '<json body>'
```

Example prompt: Can you verify this x402 payment offer and receipt — here's the signed offer object with EIP-712 format, the receipt, and the expected payer address 0xABC123 — and tell me if they match and whether the signatures are valid?

## When to prefer this

Use this endpoint when you need to cryptographically verify an x402 payment offer and/or receipt before releasing a paid resource or recording a transaction. It is the right choice when working within the x402 HTTP payment protocol on Base Mainnet with USDC, especially when EIP-712 signed offers and receipts are involved and you need a structured verdict with field-level mismatch details rather than a simple boolean pass/fail.

## Known failure modes

- Missing or malformed offer object returns validation error
- Invalid or unresolvable public key for JWK-based JWS signatures causes nicht_pruefbar verdict
- Receipt timestamp older than max_receipt_age_seconds triggers implausible timestamp flag
- Signature format mismatch between declared format and actual payload structure
- Unrecognized signature scheme returns nicht_pruefbar verdict

## How this service works

Cryptographic verification of the offer-receipt extension of x402. Accepts a signed offer in eip712, jws or eip191 form — either bundled as {format, payload, signature} or as payload plus a separate signature — and an optional signed receipt. Recovers the signer, compares it with the payTo of the offer, compares receipt and offer field by field and names every divergence with the value on each side, checks whether the offer has expired and whether the receipt timestamps are plausible against sta

## Output

Returns a verdict enum ('gueltig' = valid, 'abweichung' = mismatch, 'ungueltig' = invalid, 'nicht_pruefbar' = cannot be checked), plus boolean flags for offer signature validity, receipt signature validity, receipt-offer match, signer-payTo match, and timestamp plausibility, along with a list of any field mismatches and the reasons behind the verdict.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "offer": {
   "type": "object",
   "description": "The signed offer as {format, payload, signature}, or the bare offer payload with version, resourceUrl, scheme, network, asset, payTo, amount and validUntil — then pass signature and format separately."
  },
  "format": {
   "enum": [
    "eip712",
    "jws",
    "eip191"
   ],
   "type": "string",
   "description": "Signature method, if the offer object does not name it. eip712 is what the offer-receipt extension produces."
  },
  "receipt": {
   "type": "object",
   "description": "Optional signed receipt as {format, payload, signature}, or the bare receipt payload with version, network, resourceUrl, payer, issuedAt and transaction."
  },
  "signature": {
   "type": "string",
   "maxLength": 8192,
   "description": "Signature of the offer, if it is not inside the offer object."
  },
  "public_key": {
   "type": "object",
   "description": "Public key as a JWK, required for jws signatures whose key identifier cannot be resolved from the token itself."
  },
  "expected_payer": {
   "type": "string",
   "pattern": "^0x[0-9a-fA-F]{40}$",
   "description": "Address you expected to have paid. When given, the receipt payer is compared against it."
  },
  "receipt_format": {
   "enum": [
    "eip712",
    "jws",
    "eip191"
   ],
   "type": "string",
   "description": "Signature method of the receipt, if the receipt object does not name it."
  },
  "receipt_signature": {
   "type": "string",
   "maxLength": 8192,
   "description": "Signature of the receipt, if it is not inside the receipt object."
  },
  "max_receipt_age_seconds": {
   "type": "integer",
   "default": 3600,
   "maximum": 2592000,
   "minimum": 1,
   "description": "How old a receipt may be before its timestamps are called implausible."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/halowerk-x402werk-receipt-verifier-a21539f2/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)
