---
title: "Authorization Payload Linter"
method: POST
path: "/v1/tools/lint_authorization_payload"
tags: ["authorization_payload", "pre_sign_lint", "eip712", "permit2", "eip7702", "eip3009", "erc7730", "signing_policy", "mcp:lint_authorization_payload"]
---

# Authorization Payload Linter

`POST /v1/tools/lint_authorization_payload`

## Request

- Base URL: `https://ainumbers.co`
- URL: `https://ainumbers.co/v1/tools/lint_authorization_payload`
- Auth: none declared

Lints an authorization payload before it is signed, against a signing policy the caller declares. Three declared input modes: EIP-712 typed data as passed to eth_signTypedData_v4, an EIP-7702 authorization tuple, and a bare 32-byte hash about to be signed blind. Classification is string equality of the computed EIP-712 encodeType against the canonical type strings of ERC-2612, the older DAI permit struct, the five recognized Permit2 structs, the three EIP-3009 authorizations, the EntryPoint v0.8 PackedUserOperation and the OpenZeppelin v5 ForwardRequest; a primaryType carrying a known standard's name with a different encodeType is reported as a lookalike, and anything else is reported as unrecognized rather than guessed. Every check carries a stable id and returns FLAGGED, CLEAR or NOT_EVALUATED with the field path, the observed value and the policy value. There are no numeric defaults: every threshold, allowlist, counterparty set, clock reading and chain fact is caller-declared, and a check whose input was not declared reports NOT_EVALUATED and is listed separately, never folded into a CLEAR. Zero chain reads, no signer recovery, no digest computation, and nothing is ever submitted.

**Tool URL:** https://ainumbers.co/chaingraph/art-700-authorization-payload-linter.html
**AP2/Policy Mandate export:** yes

## Request body

- object
  - `mode` 'typed_data' | 'eip7702_tuple' | 'raw_hash', required
  - `typed_data` object
  - `tuple` object
  - `raw_hash` string
  - `signature` union
    - string
    - object
  - `policy` object
  - `display_hints` object

## Response `200`

Successful tool execution result

- object
  - `mode` string, nullable, required
  - `classification` object, required
    - `standard` string
    - `primary_type` string, nullable
    - `encode_type` string, nullable
    - `witness_type` string, nullable
    - `witness_is_named_payment_witness` boolean
    - `lookalike` boolean
    - `entry_count` integer, nullable
    - `payment_method` string
  - `checks` object[], required
    - `id` string, required
    - `status` 'FLAGGED' | 'CLEAR' | 'NOT_EVALUATED', required
    - `severity` string
    - `field_path` string, nullable
    - `observed` unknown
    - `policy` unknown
  - `not_evaluated` string[], required
  - `evaluated_count` integer
  - `flagged_count` integer
  - `policy_conformance` 'CONFORMS' | 'DEVIATES' | 'INDETERMINATE', required
  - `display` unknown[]
    - unknown
  - `handoffs` object
  - `signature_form` object, nullable
  - `warnings` string[]
  - `scope_note` string

---

[API](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite.md) · [All operations](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite/llms.txt) · [OpenAPI document](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite/revisions/b462e4f5bb28?raw)
