# Korp TxCert Transaction Policy Checker

> Korp TxCert Transaction Policy Checker is a paid API for AI agents from korp-txcert.mute-cell-557f.workers.dev, paid per call via x402, $0.01/call, status unknown (last checked 2026-09-18).

Validates an unsigned EVM transaction against a caller-defined policy (spending limits, recipient allowlists, ERC20 approval rules) and issues a short-lived certificate only on PASS

## Facts

- Endpoint: POST https://korp-txcert.mute-cell-557f.workers.dev/v1/tx/check
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-18
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/korp-txcert-transaction-policy-checker-a585ca8a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_h6n7MkNI78dTeh_GtIkem

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 korp-txcert-transaction-policy-checker-a585ca8a -d '<json body>'
```

Example prompt: Before you sign this transaction, run it through Korp TxCert to check it against my policy — the sender is 0xAbCd...1234, it's a native-transfer on Base (chainId 8453), the max native value is 500000000000000000 wei, allowed recipients are [0xRecipient1...], and unlimited approvals are not allowed.

## When to prefer this

Use Korp TxCert when you need a lightweight, policy-enforced pre-signing gate for AI agent transactions on Base (chainId 8453). It is ideal when you want to enforce strict spending limits, recipient allowlists, or ERC20 approval caps before an agent signs — and need a cryptographic certificate as proof of policy conformity. Prefer this over generic simulation tools when the goal is policy enforcement (not outcome prediction) and you want a structured PASS/BLOCK decision with per-check audit trail.

## Known failure modes

- Transaction blocked due to native value exceeding maxNativeValueWei — decision BLOCK, certificate null
- Recipient not in allowedRecipients list — RECIPIENT_ALLOWED check fails
- Unlimited ERC20 approval detected when allowUnlimitedApproval is false — check blocked
- Unexpected action type doesn't match expectedAction policy — EXPECTED_ACTION check fails
- Malformed address format (not matching 0x[40 hex chars]) — request rejected with validation error
- chainId not 8453 (Base) — CHAIN_ALLOWED check fails
- calldata exceeds 8194 hex chars limit — request rejected
- Payment not included or insufficient USDC — 402 Payment Required response

## How this service works

Check an unsigned EVM transaction before an AI agent signs it. Enforces spending limits, recipient restrictions, ERC20 approval rules, unlimited approval protection, and calldata policy. Only PASS receives a short-lived policy certificate. This is policy conformity, not simulation or a safety guarantee.

## Output

Returns a JSON object with a 'decision' field (PASS or BLOCK), an array of individual check results each with an ID and status, the decoded transaction action and amount, a policy hash, a transaction hash, and a short-lived 'certificate' string (non-null only on PASS) that can be used to authorize signing.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "from": {
   "type": "string",
   "pattern": "^0x[0-9a-fA-F]{40}$"
  },
  "policy": {
   "type": "object",
   "required": [
    "expectedAction",
    "allowedRecipients",
    "allowedSpenders",
    "maxNativeValueWei",
    "maxTokenSpend",
    "allowUnlimitedApproval",
    "allowUnknownCalls"
   ],
   "properties": {
    "maxTokenSpend": {
     "type": "array",
     "items": {
      "type": "object",
      "required": [
       "token",
       "amount"
      ],
      "properties": {
       "token": {
        "type": "string",
        "pattern": "^0x[0-9a-fA-F]{40}$"
       },
       "amount": {
        "type": "string",
        "pattern": "^(0|[1-9][0-9]*)$",
        "maxLength": 78
       }
      },
      "additionalProperties": false
     },
     "maxItems": 100
    },
    "expectedAction": {
     "enum": [
      "native-transfer",
      "transfer",
      "transferFrom",
      "approve",
      "swap",
      "unknown"
     ],
     "type": "string"
    },
    "allowedSpenders": {
     "type": "array",
     "items": {
      "type": "string",
      "pattern": "^0x[0-9a-fA-F]{40}$"
     },
     "maxItems": 100
    },
    "allowUnknownCalls": {
     "type": "boolean"
    },
    "allowedRecipients": {
     "type": "array",
     "items": {
      "type": "string",
      "pattern": "^0x[0-9a-fA-F]{40}$"
     },
     "maxItems": 100
    },
    "maxNativeValueWei": {
     "type": "string",
     "pattern": "^(0|[1-9][0-9]*)$",
     "maxLength": 78
    },
    "allowUnlimitedApproval": {
     "type": "boolean"
    }
   },
   "additionalProperties": false
  },
  "chainId": {
   "type": "number",
   "const": 8453
  },
  "transaction": {
   "type": "object",
   "required": [
    "to",
    "data",
    "value"
   ],
   "properties": {
    "to": {
     "type": "string",
     "pattern": "^0x[0-9a-fA-F]{40}$"
    },
    "data": {
     "type": "string",
     "pattern": "^0x(?:[0-9a-fA-F]{2})*$",
     "maxLength": 8194
    },
    "nonce": {
     "type": "string",
     "pattern": "^(0|[1-9][0-9]*)$",
     "maxLength": 78
    },
    "value": {
     "type": "string",
     "pattern": "^(0|[1-9][0-9]*)$",
     "maxLength": 78
    }
   },
   "additionalProperties": false
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "checks": [
   {
    "id": "CHAIN_ALLOWED",
    "status": "PASS"
   },
   {
    "id": "SENDER_NOT_BURN",
    "status": "PASS"
   },
   {
    "id": "TARGET_NOT_BURN",
    "status": "PASS"
   },
   {
    "id": "NATIVE_VALUE_LIMIT",
    "status": "BLOCK"
   },
   {
    "id": "RECIPIENT_ALLOWED",
    "status": "PASS"
   },
   {
    "id": "EXPECTED_ACTION",
    "status": "PASS"
   }
  ],
  "chainId": 8453,
  "decoded": {
   "action": "native-transfer",
   "amount": "1001",
   "recipient": "0x3333333333333333333333333333333333333333"
  },
  "version": "1",
  "decision": "BLOCK",
  "policyHash": "0x76c972b65aef2890ac0f1d0e1161b899b6e6cef2ebb56d90e16c3e1dc04ac8e0",
  "certificate": null,
  "transactionHash": "0xa0d43ab25ccb83ae60f29efb115f48c9976bd0ed4ba54b25e9f0bfd7f67eac93"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/korp-txcert-transaction-policy-checker-a585ca8a/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from korp-txcert.mute-cell-557f.workers.dev](https://www.zero.xyz/host/korp-txcert.mute-cell-557f.workers.dev/llms.txt)
