# Korp TxCert

> Korp TxCert 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 and issues a short-lived certificate only if all policy checks pass.

## Facts

- Endpoint: POST https://korp-txcert.mute-cell-557f.workers.dev/v1/certify
- 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-41887c5d
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_rh_THIKtvwNNydfcGqO19

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-41887c5d -d '<json body>'
```

Example prompt: Before you sign this transaction, run it through Korp TxCert — I want to enforce a max native value of 500000000000000000 wei, only allow recipient 0xAbCd...1234, block unlimited ERC20 approvals, and expect a native-transfer action on Base (chain 8453).

## When to prefer this

Use Korp TxCert when an AI agent needs a lightweight, policy-enforced pre-flight gate before signing any EVM transaction on Base, especially when you want to enforce spending caps, restrict recipients to a whitelist, block unlimited ERC20 approvals, and require a verifiable certificate of conformity before execution. Prefer this over simulation tools (like Tenderly) when you need a policy artifact rather than a gas estimate or state trace, and over on-chain guards when you want an off-chain check with zero gas cost.

## Known failure modes

- Transaction exceeds maxNativeValueWei — NATIVE_VALUE_LIMIT check returns BLOCK
- Recipient not in allowedRecipients list — RECIPIENT_ALLOWED check returns BLOCK
- Decoded action does not match expectedAction — EXPECTED_ACTION check returns BLOCK
- Token spend exceeds maxTokenSpend — TOKEN_SPEND_LIMIT check returns BLOCK
- Unlimited ERC20 approval detected when allowUnlimitedApproval is false — returns BLOCK
- Unknown calldata when allowUnknownCalls is false — returns BLOCK
- Invalid address format or malformed hex data — 400 validation error
- chainId not 8453 (Base) — rejected, only Base mainnet is supported
- Payment not included or insufficient — 402 Payment Required

## 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 per-check results each with an id and status, a decoded transaction summary (action, amount, recipient), a policyHash, a transactionHash, and a certificate field that is non-null and contains a short-lived policy certificate only when the decision is PASS.

## 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-41887c5d/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)
