{
  "openapi": "3.1.0",
  "info": {
    "title": "10x402",
    "version": "0.1.0",
    "summary": "x402 conformance linting, sold per call over x402",
    "description": "10x402 finds conformance blockers between a working 402, discovery and payment. Its 79-check catalogue covers the HTTP response, v1 body, v2 PAYMENT-REQUIRED header, dual-stack consistency, Bazaar discovery metadata and report safeguards. Every finding includes a specific fix. Paid per call over x402 itself, in USDC on Base; there is no account and no API key — the payment is the auth.",
    "contact": {
      "email": "support@lemon-agent.dev"
    }
  },
  "servers": [
    {
      "url": "https://10x402.com"
    }
  ],
  "paths": {
    "/check": {
      "get": {
        "operationId": "check",
        "summary": "Start here: service info, the full check catalogue with sources, prices and grades. Free.",
        "description": "Free. Call this before paying for anything.",
        "responses": {
          "200": {
            "description": "service info, prices, the grade ladder and the full check catalogue",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/lint": {
      "post": {
        "operationId": "lint",
        "summary": "Find conformance blockers to x402 indexing and payment on a live endpoint ($0.25)",
        "description": "Sends ONE unauthenticated request to the URL you name and lints the response: HTTP status, the v1 body envelope, the v2 PAYMENT-REQUIRED header envelope, dual-stack consistency, and CDP Bazaar discovery requirements. Returns a grade and a specific fix for each finding. It identifies technical blockers; it does not verify a listing or payment.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "the https URL of the paid endpoint to lint"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST",
                      "GET"
                    ],
                    "default": "POST"
                  }
                }
              },
              "example": {
                "url": "https://toolshed.lemon-agent.dev/convert/md-html",
                "method": "POST"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "the lint report",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "grade",
                    "summary",
                    "findings",
                    "checks_run"
                  ],
                  "properties": {
                    "grade": {
                      "type": "string",
                      "enum": [
                        "A",
                        "B",
                        "C",
                        "D",
                        "F"
                      ],
                      "description": "CAN THIS ENDPOINT BE PAID, and only that. Computed from payment-regime findings; discovery is reported separately as summary.bazaar_ready. A: zero payment-regime errors and zero payment-regime warnings; B: zero payment-regime errors, one or two warnings; C: zero payment-regime errors, three or more warnings; D: one or more payment-regime errors, none of them core; F: any core error — the envelope is not usable as published"
                    },
                    "summary": {
                      "type": "object",
                      "properties": {
                        "versions_detected": {
                          "type": "array",
                          "items": {
                            "type": "integer",
                            "enum": [
                              1,
                              2
                            ]
                          }
                        },
                        "payTo": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "network": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "price": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "bazaar_ready": {
                          "oneOf": [
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "string",
                              "enum": [
                                "n/a"
                              ]
                            }
                          ],
                          "description": "CAN THIS ENDPOINT BE FOUND — the second verdict, from bazaar-regime errors. \"n/a\" for a v1-only endpoint, whose CDP requirements are a v2 shape. Grade A with bazaar_ready false is a real and common answer: payable, and not catalogued."
                        },
                        "blockers": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "enum": [
                              "V2_HEADER_PRESENT",
                              "V2_NETWORK_SUPPORTED",
                              "V2_AMOUNT_MINIMUM",
                              "V2_INDEX_AMOUNT",
                              "V2_INDEX_TIMEOUT",
                              "V2_INDEX_ASSET",
                              "V2_INDEX_PAYTO",
                              "V2_RESOURCE_URL",
                              "V2_RESOURCE_METHOD",
                              "V2_RESOURCE_DESCRIPTION",
                              "V2_SERVICE_NAME",
                              "V2_TAGS",
                              "V2_BAZAAR_PRESENT",
                              "V2_BAZAAR_INFO",
                              "V2_BAZAAR_SCHEMA",
                              "V2_BAZAAR_SCHEMA_CONTENT",
                              "V2_BAZAAR_INFO_VALIDATES",
                              "V2_BAZAAR_INPUT",
                              "V2_BAZAAR_INPUT_TYPE",
                              "V2_BAZAAR_INPUT_METHOD",
                              "V2_BAZAAR_OUTPUT_TYPE",
                              "V2_BAZAAR_OUTPUT_EXAMPLE",
                              "V1_OUTPUT_SCHEMA",
                              "V1_DISCOVERABLE"
                            ]
                          },
                          "description": "the check codes standing between this resource and an index entry"
                        },
                        "partial": {
                          "type": "string",
                          "description": "present when the response was not a 402 and carried no envelope, so the envelope checks could not run"
                        }
                      }
                    },
                    "findings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "severity",
                          "code",
                          "message",
                          "fix"
                        ],
                        "properties": {
                          "severity": {
                            "type": "string",
                            "enum": [
                              "error",
                              "warn",
                              "info"
                            ]
                          },
                          "code": {
                            "type": "string",
                            "enum": [
                              "HTTP_STATUS_402",
                              "HTTP_FREE_TIER_200",
                              "HTTP_SERVER_ERROR",
                              "HTTP_REDIRECT",
                              "HTTP_CONTENT_TYPE_JSON",
                              "ENVELOPE_PRESENT",
                              "V2_HEADER_PRESENT",
                              "V2_B64_URLSAFE",
                              "V2_B64_DECODE",
                              "V2_JSON",
                              "V2_VERSION",
                              "V2_ACCEPTS_NONEMPTY",
                              "V2_SCHEME",
                              "V2_SCHEME_KNOWN",
                              "V2_NETWORK_CAIP2",
                              "V2_NETWORK_CAIP2_STYLE",
                              "V2_NAMESPACE_KNOWN",
                              "V2_NETWORK_SUPPORTED",
                              "V2_AMOUNT",
                              "V2_AMOUNT_ATOMIC",
                              "V2_AMOUNT_MINIMUM",
                              "V2_INDEX_AMOUNT",
                              "V2_INDEX_TIMEOUT",
                              "V2_INDEX_ASSET",
                              "V2_INDEX_PAYTO",
                              "V2_PAYTO",
                              "V2_ASSET",
                              "V2_MAX_TIMEOUT",
                              "V2_EXTRA_EIP712",
                              "V2_ACCEPTS_V1_FIELDS",
                              "V2_RESOURCE_OBJECT",
                              "V2_RESOURCE_URL_PARSES",
                              "V2_RESOURCE_URL",
                              "V2_RESOURCE_METHOD",
                              "V2_RESOURCE_DESCRIPTION",
                              "V2_RESOURCE_MIMETYPE",
                              "V2_RESOURCE_URL_MATCHES",
                              "V2_SERVICE_NAME",
                              "V2_TAGS",
                              "V2_BAZAAR_PRESENT",
                              "V2_BAZAAR_INFO",
                              "V2_BAZAAR_SCHEMA",
                              "V2_BAZAAR_SCHEMA_CONTENT",
                              "V2_BAZAAR_INFO_VALIDATES",
                              "V2_BAZAAR_INPUT",
                              "V2_BAZAAR_INPUT_TYPE",
                              "V2_BAZAAR_INPUT_METHOD",
                              "V2_BAZAAR_OUTPUT_TYPE",
                              "V2_BAZAAR_OUTPUT_EXAMPLE",
                              "V1_ABSENT",
                              "V1_BODY_NOT_ENVELOPE",
                              "V1_BODY_PRESENT",
                              "V1_BODY_JSON",
                              "V1_VERSION",
                              "V1_ACCEPTS_NONEMPTY",
                              "V1_SCHEME",
                              "V1_SCHEME_KNOWN",
                              "V1_MAX_AMOUNT_REQUIRED",
                              "V1_AMOUNT_ATOMIC",
                              "V1_NETWORK_NAME",
                              "V1_NETWORK_KNOWN",
                              "V1_RESOURCE_STRING",
                              "V1_PAYTO",
                              "V1_ASSET",
                              "V1_MIMETYPE",
                              "V1_DESCRIPTION",
                              "V1_MAX_TIMEOUT",
                              "V1_EXTRA_EIP712",
                              "V1_OUTPUT_SCHEMA",
                              "V1_DISCOVERABLE",
                              "DUAL_PAYTO",
                              "DUAL_PRICE",
                              "DUAL_NETWORK",
                              "DUAL_ASSET",
                              "DUAL_RESOURCE",
                              "VERSION_HEADER_SAYS_V1",
                              "VERSION_BODY_SAYS_V2",
                              "ACCEPTS_TRUNCATED",
                              "FINDINGS_TRUNCATED"
                            ]
                          },
                          "message": {
                            "type": "string",
                            "description": "what is wrong, in this envelope"
                          },
                          "fix": {
                            "type": "string",
                            "description": "exactly how to fix it"
                          },
                          "core": {
                            "type": "boolean",
                            "description": "whether THIS finding makes the envelope unusable as published. Resolved per finding rather than per check: HTTP_STATUS_402 is core on a 401 and not on a 405, where the linter's own choice of verb is as likely an explanation."
                          }
                        }
                      }
                    },
                    "checks_run": {
                      "type": "integer",
                      "description": "how many checks APPLIED. A v1-only endpoint legitimately skips every v2 check, so this is the denominator a caller needs before comparing two reports."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "the request could not be linted. Nothing is charged for a call that was not served.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "fix": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the ordinary answer to an unauthenticated call, and NOT an error. The body is the x402 v1 envelope; the PAYMENT-REQUIRED response header carries the v2 envelope as standard base64.",
            "headers": {
              "PAYMENT-REQUIRED": {
                "schema": {
                  "type": "string"
                },
                "description": "the x402 v2 envelope, standard base64"
              }
            }
          },
          "413": {
            "description": "the request body is larger than the limit"
          },
          "429": {
            "description": "the daily ceiling for this caller, or a deployment with no receiving address"
          }
        }
      }
    },
    "/lint/one": {
      "post": {
        "operationId": "lint_one",
        "summary": "Run ONE named check against a live endpoint ($0.02)",
        "description": "The same outbound probe as /lint, reported for exactly one check you name. For settling a single question — \"is my v2 header base64url\", \"does my bazaar info validate against its own schema\" — without buying the whole catalogue. The answer says whether the check PASSED, and when the check did not apply to this response it says that instead of quietly passing. GET /check lists every check id, and publishes the batch arithmetic — so you can work out where the full report becomes the cheaper buy before paying for any of it.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "url",
                  "check"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "the https URL of the paid endpoint to lint"
                  },
                  "method": {
                    "type": "string",
                    "enum": [
                      "POST",
                      "GET"
                    ],
                    "default": "POST"
                  },
                  "check": {
                    "type": "string",
                    "enum": [
                      "HTTP_STATUS_402",
                      "HTTP_FREE_TIER_200",
                      "HTTP_SERVER_ERROR",
                      "HTTP_REDIRECT",
                      "HTTP_CONTENT_TYPE_JSON",
                      "ENVELOPE_PRESENT",
                      "V2_HEADER_PRESENT",
                      "V2_B64_URLSAFE",
                      "V2_B64_DECODE",
                      "V2_JSON",
                      "V2_VERSION",
                      "V2_ACCEPTS_NONEMPTY",
                      "V2_SCHEME",
                      "V2_SCHEME_KNOWN",
                      "V2_NETWORK_CAIP2",
                      "V2_NETWORK_CAIP2_STYLE",
                      "V2_NAMESPACE_KNOWN",
                      "V2_NETWORK_SUPPORTED",
                      "V2_AMOUNT",
                      "V2_AMOUNT_ATOMIC",
                      "V2_AMOUNT_MINIMUM",
                      "V2_INDEX_AMOUNT",
                      "V2_INDEX_TIMEOUT",
                      "V2_INDEX_ASSET",
                      "V2_INDEX_PAYTO",
                      "V2_PAYTO",
                      "V2_ASSET",
                      "V2_MAX_TIMEOUT",
                      "V2_EXTRA_EIP712",
                      "V2_ACCEPTS_V1_FIELDS",
                      "V2_RESOURCE_OBJECT",
                      "V2_RESOURCE_URL_PARSES",
                      "V2_RESOURCE_URL",
                      "V2_RESOURCE_METHOD",
                      "V2_RESOURCE_DESCRIPTION",
                      "V2_RESOURCE_MIMETYPE",
                      "V2_RESOURCE_URL_MATCHES",
                      "V2_SERVICE_NAME",
                      "V2_TAGS",
                      "V2_BAZAAR_PRESENT",
                      "V2_BAZAAR_INFO",
                      "V2_BAZAAR_SCHEMA",
                      "V2_BAZAAR_SCHEMA_CONTENT",
                      "V2_BAZAAR_INFO_VALIDATES",
                      "V2_BAZAAR_INPUT",
                      "V2_BAZAAR_INPUT_TYPE",
                      "V2_BAZAAR_INPUT_METHOD",
                      "V2_BAZAAR_OUTPUT_TYPE",
                      "V2_BAZAAR_OUTPUT_EXAMPLE",
                      "V1_ABSENT",
                      "V1_BODY_NOT_ENVELOPE",
                      "V1_BODY_PRESENT",
                      "V1_BODY_JSON",
                      "V1_VERSION",
                      "V1_ACCEPTS_NONEMPTY",
                      "V1_SCHEME",
                      "V1_SCHEME_KNOWN",
                      "V1_MAX_AMOUNT_REQUIRED",
                      "V1_AMOUNT_ATOMIC",
                      "V1_NETWORK_NAME",
                      "V1_NETWORK_KNOWN",
                      "V1_RESOURCE_STRING",
                      "V1_PAYTO",
                      "V1_ASSET",
                      "V1_MIMETYPE",
                      "V1_DESCRIPTION",
                      "V1_MAX_TIMEOUT",
                      "V1_EXTRA_EIP712",
                      "V1_OUTPUT_SCHEMA",
                      "V1_DISCOVERABLE",
                      "DUAL_PAYTO",
                      "DUAL_PRICE",
                      "DUAL_NETWORK",
                      "DUAL_ASSET",
                      "DUAL_RESOURCE",
                      "VERSION_HEADER_SAYS_V1",
                      "VERSION_BODY_SAYS_V2",
                      "ACCEPTS_TRUNCATED",
                      "FINDINGS_TRUNCATED"
                    ],
                    "description": "exactly one check id, from the catalogue GET /check publishes. Unknown or missing is a 400 that lints nothing and charges nothing."
                  }
                }
              },
              "example": {
                "url": "https://toolshed.lemon-agent.dev/convert/md-html",
                "method": "POST",
                "check": "V2_B64_URLSAFE"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "the single-check answer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "check",
                    "applied",
                    "passed",
                    "finding",
                    "regime",
                    "sources",
                    "summary",
                    "checks_run"
                  ],
                  "properties": {
                    "check": {
                      "type": "string",
                      "enum": [
                        "HTTP_STATUS_402",
                        "HTTP_FREE_TIER_200",
                        "HTTP_SERVER_ERROR",
                        "HTTP_REDIRECT",
                        "HTTP_CONTENT_TYPE_JSON",
                        "ENVELOPE_PRESENT",
                        "V2_HEADER_PRESENT",
                        "V2_B64_URLSAFE",
                        "V2_B64_DECODE",
                        "V2_JSON",
                        "V2_VERSION",
                        "V2_ACCEPTS_NONEMPTY",
                        "V2_SCHEME",
                        "V2_SCHEME_KNOWN",
                        "V2_NETWORK_CAIP2",
                        "V2_NETWORK_CAIP2_STYLE",
                        "V2_NAMESPACE_KNOWN",
                        "V2_NETWORK_SUPPORTED",
                        "V2_AMOUNT",
                        "V2_AMOUNT_ATOMIC",
                        "V2_AMOUNT_MINIMUM",
                        "V2_INDEX_AMOUNT",
                        "V2_INDEX_TIMEOUT",
                        "V2_INDEX_ASSET",
                        "V2_INDEX_PAYTO",
                        "V2_PAYTO",
                        "V2_ASSET",
                        "V2_MAX_TIMEOUT",
                        "V2_EXTRA_EIP712",
                        "V2_ACCEPTS_V1_FIELDS",
                        "V2_RESOURCE_OBJECT",
                        "V2_RESOURCE_URL_PARSES",
                        "V2_RESOURCE_URL",
                        "V2_RESOURCE_METHOD",
                        "V2_RESOURCE_DESCRIPTION",
                        "V2_RESOURCE_MIMETYPE",
                        "V2_RESOURCE_URL_MATCHES",
                        "V2_SERVICE_NAME",
                        "V2_TAGS",
                        "V2_BAZAAR_PRESENT",
                        "V2_BAZAAR_INFO",
                        "V2_BAZAAR_SCHEMA",
                        "V2_BAZAAR_SCHEMA_CONTENT",
                        "V2_BAZAAR_INFO_VALIDATES",
                        "V2_BAZAAR_INPUT",
                        "V2_BAZAAR_INPUT_TYPE",
                        "V2_BAZAAR_INPUT_METHOD",
                        "V2_BAZAAR_OUTPUT_TYPE",
                        "V2_BAZAAR_OUTPUT_EXAMPLE",
                        "V1_ABSENT",
                        "V1_BODY_NOT_ENVELOPE",
                        "V1_BODY_PRESENT",
                        "V1_BODY_JSON",
                        "V1_VERSION",
                        "V1_ACCEPTS_NONEMPTY",
                        "V1_SCHEME",
                        "V1_SCHEME_KNOWN",
                        "V1_MAX_AMOUNT_REQUIRED",
                        "V1_AMOUNT_ATOMIC",
                        "V1_NETWORK_NAME",
                        "V1_NETWORK_KNOWN",
                        "V1_RESOURCE_STRING",
                        "V1_PAYTO",
                        "V1_ASSET",
                        "V1_MIMETYPE",
                        "V1_DESCRIPTION",
                        "V1_MAX_TIMEOUT",
                        "V1_EXTRA_EIP712",
                        "V1_OUTPUT_SCHEMA",
                        "V1_DISCOVERABLE",
                        "DUAL_PAYTO",
                        "DUAL_PRICE",
                        "DUAL_NETWORK",
                        "DUAL_ASSET",
                        "DUAL_RESOURCE",
                        "VERSION_HEADER_SAYS_V1",
                        "VERSION_BODY_SAYS_V2",
                        "ACCEPTS_TRUNCATED",
                        "FINDINGS_TRUNCATED"
                      ],
                      "description": "the check id that was asked about"
                    },
                    "applied": {
                      "type": "boolean",
                      "description": "whether the check RAN against this response. False means its precondition was not met — a v2 check against a v1-only endpoint, say — and `note` says which."
                    },
                    "passed": {
                      "type": [
                        "boolean",
                        "null"
                      ],
                      "description": "true: the check ran and found nothing. false: it ran and emitted, and `finding` carries the fix. NULL: it did not apply, and NOTHING WAS ASSERTED. A null is not a pass and must not be reported as one."
                    },
                    "finding": {
                      "oneOf": [
                        {
                          "type": "object",
                          "required": [
                            "severity",
                            "code",
                            "message",
                            "fix"
                          ],
                          "properties": {
                            "severity": {
                              "type": "string",
                              "enum": [
                                "error",
                                "warn",
                                "info"
                              ]
                            },
                            "code": {
                              "type": "string",
                              "enum": [
                                "HTTP_STATUS_402",
                                "HTTP_FREE_TIER_200",
                                "HTTP_SERVER_ERROR",
                                "HTTP_REDIRECT",
                                "HTTP_CONTENT_TYPE_JSON",
                                "ENVELOPE_PRESENT",
                                "V2_HEADER_PRESENT",
                                "V2_B64_URLSAFE",
                                "V2_B64_DECODE",
                                "V2_JSON",
                                "V2_VERSION",
                                "V2_ACCEPTS_NONEMPTY",
                                "V2_SCHEME",
                                "V2_SCHEME_KNOWN",
                                "V2_NETWORK_CAIP2",
                                "V2_NETWORK_CAIP2_STYLE",
                                "V2_NAMESPACE_KNOWN",
                                "V2_NETWORK_SUPPORTED",
                                "V2_AMOUNT",
                                "V2_AMOUNT_ATOMIC",
                                "V2_AMOUNT_MINIMUM",
                                "V2_INDEX_AMOUNT",
                                "V2_INDEX_TIMEOUT",
                                "V2_INDEX_ASSET",
                                "V2_INDEX_PAYTO",
                                "V2_PAYTO",
                                "V2_ASSET",
                                "V2_MAX_TIMEOUT",
                                "V2_EXTRA_EIP712",
                                "V2_ACCEPTS_V1_FIELDS",
                                "V2_RESOURCE_OBJECT",
                                "V2_RESOURCE_URL_PARSES",
                                "V2_RESOURCE_URL",
                                "V2_RESOURCE_METHOD",
                                "V2_RESOURCE_DESCRIPTION",
                                "V2_RESOURCE_MIMETYPE",
                                "V2_RESOURCE_URL_MATCHES",
                                "V2_SERVICE_NAME",
                                "V2_TAGS",
                                "V2_BAZAAR_PRESENT",
                                "V2_BAZAAR_INFO",
                                "V2_BAZAAR_SCHEMA",
                                "V2_BAZAAR_SCHEMA_CONTENT",
                                "V2_BAZAAR_INFO_VALIDATES",
                                "V2_BAZAAR_INPUT",
                                "V2_BAZAAR_INPUT_TYPE",
                                "V2_BAZAAR_INPUT_METHOD",
                                "V2_BAZAAR_OUTPUT_TYPE",
                                "V2_BAZAAR_OUTPUT_EXAMPLE",
                                "V1_ABSENT",
                                "V1_BODY_NOT_ENVELOPE",
                                "V1_BODY_PRESENT",
                                "V1_BODY_JSON",
                                "V1_VERSION",
                                "V1_ACCEPTS_NONEMPTY",
                                "V1_SCHEME",
                                "V1_SCHEME_KNOWN",
                                "V1_MAX_AMOUNT_REQUIRED",
                                "V1_AMOUNT_ATOMIC",
                                "V1_NETWORK_NAME",
                                "V1_NETWORK_KNOWN",
                                "V1_RESOURCE_STRING",
                                "V1_PAYTO",
                                "V1_ASSET",
                                "V1_MIMETYPE",
                                "V1_DESCRIPTION",
                                "V1_MAX_TIMEOUT",
                                "V1_EXTRA_EIP712",
                                "V1_OUTPUT_SCHEMA",
                                "V1_DISCOVERABLE",
                                "DUAL_PAYTO",
                                "DUAL_PRICE",
                                "DUAL_NETWORK",
                                "DUAL_ASSET",
                                "DUAL_RESOURCE",
                                "VERSION_HEADER_SAYS_V1",
                                "VERSION_BODY_SAYS_V2",
                                "ACCEPTS_TRUNCATED",
                                "FINDINGS_TRUNCATED"
                              ]
                            },
                            "message": {
                              "type": "string",
                              "description": "what is wrong, in this envelope"
                            },
                            "fix": {
                              "type": "string",
                              "description": "exactly how to fix it"
                            },
                            "core": {
                              "type": "boolean",
                              "description": "whether THIS finding makes the envelope unusable as published. Resolved per finding rather than per check: HTTP_STATUS_402 is core on a 401 and not on a 405, where the linter's own choice of verb is as likely an explanation."
                            }
                          }
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "the finding this check emitted, with its fix — or null when it emitted none"
                    },
                    "findings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "severity",
                          "code",
                          "message",
                          "fix"
                        ],
                        "properties": {
                          "severity": {
                            "type": "string",
                            "enum": [
                              "error",
                              "warn",
                              "info"
                            ]
                          },
                          "code": {
                            "type": "string",
                            "enum": [
                              "HTTP_STATUS_402",
                              "HTTP_FREE_TIER_200",
                              "HTTP_SERVER_ERROR",
                              "HTTP_REDIRECT",
                              "HTTP_CONTENT_TYPE_JSON",
                              "ENVELOPE_PRESENT",
                              "V2_HEADER_PRESENT",
                              "V2_B64_URLSAFE",
                              "V2_B64_DECODE",
                              "V2_JSON",
                              "V2_VERSION",
                              "V2_ACCEPTS_NONEMPTY",
                              "V2_SCHEME",
                              "V2_SCHEME_KNOWN",
                              "V2_NETWORK_CAIP2",
                              "V2_NETWORK_CAIP2_STYLE",
                              "V2_NAMESPACE_KNOWN",
                              "V2_NETWORK_SUPPORTED",
                              "V2_AMOUNT",
                              "V2_AMOUNT_ATOMIC",
                              "V2_AMOUNT_MINIMUM",
                              "V2_INDEX_AMOUNT",
                              "V2_INDEX_TIMEOUT",
                              "V2_INDEX_ASSET",
                              "V2_INDEX_PAYTO",
                              "V2_PAYTO",
                              "V2_ASSET",
                              "V2_MAX_TIMEOUT",
                              "V2_EXTRA_EIP712",
                              "V2_ACCEPTS_V1_FIELDS",
                              "V2_RESOURCE_OBJECT",
                              "V2_RESOURCE_URL_PARSES",
                              "V2_RESOURCE_URL",
                              "V2_RESOURCE_METHOD",
                              "V2_RESOURCE_DESCRIPTION",
                              "V2_RESOURCE_MIMETYPE",
                              "V2_RESOURCE_URL_MATCHES",
                              "V2_SERVICE_NAME",
                              "V2_TAGS",
                              "V2_BAZAAR_PRESENT",
                              "V2_BAZAAR_INFO",
                              "V2_BAZAAR_SCHEMA",
                              "V2_BAZAAR_SCHEMA_CONTENT",
                              "V2_BAZAAR_INFO_VALIDATES",
                              "V2_BAZAAR_INPUT",
                              "V2_BAZAAR_INPUT_TYPE",
                              "V2_BAZAAR_INPUT_METHOD",
                              "V2_BAZAAR_OUTPUT_TYPE",
                              "V2_BAZAAR_OUTPUT_EXAMPLE",
                              "V1_ABSENT",
                              "V1_BODY_NOT_ENVELOPE",
                              "V1_BODY_PRESENT",
                              "V1_BODY_JSON",
                              "V1_VERSION",
                              "V1_ACCEPTS_NONEMPTY",
                              "V1_SCHEME",
                              "V1_SCHEME_KNOWN",
                              "V1_MAX_AMOUNT_REQUIRED",
                              "V1_AMOUNT_ATOMIC",
                              "V1_NETWORK_NAME",
                              "V1_NETWORK_KNOWN",
                              "V1_RESOURCE_STRING",
                              "V1_PAYTO",
                              "V1_ASSET",
                              "V1_MIMETYPE",
                              "V1_DESCRIPTION",
                              "V1_MAX_TIMEOUT",
                              "V1_EXTRA_EIP712",
                              "V1_OUTPUT_SCHEMA",
                              "V1_DISCOVERABLE",
                              "DUAL_PAYTO",
                              "DUAL_PRICE",
                              "DUAL_NETWORK",
                              "DUAL_ASSET",
                              "DUAL_RESOURCE",
                              "VERSION_HEADER_SAYS_V1",
                              "VERSION_BODY_SAYS_V2",
                              "ACCEPTS_TRUNCATED",
                              "FINDINGS_TRUNCATED"
                            ]
                          },
                          "message": {
                            "type": "string",
                            "description": "what is wrong, in this envelope"
                          },
                          "fix": {
                            "type": "string",
                            "description": "exactly how to fix it"
                          },
                          "core": {
                            "type": "boolean",
                            "description": "whether THIS finding makes the envelope unusable as published. Resolved per finding rather than per check: HTTP_STATUS_402 is core on a 401 and not on a 405, where the linter's own choice of verb is as likely an explanation."
                          }
                        }
                      },
                      "description": "present only when one check emitted more than once — several checks reach a single code from branches that diagnose different things, and each carries its own fix"
                    },
                    "note": {
                      "type": "string",
                      "description": "present when the check did not apply: what did not happen, and why"
                    },
                    "regime": {
                      "type": "string",
                      "enum": [
                        "payment",
                        "bazaar",
                        "hygiene"
                      ]
                    },
                    "severity": {
                      "type": "string",
                      "enum": [
                        "error",
                        "warn",
                        "info"
                      ]
                    },
                    "core": {
                      "type": "boolean"
                    },
                    "sources": {
                      "type": "array",
                      "description": "where this rule comes from — the same provenance GET /check publishes",
                      "items": {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string"
                          },
                          "ref": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "summary": {
                      "type": "object",
                      "description": "the envelope description — versions, payTo, network, price, and any `partial` caveat. DELIBERATELY WITHOUT bazaar_ready: the second verdict is computed over every bazaar-regime check, and this call bought one check.",
                      "properties": {
                        "versions_detected": {
                          "type": "array",
                          "items": {
                            "type": "integer",
                            "enum": [
                              1,
                              2
                            ]
                          }
                        },
                        "payTo": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "network": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "price": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "partial": {
                          "type": "string",
                          "description": "present when the response was not a 402 and carried no envelope, so the envelope checks could not run"
                        }
                      }
                    },
                    "checks_run": {
                      "type": "integer",
                      "enum": [
                        0,
                        1
                      ],
                      "description": "1 when the named check applied, 0 when it did not — the same rule the full report uses"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "the request could not be linted. Nothing is charged for a call that was not served.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "fix": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the ordinary answer to an unauthenticated call, and NOT an error. The body is the x402 v1 envelope; the PAYMENT-REQUIRED response header carries the v2 envelope as standard base64.",
            "headers": {
              "PAYMENT-REQUIRED": {
                "schema": {
                  "type": "string"
                },
                "description": "the x402 v2 envelope, standard base64"
              }
            }
          },
          "413": {
            "description": "the request body is larger than the limit"
          },
          "429": {
            "description": "the daily ceiling for this caller, or a deployment with no receiving address"
          }
        }
      }
    },
    "/lint/envelope": {
      "post": {
        "operationId": "lint_envelope",
        "summary": "Check a captured x402 402 for indexing and payment blockers — no fetch ($0.10)",
        "description": "Runs the same check catalogue against a response you already have: paste the status, headers and body. Nothing is fetched, so it works for v1/v2 migration work, on staging, on localhost and on an endpoint that is not deployed yet. Cheaper than /lint for that reason: there is no outbound request to make on your behalf.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "type": "integer",
                    "description": "the HTTP status the endpoint answered with"
                  },
                  "headers": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "response headers; names are matched case-insensitively"
                  },
                  "body": {
                    "type": "string",
                    "description": "the response body, as text"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "optional: the URL it came from"
                  }
                }
              },
              "example": {
                "status": 402,
                "headers": {
                  "content-type": "application/json"
                },
                "body": "{\"x402Version\":1,\"accepts\":[{\"scheme\":\"exact\",\"network\":\"base\",\"maxAmountRequired\":\"1000\",\"resource\":\"https://example.com/api/thing\",\"description\":\"an example paid endpoint\",\"mimeType\":\"application/json\",\"payTo\":\"0x0000000000000000000000000000000000000001\",\"maxTimeoutSeconds\":60,\"asset\":\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\"extra\":{\"name\":\"USD Coin\",\"version\":\"2\"},\"outputSchema\":{\"input\":{\"type\":\"http\",\"method\":\"POST\",\"discoverable\":true,\"bodyType\":\"text\",\"description\":\"the request body\"},\"output\":{\"type\":\"string\",\"description\":\"the response body\"}}}]}"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "the lint report",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "grade",
                    "summary",
                    "findings",
                    "checks_run"
                  ],
                  "properties": {
                    "grade": {
                      "type": "string",
                      "enum": [
                        "A",
                        "B",
                        "C",
                        "D",
                        "F"
                      ],
                      "description": "CAN THIS ENDPOINT BE PAID, and only that. Computed from payment-regime findings; discovery is reported separately as summary.bazaar_ready. A: zero payment-regime errors and zero payment-regime warnings; B: zero payment-regime errors, one or two warnings; C: zero payment-regime errors, three or more warnings; D: one or more payment-regime errors, none of them core; F: any core error — the envelope is not usable as published"
                    },
                    "summary": {
                      "type": "object",
                      "properties": {
                        "versions_detected": {
                          "type": "array",
                          "items": {
                            "type": "integer",
                            "enum": [
                              1,
                              2
                            ]
                          }
                        },
                        "payTo": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "network": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "price": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "bazaar_ready": {
                          "oneOf": [
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "string",
                              "enum": [
                                "n/a"
                              ]
                            }
                          ],
                          "description": "CAN THIS ENDPOINT BE FOUND — the second verdict, from bazaar-regime errors. \"n/a\" for a v1-only endpoint, whose CDP requirements are a v2 shape. Grade A with bazaar_ready false is a real and common answer: payable, and not catalogued."
                        },
                        "blockers": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "enum": [
                              "V2_HEADER_PRESENT",
                              "V2_NETWORK_SUPPORTED",
                              "V2_AMOUNT_MINIMUM",
                              "V2_INDEX_AMOUNT",
                              "V2_INDEX_TIMEOUT",
                              "V2_INDEX_ASSET",
                              "V2_INDEX_PAYTO",
                              "V2_RESOURCE_URL",
                              "V2_RESOURCE_METHOD",
                              "V2_RESOURCE_DESCRIPTION",
                              "V2_SERVICE_NAME",
                              "V2_TAGS",
                              "V2_BAZAAR_PRESENT",
                              "V2_BAZAAR_INFO",
                              "V2_BAZAAR_SCHEMA",
                              "V2_BAZAAR_SCHEMA_CONTENT",
                              "V2_BAZAAR_INFO_VALIDATES",
                              "V2_BAZAAR_INPUT",
                              "V2_BAZAAR_INPUT_TYPE",
                              "V2_BAZAAR_INPUT_METHOD",
                              "V2_BAZAAR_OUTPUT_TYPE",
                              "V2_BAZAAR_OUTPUT_EXAMPLE",
                              "V1_OUTPUT_SCHEMA",
                              "V1_DISCOVERABLE"
                            ]
                          },
                          "description": "the check codes standing between this resource and an index entry"
                        },
                        "partial": {
                          "type": "string",
                          "description": "present when the response was not a 402 and carried no envelope, so the envelope checks could not run"
                        }
                      }
                    },
                    "findings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "severity",
                          "code",
                          "message",
                          "fix"
                        ],
                        "properties": {
                          "severity": {
                            "type": "string",
                            "enum": [
                              "error",
                              "warn",
                              "info"
                            ]
                          },
                          "code": {
                            "type": "string",
                            "enum": [
                              "HTTP_STATUS_402",
                              "HTTP_FREE_TIER_200",
                              "HTTP_SERVER_ERROR",
                              "HTTP_REDIRECT",
                              "HTTP_CONTENT_TYPE_JSON",
                              "ENVELOPE_PRESENT",
                              "V2_HEADER_PRESENT",
                              "V2_B64_URLSAFE",
                              "V2_B64_DECODE",
                              "V2_JSON",
                              "V2_VERSION",
                              "V2_ACCEPTS_NONEMPTY",
                              "V2_SCHEME",
                              "V2_SCHEME_KNOWN",
                              "V2_NETWORK_CAIP2",
                              "V2_NETWORK_CAIP2_STYLE",
                              "V2_NAMESPACE_KNOWN",
                              "V2_NETWORK_SUPPORTED",
                              "V2_AMOUNT",
                              "V2_AMOUNT_ATOMIC",
                              "V2_AMOUNT_MINIMUM",
                              "V2_INDEX_AMOUNT",
                              "V2_INDEX_TIMEOUT",
                              "V2_INDEX_ASSET",
                              "V2_INDEX_PAYTO",
                              "V2_PAYTO",
                              "V2_ASSET",
                              "V2_MAX_TIMEOUT",
                              "V2_EXTRA_EIP712",
                              "V2_ACCEPTS_V1_FIELDS",
                              "V2_RESOURCE_OBJECT",
                              "V2_RESOURCE_URL_PARSES",
                              "V2_RESOURCE_URL",
                              "V2_RESOURCE_METHOD",
                              "V2_RESOURCE_DESCRIPTION",
                              "V2_RESOURCE_MIMETYPE",
                              "V2_RESOURCE_URL_MATCHES",
                              "V2_SERVICE_NAME",
                              "V2_TAGS",
                              "V2_BAZAAR_PRESENT",
                              "V2_BAZAAR_INFO",
                              "V2_BAZAAR_SCHEMA",
                              "V2_BAZAAR_SCHEMA_CONTENT",
                              "V2_BAZAAR_INFO_VALIDATES",
                              "V2_BAZAAR_INPUT",
                              "V2_BAZAAR_INPUT_TYPE",
                              "V2_BAZAAR_INPUT_METHOD",
                              "V2_BAZAAR_OUTPUT_TYPE",
                              "V2_BAZAAR_OUTPUT_EXAMPLE",
                              "V1_ABSENT",
                              "V1_BODY_NOT_ENVELOPE",
                              "V1_BODY_PRESENT",
                              "V1_BODY_JSON",
                              "V1_VERSION",
                              "V1_ACCEPTS_NONEMPTY",
                              "V1_SCHEME",
                              "V1_SCHEME_KNOWN",
                              "V1_MAX_AMOUNT_REQUIRED",
                              "V1_AMOUNT_ATOMIC",
                              "V1_NETWORK_NAME",
                              "V1_NETWORK_KNOWN",
                              "V1_RESOURCE_STRING",
                              "V1_PAYTO",
                              "V1_ASSET",
                              "V1_MIMETYPE",
                              "V1_DESCRIPTION",
                              "V1_MAX_TIMEOUT",
                              "V1_EXTRA_EIP712",
                              "V1_OUTPUT_SCHEMA",
                              "V1_DISCOVERABLE",
                              "DUAL_PAYTO",
                              "DUAL_PRICE",
                              "DUAL_NETWORK",
                              "DUAL_ASSET",
                              "DUAL_RESOURCE",
                              "VERSION_HEADER_SAYS_V1",
                              "VERSION_BODY_SAYS_V2",
                              "ACCEPTS_TRUNCATED",
                              "FINDINGS_TRUNCATED"
                            ]
                          },
                          "message": {
                            "type": "string",
                            "description": "what is wrong, in this envelope"
                          },
                          "fix": {
                            "type": "string",
                            "description": "exactly how to fix it"
                          },
                          "core": {
                            "type": "boolean",
                            "description": "whether THIS finding makes the envelope unusable as published. Resolved per finding rather than per check: HTTP_STATUS_402 is core on a 401 and not on a 405, where the linter's own choice of verb is as likely an explanation."
                          }
                        }
                      }
                    },
                    "checks_run": {
                      "type": "integer",
                      "description": "how many checks APPLIED. A v1-only endpoint legitimately skips every v2 check, so this is the denominator a caller needs before comparing two reports."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "the request could not be linted. Nothing is charged for a call that was not served.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "fix": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the ordinary answer to an unauthenticated call, and NOT an error. The body is the x402 v1 envelope; the PAYMENT-REQUIRED response header carries the v2 envelope as standard base64.",
            "headers": {
              "PAYMENT-REQUIRED": {
                "schema": {
                  "type": "string"
                },
                "description": "the x402 v2 envelope, standard base64"
              }
            }
          },
          "413": {
            "description": "the request body is larger than the limit"
          },
          "429": {
            "description": "the daily ceiling for this caller, or a deployment with no receiving address"
          }
        }
      }
    },
    "/lint/envelope/one": {
      "post": {
        "operationId": "lint_envelope_one",
        "summary": "Run ONE named check against a response you paste ($0.01)",
        "description": "One named check over a response you already have — the cheapest answer this service sells, and the one to reach for in a test or a CI step that asserts a single property of a 402 it just built. Nothing is fetched. The answer says whether the check PASSED, and when the check did not apply to this response it says that instead of quietly passing. GET /check lists every check id.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "status",
                  "check"
                ],
                "properties": {
                  "status": {
                    "type": "integer",
                    "description": "the HTTP status the endpoint answered with"
                  },
                  "headers": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "response headers; names are matched case-insensitively"
                  },
                  "body": {
                    "type": "string",
                    "description": "the response body, as text"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "optional: the URL it came from"
                  },
                  "check": {
                    "type": "string",
                    "enum": [
                      "HTTP_STATUS_402",
                      "HTTP_FREE_TIER_200",
                      "HTTP_SERVER_ERROR",
                      "HTTP_REDIRECT",
                      "HTTP_CONTENT_TYPE_JSON",
                      "ENVELOPE_PRESENT",
                      "V2_HEADER_PRESENT",
                      "V2_B64_URLSAFE",
                      "V2_B64_DECODE",
                      "V2_JSON",
                      "V2_VERSION",
                      "V2_ACCEPTS_NONEMPTY",
                      "V2_SCHEME",
                      "V2_SCHEME_KNOWN",
                      "V2_NETWORK_CAIP2",
                      "V2_NETWORK_CAIP2_STYLE",
                      "V2_NAMESPACE_KNOWN",
                      "V2_NETWORK_SUPPORTED",
                      "V2_AMOUNT",
                      "V2_AMOUNT_ATOMIC",
                      "V2_AMOUNT_MINIMUM",
                      "V2_INDEX_AMOUNT",
                      "V2_INDEX_TIMEOUT",
                      "V2_INDEX_ASSET",
                      "V2_INDEX_PAYTO",
                      "V2_PAYTO",
                      "V2_ASSET",
                      "V2_MAX_TIMEOUT",
                      "V2_EXTRA_EIP712",
                      "V2_ACCEPTS_V1_FIELDS",
                      "V2_RESOURCE_OBJECT",
                      "V2_RESOURCE_URL_PARSES",
                      "V2_RESOURCE_URL",
                      "V2_RESOURCE_METHOD",
                      "V2_RESOURCE_DESCRIPTION",
                      "V2_RESOURCE_MIMETYPE",
                      "V2_RESOURCE_URL_MATCHES",
                      "V2_SERVICE_NAME",
                      "V2_TAGS",
                      "V2_BAZAAR_PRESENT",
                      "V2_BAZAAR_INFO",
                      "V2_BAZAAR_SCHEMA",
                      "V2_BAZAAR_SCHEMA_CONTENT",
                      "V2_BAZAAR_INFO_VALIDATES",
                      "V2_BAZAAR_INPUT",
                      "V2_BAZAAR_INPUT_TYPE",
                      "V2_BAZAAR_INPUT_METHOD",
                      "V2_BAZAAR_OUTPUT_TYPE",
                      "V2_BAZAAR_OUTPUT_EXAMPLE",
                      "V1_ABSENT",
                      "V1_BODY_NOT_ENVELOPE",
                      "V1_BODY_PRESENT",
                      "V1_BODY_JSON",
                      "V1_VERSION",
                      "V1_ACCEPTS_NONEMPTY",
                      "V1_SCHEME",
                      "V1_SCHEME_KNOWN",
                      "V1_MAX_AMOUNT_REQUIRED",
                      "V1_AMOUNT_ATOMIC",
                      "V1_NETWORK_NAME",
                      "V1_NETWORK_KNOWN",
                      "V1_RESOURCE_STRING",
                      "V1_PAYTO",
                      "V1_ASSET",
                      "V1_MIMETYPE",
                      "V1_DESCRIPTION",
                      "V1_MAX_TIMEOUT",
                      "V1_EXTRA_EIP712",
                      "V1_OUTPUT_SCHEMA",
                      "V1_DISCOVERABLE",
                      "DUAL_PAYTO",
                      "DUAL_PRICE",
                      "DUAL_NETWORK",
                      "DUAL_ASSET",
                      "DUAL_RESOURCE",
                      "VERSION_HEADER_SAYS_V1",
                      "VERSION_BODY_SAYS_V2",
                      "ACCEPTS_TRUNCATED",
                      "FINDINGS_TRUNCATED"
                    ],
                    "description": "exactly one check id, from the catalogue GET /check publishes. Unknown or missing is a 400 that lints nothing and charges nothing."
                  }
                }
              },
              "example": {
                "status": 402,
                "headers": {
                  "content-type": "application/json"
                },
                "body": "{\"x402Version\":1,\"accepts\":[{\"scheme\":\"exact\",\"network\":\"base\",\"maxAmountRequired\":\"1000\",\"resource\":\"https://example.com/api/thing\",\"description\":\"an example paid endpoint\",\"mimeType\":\"application/json\",\"payTo\":\"0x0000000000000000000000000000000000000001\",\"maxTimeoutSeconds\":60,\"asset\":\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\"extra\":{\"name\":\"USD Coin\",\"version\":\"2\"},\"outputSchema\":{\"input\":{\"type\":\"http\",\"method\":\"POST\",\"discoverable\":true,\"bodyType\":\"text\",\"description\":\"the request body\"},\"output\":{\"type\":\"string\",\"description\":\"the response body\"}}}]}",
                "check": "V2_HEADER_PRESENT"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "the single-check answer",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "check",
                    "applied",
                    "passed",
                    "finding",
                    "regime",
                    "sources",
                    "summary",
                    "checks_run"
                  ],
                  "properties": {
                    "check": {
                      "type": "string",
                      "enum": [
                        "HTTP_STATUS_402",
                        "HTTP_FREE_TIER_200",
                        "HTTP_SERVER_ERROR",
                        "HTTP_REDIRECT",
                        "HTTP_CONTENT_TYPE_JSON",
                        "ENVELOPE_PRESENT",
                        "V2_HEADER_PRESENT",
                        "V2_B64_URLSAFE",
                        "V2_B64_DECODE",
                        "V2_JSON",
                        "V2_VERSION",
                        "V2_ACCEPTS_NONEMPTY",
                        "V2_SCHEME",
                        "V2_SCHEME_KNOWN",
                        "V2_NETWORK_CAIP2",
                        "V2_NETWORK_CAIP2_STYLE",
                        "V2_NAMESPACE_KNOWN",
                        "V2_NETWORK_SUPPORTED",
                        "V2_AMOUNT",
                        "V2_AMOUNT_ATOMIC",
                        "V2_AMOUNT_MINIMUM",
                        "V2_INDEX_AMOUNT",
                        "V2_INDEX_TIMEOUT",
                        "V2_INDEX_ASSET",
                        "V2_INDEX_PAYTO",
                        "V2_PAYTO",
                        "V2_ASSET",
                        "V2_MAX_TIMEOUT",
                        "V2_EXTRA_EIP712",
                        "V2_ACCEPTS_V1_FIELDS",
                        "V2_RESOURCE_OBJECT",
                        "V2_RESOURCE_URL_PARSES",
                        "V2_RESOURCE_URL",
                        "V2_RESOURCE_METHOD",
                        "V2_RESOURCE_DESCRIPTION",
                        "V2_RESOURCE_MIMETYPE",
                        "V2_RESOURCE_URL_MATCHES",
                        "V2_SERVICE_NAME",
                        "V2_TAGS",
                        "V2_BAZAAR_PRESENT",
                        "V2_BAZAAR_INFO",
                        "V2_BAZAAR_SCHEMA",
                        "V2_BAZAAR_SCHEMA_CONTENT",
                        "V2_BAZAAR_INFO_VALIDATES",
                        "V2_BAZAAR_INPUT",
                        "V2_BAZAAR_INPUT_TYPE",
                        "V2_BAZAAR_INPUT_METHOD",
                        "V2_BAZAAR_OUTPUT_TYPE",
                        "V2_BAZAAR_OUTPUT_EXAMPLE",
                        "V1_ABSENT",
                        "V1_BODY_NOT_ENVELOPE",
                        "V1_BODY_PRESENT",
                        "V1_BODY_JSON",
                        "V1_VERSION",
                        "V1_ACCEPTS_NONEMPTY",
                        "V1_SCHEME",
                        "V1_SCHEME_KNOWN",
                        "V1_MAX_AMOUNT_REQUIRED",
                        "V1_AMOUNT_ATOMIC",
                        "V1_NETWORK_NAME",
                        "V1_NETWORK_KNOWN",
                        "V1_RESOURCE_STRING",
                        "V1_PAYTO",
                        "V1_ASSET",
                        "V1_MIMETYPE",
                        "V1_DESCRIPTION",
                        "V1_MAX_TIMEOUT",
                        "V1_EXTRA_EIP712",
                        "V1_OUTPUT_SCHEMA",
                        "V1_DISCOVERABLE",
                        "DUAL_PAYTO",
                        "DUAL_PRICE",
                        "DUAL_NETWORK",
                        "DUAL_ASSET",
                        "DUAL_RESOURCE",
                        "VERSION_HEADER_SAYS_V1",
                        "VERSION_BODY_SAYS_V2",
                        "ACCEPTS_TRUNCATED",
                        "FINDINGS_TRUNCATED"
                      ],
                      "description": "the check id that was asked about"
                    },
                    "applied": {
                      "type": "boolean",
                      "description": "whether the check RAN against this response. False means its precondition was not met — a v2 check against a v1-only endpoint, say — and `note` says which."
                    },
                    "passed": {
                      "type": [
                        "boolean",
                        "null"
                      ],
                      "description": "true: the check ran and found nothing. false: it ran and emitted, and `finding` carries the fix. NULL: it did not apply, and NOTHING WAS ASSERTED. A null is not a pass and must not be reported as one."
                    },
                    "finding": {
                      "oneOf": [
                        {
                          "type": "object",
                          "required": [
                            "severity",
                            "code",
                            "message",
                            "fix"
                          ],
                          "properties": {
                            "severity": {
                              "type": "string",
                              "enum": [
                                "error",
                                "warn",
                                "info"
                              ]
                            },
                            "code": {
                              "type": "string",
                              "enum": [
                                "HTTP_STATUS_402",
                                "HTTP_FREE_TIER_200",
                                "HTTP_SERVER_ERROR",
                                "HTTP_REDIRECT",
                                "HTTP_CONTENT_TYPE_JSON",
                                "ENVELOPE_PRESENT",
                                "V2_HEADER_PRESENT",
                                "V2_B64_URLSAFE",
                                "V2_B64_DECODE",
                                "V2_JSON",
                                "V2_VERSION",
                                "V2_ACCEPTS_NONEMPTY",
                                "V2_SCHEME",
                                "V2_SCHEME_KNOWN",
                                "V2_NETWORK_CAIP2",
                                "V2_NETWORK_CAIP2_STYLE",
                                "V2_NAMESPACE_KNOWN",
                                "V2_NETWORK_SUPPORTED",
                                "V2_AMOUNT",
                                "V2_AMOUNT_ATOMIC",
                                "V2_AMOUNT_MINIMUM",
                                "V2_INDEX_AMOUNT",
                                "V2_INDEX_TIMEOUT",
                                "V2_INDEX_ASSET",
                                "V2_INDEX_PAYTO",
                                "V2_PAYTO",
                                "V2_ASSET",
                                "V2_MAX_TIMEOUT",
                                "V2_EXTRA_EIP712",
                                "V2_ACCEPTS_V1_FIELDS",
                                "V2_RESOURCE_OBJECT",
                                "V2_RESOURCE_URL_PARSES",
                                "V2_RESOURCE_URL",
                                "V2_RESOURCE_METHOD",
                                "V2_RESOURCE_DESCRIPTION",
                                "V2_RESOURCE_MIMETYPE",
                                "V2_RESOURCE_URL_MATCHES",
                                "V2_SERVICE_NAME",
                                "V2_TAGS",
                                "V2_BAZAAR_PRESENT",
                                "V2_BAZAAR_INFO",
                                "V2_BAZAAR_SCHEMA",
                                "V2_BAZAAR_SCHEMA_CONTENT",
                                "V2_BAZAAR_INFO_VALIDATES",
                                "V2_BAZAAR_INPUT",
                                "V2_BAZAAR_INPUT_TYPE",
                                "V2_BAZAAR_INPUT_METHOD",
                                "V2_BAZAAR_OUTPUT_TYPE",
                                "V2_BAZAAR_OUTPUT_EXAMPLE",
                                "V1_ABSENT",
                                "V1_BODY_NOT_ENVELOPE",
                                "V1_BODY_PRESENT",
                                "V1_BODY_JSON",
                                "V1_VERSION",
                                "V1_ACCEPTS_NONEMPTY",
                                "V1_SCHEME",
                                "V1_SCHEME_KNOWN",
                                "V1_MAX_AMOUNT_REQUIRED",
                                "V1_AMOUNT_ATOMIC",
                                "V1_NETWORK_NAME",
                                "V1_NETWORK_KNOWN",
                                "V1_RESOURCE_STRING",
                                "V1_PAYTO",
                                "V1_ASSET",
                                "V1_MIMETYPE",
                                "V1_DESCRIPTION",
                                "V1_MAX_TIMEOUT",
                                "V1_EXTRA_EIP712",
                                "V1_OUTPUT_SCHEMA",
                                "V1_DISCOVERABLE",
                                "DUAL_PAYTO",
                                "DUAL_PRICE",
                                "DUAL_NETWORK",
                                "DUAL_ASSET",
                                "DUAL_RESOURCE",
                                "VERSION_HEADER_SAYS_V1",
                                "VERSION_BODY_SAYS_V2",
                                "ACCEPTS_TRUNCATED",
                                "FINDINGS_TRUNCATED"
                              ]
                            },
                            "message": {
                              "type": "string",
                              "description": "what is wrong, in this envelope"
                            },
                            "fix": {
                              "type": "string",
                              "description": "exactly how to fix it"
                            },
                            "core": {
                              "type": "boolean",
                              "description": "whether THIS finding makes the envelope unusable as published. Resolved per finding rather than per check: HTTP_STATUS_402 is core on a 401 and not on a 405, where the linter's own choice of verb is as likely an explanation."
                            }
                          }
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "the finding this check emitted, with its fix — or null when it emitted none"
                    },
                    "findings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "severity",
                          "code",
                          "message",
                          "fix"
                        ],
                        "properties": {
                          "severity": {
                            "type": "string",
                            "enum": [
                              "error",
                              "warn",
                              "info"
                            ]
                          },
                          "code": {
                            "type": "string",
                            "enum": [
                              "HTTP_STATUS_402",
                              "HTTP_FREE_TIER_200",
                              "HTTP_SERVER_ERROR",
                              "HTTP_REDIRECT",
                              "HTTP_CONTENT_TYPE_JSON",
                              "ENVELOPE_PRESENT",
                              "V2_HEADER_PRESENT",
                              "V2_B64_URLSAFE",
                              "V2_B64_DECODE",
                              "V2_JSON",
                              "V2_VERSION",
                              "V2_ACCEPTS_NONEMPTY",
                              "V2_SCHEME",
                              "V2_SCHEME_KNOWN",
                              "V2_NETWORK_CAIP2",
                              "V2_NETWORK_CAIP2_STYLE",
                              "V2_NAMESPACE_KNOWN",
                              "V2_NETWORK_SUPPORTED",
                              "V2_AMOUNT",
                              "V2_AMOUNT_ATOMIC",
                              "V2_AMOUNT_MINIMUM",
                              "V2_INDEX_AMOUNT",
                              "V2_INDEX_TIMEOUT",
                              "V2_INDEX_ASSET",
                              "V2_INDEX_PAYTO",
                              "V2_PAYTO",
                              "V2_ASSET",
                              "V2_MAX_TIMEOUT",
                              "V2_EXTRA_EIP712",
                              "V2_ACCEPTS_V1_FIELDS",
                              "V2_RESOURCE_OBJECT",
                              "V2_RESOURCE_URL_PARSES",
                              "V2_RESOURCE_URL",
                              "V2_RESOURCE_METHOD",
                              "V2_RESOURCE_DESCRIPTION",
                              "V2_RESOURCE_MIMETYPE",
                              "V2_RESOURCE_URL_MATCHES",
                              "V2_SERVICE_NAME",
                              "V2_TAGS",
                              "V2_BAZAAR_PRESENT",
                              "V2_BAZAAR_INFO",
                              "V2_BAZAAR_SCHEMA",
                              "V2_BAZAAR_SCHEMA_CONTENT",
                              "V2_BAZAAR_INFO_VALIDATES",
                              "V2_BAZAAR_INPUT",
                              "V2_BAZAAR_INPUT_TYPE",
                              "V2_BAZAAR_INPUT_METHOD",
                              "V2_BAZAAR_OUTPUT_TYPE",
                              "V2_BAZAAR_OUTPUT_EXAMPLE",
                              "V1_ABSENT",
                              "V1_BODY_NOT_ENVELOPE",
                              "V1_BODY_PRESENT",
                              "V1_BODY_JSON",
                              "V1_VERSION",
                              "V1_ACCEPTS_NONEMPTY",
                              "V1_SCHEME",
                              "V1_SCHEME_KNOWN",
                              "V1_MAX_AMOUNT_REQUIRED",
                              "V1_AMOUNT_ATOMIC",
                              "V1_NETWORK_NAME",
                              "V1_NETWORK_KNOWN",
                              "V1_RESOURCE_STRING",
                              "V1_PAYTO",
                              "V1_ASSET",
                              "V1_MIMETYPE",
                              "V1_DESCRIPTION",
                              "V1_MAX_TIMEOUT",
                              "V1_EXTRA_EIP712",
                              "V1_OUTPUT_SCHEMA",
                              "V1_DISCOVERABLE",
                              "DUAL_PAYTO",
                              "DUAL_PRICE",
                              "DUAL_NETWORK",
                              "DUAL_ASSET",
                              "DUAL_RESOURCE",
                              "VERSION_HEADER_SAYS_V1",
                              "VERSION_BODY_SAYS_V2",
                              "ACCEPTS_TRUNCATED",
                              "FINDINGS_TRUNCATED"
                            ]
                          },
                          "message": {
                            "type": "string",
                            "description": "what is wrong, in this envelope"
                          },
                          "fix": {
                            "type": "string",
                            "description": "exactly how to fix it"
                          },
                          "core": {
                            "type": "boolean",
                            "description": "whether THIS finding makes the envelope unusable as published. Resolved per finding rather than per check: HTTP_STATUS_402 is core on a 401 and not on a 405, where the linter's own choice of verb is as likely an explanation."
                          }
                        }
                      },
                      "description": "present only when one check emitted more than once — several checks reach a single code from branches that diagnose different things, and each carries its own fix"
                    },
                    "note": {
                      "type": "string",
                      "description": "present when the check did not apply: what did not happen, and why"
                    },
                    "regime": {
                      "type": "string",
                      "enum": [
                        "payment",
                        "bazaar",
                        "hygiene"
                      ]
                    },
                    "severity": {
                      "type": "string",
                      "enum": [
                        "error",
                        "warn",
                        "info"
                      ]
                    },
                    "core": {
                      "type": "boolean"
                    },
                    "sources": {
                      "type": "array",
                      "description": "where this rule comes from — the same provenance GET /check publishes",
                      "items": {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string"
                          },
                          "ref": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "summary": {
                      "type": "object",
                      "description": "the envelope description — versions, payTo, network, price, and any `partial` caveat. DELIBERATELY WITHOUT bazaar_ready: the second verdict is computed over every bazaar-regime check, and this call bought one check.",
                      "properties": {
                        "versions_detected": {
                          "type": "array",
                          "items": {
                            "type": "integer",
                            "enum": [
                              1,
                              2
                            ]
                          }
                        },
                        "payTo": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "network": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "price": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "partial": {
                          "type": "string",
                          "description": "present when the response was not a 402 and carried no envelope, so the envelope checks could not run"
                        }
                      }
                    },
                    "checks_run": {
                      "type": "integer",
                      "enum": [
                        0,
                        1
                      ],
                      "description": "1 when the named check applied, 0 when it did not — the same rule the full report uses"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "the request could not be linted. Nothing is charged for a call that was not served.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "fix": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "402": {
            "description": "Payment required — the ordinary answer to an unauthenticated call, and NOT an error. The body is the x402 v1 envelope; the PAYMENT-REQUIRED response header carries the v2 envelope as standard base64.",
            "headers": {
              "PAYMENT-REQUIRED": {
                "schema": {
                  "type": "string"
                },
                "description": "the x402 v2 envelope, standard base64"
              }
            }
          },
          "413": {
            "description": "the request body is larger than the limit"
          },
          "429": {
            "description": "the daily ceiling for this caller, or a deployment with no receiving address"
          }
        }
      }
    }
  },
  "x-x402": {
    "versions": [
      1,
      2
    ],
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "networks": {
      "1": "base",
      "2": "eip155:8453"
    },
    "prices": {
      "/lint": {
        "usd": "$0.25",
        "atomic": "250000",
        "scope": "all 79 checks",
        "fetches": true
      },
      "/lint/one": {
        "usd": "$0.02",
        "atomic": "20000",
        "scope": "one named check",
        "fetches": true
      },
      "/lint/envelope": {
        "usd": "$0.10",
        "atomic": "100000",
        "scope": "all 79 checks",
        "fetches": false
      },
      "/lint/envelope/one": {
        "usd": "$0.01",
        "atomic": "10000",
        "scope": "one named check",
        "fetches": false
      }
    },
    "pricing_note": "A full 79-check report costs 12.5x one check on a live URL and 10x on a pasted response — a 6.3x and 7.9x per-check advantage. Singles stay the cheaper buy through 12 questions live and 9 pasted; past that, buy the report.",
    "free_tier": false
  }
}
