grokzilla.shop / try

{ try it }

"skills": 33, // pay-per-call, no account, no API key
"protocol": "x402 v2 · scheme exact",
"network": "eip155:8453", // Base mainnet
"this_page_pays": false // "Send unpaid request" only shows the 402 challenge. Paying stays with your own wallet or agent.
optional · prompt only The Base address your agent pays from. It is only written into the copyable agent prompt so your agent knows which wallet to use. It is never sent to the server and nothing is signed here.
"osint-graph": { Public OSINT Graph $0.01 Resolves one public name on Wikidata and returns a relationship graph from a fixed property list (instance of, country, headquarters, founder, chief executive, ownership, employer, education, membership, and similar), up to two hops. People include only notable public roles. If nothing matches, the graph is empty and reason explains why.
"method": "POST", "content_type": "application/json",
"price_usd": 0.01, // 10000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required string The person, company or domain to start the public-data graph from. Required · string Example: "OpenAI"
optional integer How many hops out from the seed entity to map. Higher = wider graph. Optional · integer max 4 · default 2 Example: 2
},
"request_body": // live, from your inputs
{
  "seed_entity": "OpenAI",
  "max_depth": 2
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "seed_entity": {
      "type": "string"
    },
    "max_depth": {
      "type": "integer"
    },
    "limit": {
      "type": "integer"
    },
    "disclaimer": {
      "type": "string"
    },
    "resolved": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      }
    },
    "alternatives": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        }
      }
    },
    "graph": {
      "type": "object",
      "properties": {
        "nodes": {
          "type": "array",
          "items": {
            "type": "object"
          }
        },
        "edges": {
          "type": "array",
          "items": {
            "type": "object"
          }
        },
        "max_depth": {
          "type": "integer"
        }
      }
    },
    "degrees_sample": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "depth": {
            "type": "integer"
          },
          "path": {
            "type": "array"
          }
        }
      }
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "skill"
  ]
}
"example":
{
  "skill": "osint_graph",
  "seed_entity": "OpenAI",
  "max_depth": 2,
  "limit": 25,
  "disclaimer": "Public data only. Not a substitute for licensed people search. Comply with privacy laws and platform ToS.",
  "resolved": {
    "id": "Q21708200",
    "name": "OpenAI",
    "description": "American artificial intelligence research organization",
    "url": "https://www.wikidata.org/wiki/Q21708200"
  },
  "alternatives": [
    {
      "id": "Q21708200",
      "name": "OpenAI",
      "description": "American artificial intelligence research organization",
      "url": "https://www.wikidata.org/wiki/Q21708200"
    }
  ],
  "graph": {
    "nodes": [
      {
        "id": "Q21708200",
        "name": "OpenAI",
        "type": "enterprise",
        "kind": "organization",
        "url": "https://www.wikidata.org/wiki/Q21708200"
      },
      {
        "id": "Q111759432",
        "name": "Reddit Inc.",
        "type": "dot-com company",
        "kind": "organization",
        "url": "https://www.wikidata.org/wiki/Q111759432"
      },
      {
        "id": "Q62",
        "name": "San Francisco",
        "type": "city in the United States",
        "kind": "place",
        "url": "https://www.wikidata.org/wiki/Q62"
      },
      {
        "id": "Q7407093",
        "name": "Sam Altman",
        "type": "human",
        "kind": "person",
        "url": "https://www.wikidata.org/wiki/Q7407093"
      }
    ],
    "edges": [
      {
        "from": "Q21708200",
        "to": "Q7407093",
        "relation": "founder",
        "pid": "P112"
      },
      {
        "from": "Q21708200",
        "to": "Q62",
        "relation": "headquarters location",
        "pid": "P159"
      },
      {
        "from": "Q7407093",
        "to": "Q111759432",
        "relation": "employer",
        "pid": "P108"
      }
    ],
    "max_depth": 2
  },
  "degrees_sample": [
    {
      "depth": 1,
      "path": [
        "OpenAI",
        "San Francisco"
      ]
    },
    {
      "depth": 1,
      "path": [
        "OpenAI",
        "Sam Altman"
      ]
    },
    {
      "depth": 2,
      "path": [
        "OpenAI",
        "Sam Altman",
        "Reddit Inc."
      ]
    }
  ],
  "sources": [
    "https://www.wikidata.org/w/api.php",
    "https://query.wikidata.org/sparql"
  ]
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/osint-graph with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "10000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.01 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/osint-graph on this host and decodes the 402. Never pays.
}
"seo": { SEO Optimizer $0.012 Fetches a URL and returns an on-page SEO score from real checks (title, meta, headings, alt text, keywords, and more). If the page cannot be fetched, returns an error status (403/404/5xx), is a CDN/WAF challenge page, or times out (7 s cap), it answers 422 with score null, the reason, and charged:false; no payment is taken.
"method": "POST", "content_type": "application/json",
"price_usd": 0.012, // 12000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/seo",
"you_provide": { // JSON body fields
required string Full URL of the page to analyse, including https://. Required · string Example: "https://example.com"
optional array of string Target keywords as a JSON array of strings, e.g. ["x402","micropayments"]. Optional · array of string
},
"request_body": // live, from your inputs
{
  "url": "https://example.com"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "final_url": {
      "type": "string"
    },
    "score": {
      "type": "integer"
    },
    "grade": {
      "type": "string"
    },
    "recommendations": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "keywords": {
      "type": "array"
    },
    "stats": {
      "type": "object",
      "properties": {
        "status_code": {
          "type": "integer"
        },
        "word_count": {
          "type": "integer"
        }
      }
    }
  },
  "required": [
    "skill"
  ]
}
"example":
{
  "skill": "seo",
  "url": "https://example.com",
  "final_url": "https://example.com/",
  "score": 28,
  "grade": "F",
  "recommendations": [
    "Add exactly one H1 heading.",
    "Lengthen the title to 30-60 characters (currently 14).",
    "Add a meta description of 70 to 160 characters."
  ],
  "keywords": [],
  "stats": {
    "status_code": 200,
    "word_count": 25
  }
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/seo with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "12000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.012 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/seo on this host and decodes the 402. Never pays.
}
"seo-v2": { SEO Optimizer v2 $0.0997 On-page SEO + AEO audit with paste-ready fixes: 0-100 score across technical, content, metadata, structured data and AI-answer readiness, ~25 checks with severity, and generated title/meta, canonical, Open Graph/Twitter and a JSON-LD skeleton. Scores reflect technical checks only; no ranking or citation is guaranteed. Not charged if the site blocks us or is unreachable (422, charged:false).
"method": "POST", "content_type": "application/json",
"price_usd": 0.0997, // 99700 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/seo-v2",
"you_provide": { // JSON body fields
// no fields: send {}
},
"request_body": // live, from your inputs
{
  "url": "https://www.python.org/",
  "keywords": [
    "python"
  ]
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "final_url": {
      "type": "string"
    },
    "score": {
      "type": "number"
    },
    "grade": {
      "type": "string"
    },
    "subscores": {
      "type": "object",
      "properties": {
        "technical": {
          "type": "integer"
        },
        "content": {
          "type": "integer"
        },
        "metadata": {
          "type": "integer"
        },
        "structured_data": {
          "type": "integer"
        },
        "aeo": {
          "type": "integer"
        }
      }
    },
    "checks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "pass": {
            "type": "boolean"
          },
          "severity": {
            "type": "string"
          },
          "points": {
            "type": "number"
          },
          "max": {
            "type": "integer"
          },
          "evidence": {
            "type": "string"
          },
          "fix": {
            "type": "object"
          }
        }
      }
    },
    "top_fixes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "check_id": {
            "type": "string"
          },
          "impact_points": {
            "type": "number"
          },
          "summary": {
            "type": "string"
          }
        }
      }
    },
    "generated": {
      "type": "object",
      "properties": {
        "meta_tags_html": {
          "type": "string"
        }
      }
    },
    "reason": {
      "type": "null"
    },
    "disclaimer": {
      "type": "string"
    }
  },
  "required": [
    "skill"
  ]
}
"example":
{
  "skill": "seo_v2",
  "version": "2.0",
  "url": "https://www.python.org/",
  "final_url": "https://www.python.org/",
  "score": 77.7,
  "grade": "C",
  "subscores": {
    "technical": 80,
    "content": 90,
    "metadata": 62,
    "structured_data": 83,
    "aeo": 72
  },
  "checks": [
    {
      "id": "canonical",
      "category": "technical",
      "pass": false,
      "severity": "medium",
      "points": 0.0,
      "max": 5,
      "evidence": "no rel=canonical",
      "fix": {
        "summary": "Use exactly one absolute, self-referencing canonical on the same host.",
        "snippet": "<link rel=\"canonical\" href=\"https://www.python.org/\">",
        "snippet_lang": "html",
        "effort": "S"
      }
    },
    {
      "id": "h1",
      "category": "content",
      "pass": false,
      "severity": "medium",
      "points": 3.0,
      "max": 5,
      "evidence": "5 H1 elements",
      "fix": {
        "summary": "Use exactly one H1 that states the page topic in the same words as the title.",
        "snippet": "<h1>Functions Defined</h1>",
        "snippet_lang": "html",
        "effort": "S"
      }
    },
    {
      "id": "title",
      "category": "metadata",
      "pass": false,
      "severity": "medium",
      "points": 3.0,
      "max": 6,
      "evidence": "title 21 chars: 'Welcome to Python.org'",
      "fix": {
        "summary": "Use one <title> of 30-60 characters that names the page topic.",
        "snippet": "<title>Welcome to</title>",
        "snippet_lang": "html",
        "effort": "S"
      }
    }
  ],
  "top_fixes": [
    {
      "check_id": "canonical",
      "impact_points": 5.0,
      "summary": "Use exactly one absolute, self-referencing canonical on the same host."
    },
    {
      "check_id": "title",
      "impact_points": 3.0,
      "summary": "Use one <title> of 30-60 characters that names the page topic."
    },
    {
      "check_id": "meta_description",
      "impact_points": 2.5,
      "summary": "Write a 70-160 character meta description from the page's own text."
    }
  ],
  "generated": {
    "meta_tags_html": "<title>Welcome to</title>\n<meta name=\"description\" content=\"Notice: This page displays a fallback because interactive scripts did not run.\">\n<link rel=\"canonical\" href=\"https://www.python.org/\">"
  },
  "reason": null,
  "disclaimer": "Scores reflect technical checks only; no ranking or citation is guaranteed."
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/seo-v2 with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "99700", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0997 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/seo-v2 on this host and decodes the 402. Never pays.
}
"seo-compare": { SEO Compare $0.0503 Runs SEO Optimizer v2 on your page and up to 3 competitor pages and returns a per-check gap table. Not charged if your page blocks us or is unreachable (422, charged:false).
"method": "POST", "content_type": "application/json",
"price_usd": 0.0503, // 50300 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/seo-v2",
"you_provide": { // JSON body fields
// no fields: send {}
},
"request_body": // live, from your inputs
{
  "url": "https://www.python.org/",
  "competitor_urls": [
    "https://www.ruby-lang.org/en/"
  ]
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "you": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string"
        },
        "final_url": {
          "type": "string"
        },
        "score": {
          "type": "number"
        },
        "grade": {
          "type": "string"
        },
        "subscores": {
          "type": "object",
          "properties": {
            "technical": {
              "type": "integer"
            },
            "content": {
              "type": "integer"
            },
            "metadata": {
              "type": "integer"
            },
            "structured_data": {
              "type": "integer"
            },
            "aeo": {
              "type": "integer"
            }
          }
        },
        "reason": {
          "type": "null"
        }
      }
    },
    "competitors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string"
          },
          "final_url": {
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "grade": {
            "type": "string"
          },
          "subscores": {
            "type": "object"
          },
          "reason": {
            "type": "null"
          }
        }
      }
    },
    "gaps": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "check_id": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "max": {
            "type": "integer"
          },
          "yours": {
            "type": "number"
          },
          "competitors": {
            "type": "array"
          },
          "gap_points": {
            "type": "number"
          },
          "fix": {
            "type": "string"
          }
        }
      }
    },
    "disclaimer": {
      "type": "string"
    }
  },
  "required": [
    "skill"
  ]
}
"example":
{
  "skill": "seo_compare",
  "you": {
    "url": "https://www.python.org/",
    "final_url": "https://www.python.org/",
    "score": 78.0,
    "grade": "C",
    "subscores": {
      "technical": 80,
      "content": 90,
      "metadata": 62,
      "structured_data": 83,
      "aeo": 73
    },
    "reason": null
  },
  "competitors": [
    {
      "url": "https://www.ruby-lang.org/en/",
      "final_url": "https://www.ruby-lang.org/en/",
      "score": 68.8,
      "grade": "C",
      "subscores": {
        "technical": 100,
        "content": 75,
        "metadata": 72,
        "structured_data": 0,
        "aeo": 73
      },
      "reason": null
    }
  ],
  "gaps": [
    {
      "check_id": "canonical",
      "category": "technical",
      "max": 5,
      "yours": 0.0,
      "competitors": [
        5.0
      ],
      "gap_points": 5.0,
      "fix": "Use exactly one absolute, self-referencing canonical on the same host."
    },
    {
      "check_id": "twitter_card",
      "category": "metadata",
      "max": 2,
      "yours": 0.0,
      "competitors": [
        2.0
      ],
      "gap_points": 2.0,
      "fix": "Add a twitter:card type; X reuses your Open Graph tags for the rest."
    },
    {
      "check_id": "qa_structure",
      "category": "aeo",
      "max": 3,
      "yours": 2.0,
      "competitors": [
        3.0
      ],
      "gap_points": 1.0,
      "fix": "Break content into question headings with short direct answers, or into lists/steps."
    }
  ],
  "disclaimer": "Scores reflect technical checks only; no ranking or citation is guaranteed."
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/seo-compare with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "50300", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0503 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/seo-compare on this host and decodes the 402. Never pays.
}
"agent-ready-audit": { Agent-Ready Audit $0.1993 Audits how ~17 AI crawlers and agents (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, ChatGPT-User, ...) can reach and read a site: robots rules per bot, live user-agent probes, llms.txt, sitemap, JSON-LD, canonical host, agent interfaces. Does not guarantee crawling, ranking, citation, or traffic. Not charged if the site blocks us or is unreachable (422, charged:false).
"method": "POST", "content_type": "application/json",
"price_usd": 0.1993, // 199300 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
// no fields: send {}
},
"request_body": // live, from your inputs
{
  "url": "https://www.python.org/",
  "max_pages": 5
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "score": {
      "type": "number"
    },
    "grade": {
      "type": "string"
    },
    "subscores": {
      "type": "object",
      "properties": {
        "crawler_access": {
          "type": "integer"
        },
        "machine_readable_summary": {
          "type": "integer"
        },
        "structured_data": {
          "type": "integer"
        },
        "discoverability": {
          "type": "integer"
        },
        "content_readability": {
          "type": "integer"
        },
        "agent_interfaces": {
          "type": "null"
        }
      }
    },
    "bots": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "operator": {
            "type": "string"
          },
          "class": {
            "type": "string"
          },
          "robots": {
            "type": "string"
          },
          "matched_rule": {
            "type": "string"
          },
          "http_probe": {
            "type": "object"
          }
        }
      }
    },
    "checks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "pass": {
            "type": "boolean"
          },
          "severity": {
            "type": "string"
          },
          "points": {
            "type": "number"
          },
          "max": {
            "type": "integer"
          },
          "evidence": {
            "type": "string"
          },
          "fix": {
            "type": "object"
          }
        }
      }
    },
    "pages_audited": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "reason": {
      "type": "null"
    },
    "disclaimer": {
      "type": "string"
    }
  },
  "required": [
    "skill"
  ]
}
"example":
{
  "skill": "agent_ready_audit",
  "url": "https://www.python.org/",
  "score": 62.8,
  "grade": "D",
  "subscores": {
    "crawler_access": 100,
    "machine_readable_summary": 0,
    "structured_data": 50,
    "discoverability": 43,
    "content_readability": 100,
    "agent_interfaces": null
  },
  "bots": [
    {
      "name": "GPTBot",
      "operator": "OpenAI",
      "class": "training",
      "robots": "not_specified",
      "matched_rule": "group * has no rule for / (allowed)",
      "http_probe": {
        "status": 200,
        "blocked_by_waf": false,
        "probed_as": "GPTBot"
      }
    },
    {
      "name": "ClaudeBot",
      "operator": "Anthropic",
      "class": "training",
      "robots": "not_specified",
      "matched_rule": "group * has no rule for / (allowed)",
      "http_probe": {
        "status": 200,
        "blocked_by_waf": false,
        "probed_as": "GPTBot"
      }
    },
    {
      "name": "Google-Extended",
      "operator": "Google",
      "class": "training",
      "robots": "not_specified",
      "matched_rule": "group * has no rule for / (allowed)",
      "http_probe": {
        "status": 200,
        "blocked_by_waf": false,
        "probed_as": "GPTBot"
      }
    }
  ],
  "checks": [
    {
      "id": "llms_txt",
      "category": "machine_readable_summary",
      "pass": false,
      "severity": "medium",
      "points": 0.0,
      "max": 8,
      "evidence": "no /llms.txt",
      "fix": {
        "summary": "Publish /llms.txt in the llmstxt.org shape (see artifacts.llms_txt).",
        "snippet": "",
        "snippet_lang": "txt",
        "effort": "S"
      }
    },
    {
      "id": "llms_full_txt",
      "category": "machine_readable_summary",
      "pass": false,
      "severity": "low",
      "points": 0.0,
      "max": 3,
      "evidence": "no /llms-full.txt",
      "fix": {
        "summary": "Publish /llms-full.txt with the full text of your key pages (see artifacts.llms_full_txt).",
        "snippet": "",
        "snippet_lang": "txt",
        "effort": "S"
      }
    }
  ],
  "pages_audited": [
    "https://www.python.org/",
    "https://www.python.org/psf-landing/",
    "https://www.python.org/jobs/"
  ],
  "reason": null,
  "disclaimer": "Improves technical accessibility for AI crawlers and agents. Does not guarantee crawling, ranking, citation, or traffic."
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/agent-ready-audit with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "199300", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.1993 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/agent-ready-audit on this host and decodes the 402. Never pays.
}
"agent-ready-kit": { Agent-Ready Website Kit $0.2502 Agent-Ready Audit plus generated files: llms.txt, llms-full.txt, merged robots.txt AI section, sitemap.xml, JSON-LD and meta/OG per page, agent card, and an install guide (zip). Unknown facts stay TODO. Kit license: No-Resale License (LICENSE.md in the zip; https://grokzilla.shop/kits/license). Not charged if the site blocks us or is unreachable (422, charged:false).
"method": "POST", "content_type": "application/json",
"price_usd": 0.2502, // 250200 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
// no fields: send {}
},
"request_body": // live, from your inputs
{
  "url": "https://www.python.org/",
  "max_pages": 5,
  "crawler_policy": "allow_search_block_training"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "url": {
      "type": "string"
    },
    "score": {
      "type": "number"
    },
    "grade": {
      "type": "string"
    },
    "subscores": {
      "type": "object",
      "properties": {
        "crawler_access": {
          "type": "integer"
        },
        "machine_readable_summary": {
          "type": "integer"
        },
        "structured_data": {
          "type": "integer"
        },
        "discoverability": {
          "type": "integer"
        },
        "content_readability": {
          "type": "integer"
        },
        "agent_interfaces": {
          "type": "null"
        }
      }
    },
    "bots": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "operator": {
            "type": "string"
          },
          "class": {
            "type": "string"
          },
          "robots": {
            "type": "string"
          },
          "matched_rule": {
            "type": "string"
          },
          "http_probe": {
            "type": "object"
          }
        }
      }
    },
    "checks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "pass": {
            "type": "boolean"
          },
          "severity": {
            "type": "string"
          },
          "points": {
            "type": "number"
          },
          "max": {
            "type": "integer"
          },
          "evidence": {
            "type": "string"
          },
          "fix": {
            "type": "object"
          }
        }
      }
    },
    "pages_audited": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "reason": {
      "type": "null"
    },
    "disclaimer": {
      "type": "string"
    },
    "artifacts": {
      "type": "object",
      "properties": {
        "robots_txt_ai_block": {
          "type": "string"
        },
        "llms_txt": {
          "type": "string"
        }
      }
    },
    "bundle": {
      "type": "object",
      "properties": {
        "filename": {
          "type": "string"
        },
        "encoding": {
          "type": "string"
        },
        "bytes": {
          "type": "integer"
        },
        "files": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    }
  },
  "required": [
    "skill"
  ]
}
"example":
{
  "skill": "agent_ready_kit",
  "url": "https://www.python.org/",
  "score": 62.8,
  "grade": "D",
  "subscores": {
    "crawler_access": 100,
    "machine_readable_summary": 0,
    "structured_data": 50,
    "discoverability": 43,
    "content_readability": 100,
    "agent_interfaces": null
  },
  "bots": [
    {
      "name": "GPTBot",
      "operator": "OpenAI",
      "class": "training",
      "robots": "not_specified",
      "matched_rule": "group * has no rule for / (allowed)",
      "http_probe": {
        "status": 200,
        "blocked_by_waf": false,
        "probed_as": "GPTBot"
      }
    },
    {
      "name": "ClaudeBot",
      "operator": "Anthropic",
      "class": "training",
      "robots": "not_specified",
      "matched_rule": "group * has no rule for / (allowed)",
      "http_probe": {
        "status": 200,
        "blocked_by_waf": false,
        "probed_as": "GPTBot"
      }
    },
    {
      "name": "Google-Extended",
      "operator": "Google",
      "class": "training",
      "robots": "not_specified",
      "matched_rule": "group * has no rule for / (allowed)",
      "http_probe": {
        "status": 200,
        "blocked_by_waf": false,
        "probed_as": "GPTBot"
      }
    }
  ],
  "checks": [
    {
      "id": "llms_txt",
      "category": "machine_readable_summary",
      "pass": false,
      "severity": "medium",
      "points": 0.0,
      "max": 8,
      "evidence": "no /llms.txt",
      "fix": {
        "summary": "Publish /llms.txt in the llmstxt.org shape (see artifacts.llms_txt).",
        "snippet": "",
        "snippet_lang": "txt",
        "effort": "S"
      }
    },
    {
      "id": "llms_full_txt",
      "category": "machine_readable_summary",
      "pass": false,
      "severity": "low",
      "points": 0.0,
      "max": 3,
      "evidence": "no /llms-full.txt",
      "fix": {
        "summary": "Publish /llms-full.txt with the full text of your key pages (see artifacts.llms_full_txt).",
        "snippet": "",
        "snippet_lang": "txt",
        "effort": "S"
      }
    }
  ],
  "pages_audited": [
    "https://www.python.org/",
    "https://www.python.org/psf-landing/",
    "https://www.python.org/jobs/"
  ],
  "reason": null,
  "disclaimer": "Improves technical accessibility for AI crawlers and agents. Does not guarantee crawling, ranking, citation, or traffic.",
  "artifacts": {
    "robots_txt_ai_block": "# BEGIN agent-ready AI crawler rules (generated)\n# policy: allow_search_block_training  (bot tokens from operator docs, accessed 2026-10-16)\n# allowed bots repeat your User-agent: * rules, because a named group replaces the * group (RFC 9309)\n\nUser-agent: GPTBot\nDisallow: /\n\nUser-agent: ClaudeBot\nDisallow: /\n\nUser-agent: Google-Extended\nDisallow: /\n\nUser-agent: Applebot-Extended\nDisallow: /\n\nUser-agent: CCBot\nDisallow: /\n\nUser-agent: meta-externalagent\nDisallow: /\n\nUser-agent: Bytespider\nDisallow: /\n\nUser-agent: OAI-SearchBot\nDisallow: /~guido/orlijn/\nDisallow: /webstats/\n\nUser-agent: Claude-S",
    "llms_txt": "# Python.org\n\n> The official home of the Python Programming Language\n\n## Pages\n\n- [Welcome to Python.org](https://www.python.org/): The official home of the Python Programming Language\n- [Python Software Foundation](https://www.python.org/psf-landing/): The official home of the Python Programming Language\n- [Python Job Board | Python.org](https://www.python.org/jobs/): The official home of the Python Programming Language\n- [Our Community | Python.org](https://www.python.org/community/): The offi"
  },
  "bundle": {
    "filename": "agent-ready-kit.zip",
    "encoding": "base64",
    "bytes": 32631,
    "files": [
      ".well-known/agent-card.json",
      "INSTALL.md",
      "jsonld/community.json",
      "jsonld/community_irc.json",
      "jsonld/index.json",
      "jsonld/jobs.json",
      "jsonld/psf-landing.json",
      "llms-full.txt",
      "llms.txt",
      "meta/community.html",
      "meta/community_irc.html",
      "meta/index.html",
      "meta/jobs.html",
      "meta/psf-landing.html",
      "robots.txt",
      "sitemap.xml"
    ]
  }
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/agent-ready-kit with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "250200", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.2502 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/agent-ready-kit on this host and decodes the 402. Never pays.
}
"agent-ready-recheck": { Agent-Ready Recheck $0.0102 Re-runs an Agent-Ready audit from its report_id (30 days) and returns what got fixed or regressed. Not charged if the site blocks us or is unreachable (422, charged:false).
"method": "POST", "content_type": "application/json",
"price_usd": 0.0102, // 10200 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
// no fields: send {}
},
"request_body": // live, from your inputs
{
  "report_id": "ar.<report_id from a previous audit>.<sig>"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "score": {
      "type": "number"
    },
    "grade": {
      "type": "string"
    },
    "subscores": {
      "type": "object",
      "properties": {
        "crawler_access": {
          "type": "integer"
        },
        "machine_readable_summary": {
          "type": "integer"
        },
        "structured_data": {
          "type": "integer"
        },
        "discoverability": {
          "type": "integer"
        },
        "content_readability": {
          "type": "integer"
        },
        "agent_interfaces": {
          "type": "null"
        }
      }
    },
    "diff": {
      "type": "object",
      "properties": {
        "previous_score": {
          "type": "number"
        },
        "score_delta": {
          "type": "number"
        },
        "fixed": {
          "type": "array"
        },
        "regressed": {
          "type": "array"
        }
      }
    },
    "reason": {
      "type": "null"
    },
    "disclaimer": {
      "type": "string"
    },
    "skill": {
      "type": "string"
    },
    "changed_checks": {
      "type": "array"
    },
    "still_failing_count": {
      "type": "integer"
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "skill"
  ]
}
"example":
{
  "url": "https://www.python.org/",
  "score": 62.8,
  "grade": "D",
  "subscores": {
    "crawler_access": 100,
    "machine_readable_summary": 0,
    "structured_data": 50,
    "discoverability": 43,
    "content_readability": 100,
    "agent_interfaces": null
  },
  "diff": {
    "previous_score": 62.8,
    "score_delta": 0.0,
    "fixed": [],
    "regressed": []
  },
  "reason": null,
  "disclaimer": "Improves technical accessibility for AI crawlers and agents. Does not guarantee crawling, ranking, citation, or traffic.",
  "skill": "agent_ready_recheck",
  "changed_checks": [],
  "still_failing_count": 2,
  "note": "Recheck only. Run agent-ready-audit for the full check list, fixes and artifacts."
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/agent-ready-recheck with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "10200", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0102 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/agent-ready-recheck on this host and decodes the 402. Never pays.
}
"ai-detector": { AI Content Detector $0.01 Estimate whether text (or a web page's text) is AI-written using a trained classifier: about 78% accurate on a held-out benchmark (not a guarantee). Uncertain results suggest a rerun on a longer section (300+ words); tell phrases are only a secondary 'possible AI influence' signal.
"method": "POST", "content_type": "application/json",
"price_usd": 0.01, // 10000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
optional string URL of the page to check. Send either url or text (at least one). Optional · string
optional string The text to check for likely AI generation. Send either text or url. Optional · string Example: "So I finally fixed the porch light on Saturday. It's worth noting that I'd tried twice before and gave up (the wiring is ancient). Honestly the whole thing was
},
"request_body": // live, from your inputs
{
  "text": "So I finally fixed the porch light on Saturday. It's worth noting that I'd tried twice before and gave up (the wiring is ancient). Honestly the whole thing was a testament to stubbornness. My brother Sam held the ladder and complained the entire time, which didn't help one bit. In conclusion, the bulb works, the switch clicks, and I only shocked myself once! Next up is the doorbell, if I can find the manual. I can't, probably. It's in a box somewhere in the garage behind 3 bikes and a broken lawnmower."
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "verdict": {
      "type": "string"
    },
    "classifier": {
      "type": "object",
      "properties": {
        "verdict": {
          "type": "string"
        },
        "probability_ai": {
          "type": "number"
        },
        "threshold_ai": {
          "type": "number"
        },
        "threshold_human": {
          "type": "number"
        },
        "model_version": {
          "type": "string"
        },
        "model_kind": {
          "type": "string"
        }
      }
    },
    "content_type": {
      "type": "string"
    },
    "possible_ai_influence": {
      "type": "boolean"
    },
    "rubric_score": {
      "type": "number"
    },
    "sections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "section": {
            "type": "string"
          },
          "section_weight": {
            "type": "number"
          },
          "result": {
            "type": "string"
          },
          "evidence": {
            "type": "array"
          }
        }
      }
    },
    "tell_phrases": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "phrase": {
            "type": "string"
          },
          "tell_weight": {
            "type": "number"
          },
          "count": {
            "type": "integer"
          }
        }
      }
    },
    "ai_likelihood": {
      "type": "number"
    },
    "band": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "signals": {
      "type": "object",
      "properties": {
        "sentence_length_mean": {
          "type": "number"
        },
        "sentence_length_variance": {
          "type": "number"
        },
        "burstiness": {
          "type": "number"
        },
        "type_token_ratio": {
          "type": "number"
        },
        "hapax_ratio": {
          "type": "number"
        },
        "punctuation_diversity": {
          "type": "integer"
        },
        "repeated_ngram_rate": {
          "type": "number"
        },
        "stock_phrase_per_100": {
          "type": "number"
        },
        "stock_phrase_hits": {
          "type": "integer"
        },
        "stock_phrases_found": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "contraction_rate": {
          "type": "number"
        },
        "average_word_length": {
          "type": "number"
        },
        "line_length_uniformity": {
          "type": "null"
        },
        "line_count": {
          "type": "integer"
        },
        "verse_like": {
          "type": "boolean"
        },
        "sentence_count": {
          "type": "integer"
        },
        "lexical_features_used": {
          "type": "boolean"
        }
      }
    },
    "method": {
      "type": "string"
    },
    "word_count": {
      "type": "integer"
    },
    "caveats": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "skill"
  ]
}
"example":
{
  "skill": "ai_detector",
  "verdict": "possible_ai_influence",
  "classifier": {
    "verdict": "uncertain",
    "probability_ai": 0.362,
    "threshold_ai": 0.585,
    "threshold_human": 0.3233,
    "model_version": "2026-10-13",
    "model_kind": "logistic_regression"
  },
  "content_type": "opinion",
  "possible_ai_influence": true,
  "rubric_score": 0.4,
  "sections": [
    {
      "section": "rhythm",
      "section_weight": 0.1,
      "result": "no_signal",
      "evidence": [
        "8 sentences, sentence-length CV 0.35 (AI <= 0.34, human >= 0.55)",
        "rhythm is in the overlap range where human and prompted-AI text both sit"
      ]
    },
    {
      "section": "vocabulary",
      "section_weight": 0.4,
      "result": "ai_sign",
      "evidence": [
        "tell-phrase weight 2.4 (2.64 per 100 words, 138-entry list)",
        "tells: it's worth noting, a testament to, in conclusion",
        "lexical diversity MTLD 105 (informational, not scored)",
        "surprisal mean 3.21, variance 2.15, spike 0.40; rare-word share 0.033; MATTR 0.834; Zipf slope deviation 0.63",
        "tell phrases are dense; possible AI influence (secondary signal)"
      ]
    },
    {
      "section": "voice_structure",
      "section_weight": 0.3,
      "result": "no_signal",
      "evidence": [
        "ai cues: hedging (2 hedges)",
        "human cues: none",
        "first person, names, dialogue and sensory detail are not counted either way"
      ]
    },
    {
      "section": "resolution",
      "section_weight": 0.2,
      "result": "no_signal",
      "evidence": [
        "rhythm vs vocabulary: no_overlap (no_signal / ai_sign)",
        "vocabulary vs voice_structure: no_overlap (ai_sign / no_signal)",
        "voice_structure vs rhythm: no_overlap (no_signal / no_signal)",
        "tell phrases present but not confirmed by two sections; secondary signal only"
      ]
    }
  ],
  "tell_phrases": [
    {
      "phrase": "it's worth noting",
      "tell_weight": 0.9,
      "count": 1
    },
    {
      "phrase": "a testament to",
      "tell_weight": 0.9,
      "count": 1
    },
    {
      "phrase": "in conclusion",
      "tell_weight": 0.6,
      "count": 1
    }
  ],
  "ai_likelihood": 0.7822,
  "band": [
    0.5334,
    1.0
  ],
  "signals": {
    "sentence_length_mean": 11.375,
    "sentence_length_variance": 16.2344,
    "burstiness": 0.3542,
    "type_token_ratio": 0.7582,
    "hapax_ratio": 0.8841,
    "punctuation_diversity": 4,
    "repeated_ngram_rate": 0.0,
    "stock_phrase_per_100": 3.2967,
    "stock_phrase_hits": 3,
    "stock_phrases_found": [
      "it's worth noting",
      "a testament to",
      "in conclusion"
    ],
    "contraction_rate": 3.2967,
    "average_word_length": 4.3846,
    "line_length_uniformity": null,
    "line_count": 1,
    "verse_like": false,
    "sentence_count": 8,
    "lexical_features_used": true
  },
  "method": "stylometry",
  "word_count": 91,
  "caveats": [
    "Detection is probabilistic and should not be used as the only evidence that a text was or was not written by a person.",
    "ai_likelihood is a stylometric score from 0 to 1, not a calibrated probability. The band widens when there is less text and is not a statistical confidence interval.",
    "A low score means these surface patterns are weak. It does not prove a person wrote the text.",
    "Weights were chosen on a small set of public-domain prose, poems, and synthetic assistant-style paragraphs. Fixture accuracy is not a field accuracy."
  ]
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/ai-detector with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "10000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.01 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/ai-detector on this host and decodes the 402. Never pays.
}
"json-flatten": { JSON Flattener $0.006 Deterministic nested JSON to flat path-value map. Arrays, custom separators, depth limits.
"method": "POST", "content_type": "application/json",
"price_usd": 0.006, // 6000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required any JSON Any JSON value. Nested objects become dot-path keys: {"a":{"b":1}} -> {"a.b":1}. Required · any JSON Example: {"a": {"b": 1}}
optional object Optional JSON object of flatten options, e.g. {"sep":"/"}. Optional · object
},
"request_body": // live, from your inputs
{
  "data": {
    "a": {
      "b": 1
    }
  }
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "flat": {
      "type": "object",
      "properties": {
        "a.b": {
          "type": "integer"
        }
      }
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "json_flatten",
  "ok": true,
  "flat": {
    "a.b": 1
  }
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/json-flatten with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "6000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.006 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/json-flatten on this host and decodes the 402. Never pays.
}
"json-sort": { JSON Key Sorter $0.003 Recursively sort object keys and return canonical compact JSON. Deterministic, no network.
"method": "POST", "content_type": "application/json",
"price_usd": 0.003, // 3000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/json-sort",
"you_provide": { // JSON body fields
required any JSON Any JSON value. Object keys are sorted recursively; you also get canonical compact JSON. Required · any JSON Example: {"b": 1, "a": {"d": 2, "c": 3}}
optional boolean true sorts keys Z->A, false (default) sorts A->Z. Optional · boolean default false Example: false
},
"request_body": // live, from your inputs
{
  "data": {
    "b": 1,
    "a": {
      "d": 2,
      "c": 3
    }
  },
  "reverse": false
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "sorted": {
      "type": "object",
      "properties": {
        "a": {
          "type": "object",
          "properties": {
            "c": {
              "type": "integer"
            },
            "d": {
              "type": "integer"
            }
          }
        },
        "b": {
          "type": "integer"
        }
      }
    },
    "canonical": {
      "type": "string"
    },
    "bytes": {
      "type": "integer"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "json_sort",
  "ok": true,
  "sorted": {
    "a": {
      "c": 3,
      "d": 2
    },
    "b": 1
  },
  "canonical": "{\"a\":{\"c\":3,\"d\":2},\"b\":1}",
  "bytes": 25
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/json-sort with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.003 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/json-sort on this host and decodes the 402. Never pays.
}
"text-diff": { Text Diff $0.006 Lightweight deterministic line/word/char diff. Structured ops plus a one-line delta summary.
"method": "POST", "content_type": "application/json",
"price_usd": 0.006, // 6000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/text-diff",
"you_provide": { // JSON body fields
required string The original / old text. Required · string Example: "hello"
required string The new / changed text to compare against a. Required · string Example: "hallo"
},
"request_body": // live, from your inputs
{
  "a": "hello",
  "b": "hallo"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "mode": {
      "type": "string"
    },
    "ops": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "op": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        }
      }
    },
    "inserted": {
      "type": "integer"
    },
    "deleted": {
      "type": "integer"
    },
    "equal": {
      "type": "integer"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "text_diff",
  "ok": true,
  "mode": "lines",
  "ops": [
    {
      "op": "del",
      "value": "hello"
    },
    {
      "op": "ins",
      "value": "hallo"
    }
  ],
  "inserted": 1,
  "deleted": 1,
  "equal": 0
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/text-diff with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "6000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.006 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/text-diff on this host and decodes the 402. Never pays.
}
"url-normalize": { URL Normalizer $0.005 Canonicalize URLs: strip tracking params, force HTTPS, sort query, extract components.
"method": "POST", "content_type": "application/json",
"price_usd": 0.005, // 5000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required string Any URL. Tracking params (utm_*), default ports and case are normalised. Required · string Example: "http://example.com/?utm_source=x"
},
"request_body": // live, from your inputs
{
  "url": "http://example.com/?utm_source=x"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "canonical": {
      "type": "string"
    },
    "scheme": {
      "type": "string"
    },
    "host": {
      "type": "string"
    },
    "path": {
      "type": "string"
    },
    "query": {
      "type": "object"
    },
    "stripped_tracking": {
      "type": "boolean"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "url_normalize",
  "ok": true,
  "canonical": "https://example.com/",
  "scheme": "https",
  "host": "example.com",
  "path": "/",
  "query": {},
  "stripped_tracking": true
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/url-normalize with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "5000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.005 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/url-normalize on this host and decodes the 402. Never pays.
}
"html-clean": { HTML Cleaner $0.008 Strip scripts/styles and return readable text or markdown from HTML. mode normalized: text with NFKC and zero-width/bidi characters stripped.
"method": "POST", "content_type": "application/json",
"price_usd": 0.008, // 8000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/html-clean",
"you_provide": { // JSON body fields
required string Raw HTML to strip down. Scripts, styles and tags are removed. Required · string Example: "<p>hi</p>"
optional string "text" (default) for plain text, "markdown" to keep basic structure. Optional · string one of "text", "markdown", "normalized" Example: "text"
},
"request_body": // live, from your inputs
{
  "html": "<p>hi</p>",
  "mode": "text"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "mode": {
      "type": "string"
    },
    "chars": {
      "type": "integer"
    },
    "output": {
      "type": "string"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "html_clean",
  "ok": true,
  "mode": "text",
  "chars": 2,
  "output": "hi"
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/html-clean with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "8000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.008 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/html-clean on this host and decodes the 402. Never pays.
}
"json-schema-validate": { JSON Schema Validator $0.006 Cheap schema gate: type, required, properties, array items, plus format checks (email, date, date-time, uri, ipv4, ipv6, uuid, hostname).
"method": "POST", "content_type": "application/json",
"price_usd": 0.006, // 6000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required any JSON The JSON value you want to validate. Required · any JSON Example: {"n": 1}
required object A JSON Schema object, e.g. {"type":"object","required":["n"]}. Required · object Example: {"type": "object", "required": ["n"]}
},
"request_body": // live, from your inputs
{
  "instance": {
    "n": 1
  },
  "schema": {
    "type": "object",
    "required": [
      "n"
    ]
  }
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "valid": {
      "type": "boolean"
    },
    "errors": {
      "type": "array"
    },
    "checked": {
      "type": "boolean"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "json_schema_validate",
  "ok": true,
  "valid": true,
  "errors": [],
  "checked": true
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/json-schema-validate with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "6000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.006 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/json-schema-validate on this host and decodes the 402. Never pays.
}
"keyword-extract": { Keyword Extractor $0.008 Deterministic term ranking from free text. Stopword-filtered. ngrams 2-3 adds scored multi-word phrases.
"method": "POST", "content_type": "application/json",
"price_usd": 0.008, // 8000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required string The text to pull keywords from. Required · string Example: "x402 micropay on Base USDC"
optional integer Maximum number of keywords to return. Optional · integer Example: 5
optional integer Value for `ngrams`. Optional · integer min 1 · max 3 · default 1
},
"request_body": // live, from your inputs
{
  "text": "x402 micropay on Base USDC",
  "limit": 5
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "keywords": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "term": {
            "type": "string"
          },
          "count": {
            "type": "integer"
          }
        }
      }
    },
    "unique_terms": {
      "type": "integer"
    },
    "tokens": {
      "type": "integer"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "keyword_extract",
  "ok": true,
  "keywords": [
    {
      "term": "x402",
      "count": 1
    },
    {
      "term": "micropay",
      "count": 1
    },
    {
      "term": "base",
      "count": 1
    },
    {
      "term": "usdc",
      "count": 1
    }
  ],
  "unique_terms": 4,
  "tokens": 4
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/keyword-extract with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "8000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.008 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/keyword-extract on this host and decodes the 402. Never pays.
}
"uuid-mint": { UUID Minter $0.003 Mint 1-32 IDs for agent job IDs and idempotency keys: UUID v4 (default), v7 or v1 (time-ordered), or ULID (format: ulid). v7 and ULID batches sort in mint order.
"method": "POST", "content_type": "application/json",
"price_usd": 0.003, // 3000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/uuid-mint",
"you_provide": { // JSON body fields
optional integer How many UUIDs to mint in one call. Optional · integer min 1 · max 32 · default 1 Example: 2
optional integer 4 (random, default) or 1 (time-based). Optional · integer one of 1, 4, 7 · default 4 Example: 4
optional string Value for `format`. Optional · string one of "uuid", "ulid" · default "uuid"
},
"request_body": // live, from your inputs
{
  "count": 2,
  "version": 4
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "version": {
      "type": "integer"
    },
    "count": {
      "type": "integer"
    },
    "ids": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "uuid_mint",
  "ok": true,
  "version": 4,
  "count": 2,
  "ids": [
    "00000000-0000-4000-8000-000000000001",
    "00000000-0000-4000-8000-000000000002"
  ]
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/uuid-mint with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.003 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/uuid-mint on this host and decodes the 402. Never pays.
}
"slugify": { Slugify $0.003 Turn free text into a URL-safe lowercase slug. Deterministic, no network.
"method": "POST", "content_type": "application/json",
"price_usd": 0.003, // 3000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/slugify",
"you_provide": { // JSON body fields
required string Free text to turn into a URL-safe lowercase slug. Required · string max length 4000 Example: "Hello, Grokzilla Shop!"
optional integer Maximum slug length in characters. Optional · integer min 1 · max 200 · default 80 Example: 80
},
"request_body": // live, from your inputs
{
  "text": "Hello, Grokzilla Shop!",
  "max_len": 80
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "slug": {
      "type": "string"
    },
    "chars": {
      "type": "integer"
    },
    "empty": {
      "type": "boolean"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "slugify",
  "ok": true,
  "slug": "hello-grokzilla-shop",
  "chars": 20,
  "empty": false
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/slugify with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.003 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/slugify on this host and decodes the 402. Never pays.
}
"pii-redact": { PII Redactor $0.003 Redact emails, phone numbers, SSN-shaped strings, Luhn-valid card numbers and IPv4 addresses with typed placeholders. Deterministic, no network.
"method": "POST", "content_type": "application/json",
"price_usd": 0.003, // 3000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/pii-redact",
"you_provide": { // JSON body fields
required string Text to scrub. Emails, phones, SSN-shaped strings, card numbers and IPv4s become [TYPE] placeholders. Required · string max length 400000 Example: "Mail jane@example.com or call 555-123-4567."
},
"request_body": // live, from your inputs
{
  "text": "Mail jane@example.com or call 555-123-4567."
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "redacted": {
      "type": "string"
    },
    "counts_by_type": {
      "type": "object",
      "properties": {
        "email": {
          "type": "integer"
        },
        "ipv4": {
          "type": "integer"
        },
        "card": {
          "type": "integer"
        },
        "ssn": {
          "type": "integer"
        },
        "phone": {
          "type": "integer"
        }
      }
    },
    "total": {
      "type": "integer"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "pii_redact",
  "ok": true,
  "redacted": "Mail [EMAIL] or call [PHONE].",
  "counts_by_type": {
    "email": 1,
    "ipv4": 0,
    "card": 0,
    "ssn": 0,
    "phone": 1
  },
  "total": 2
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/pii-redact with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.003 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/pii-redact on this host and decodes the 402. Never pays.
}
"csv-normalize": { CSV Normalizer $0.003 Parse CSV into JSON rows keyed by trimmed snake_case headers, plus a type hint per column (integer, number, boolean, date, datetime, string). Deterministic, no network.
"method": "POST", "content_type": "application/json",
"price_usd": 0.003, // 3000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required string CSV text with a header row. Headers become trimmed snake_case keys. Required · string min length 1 · max length 400000 Example: "First Name,E-mail\nAda,ada@example.com\n"
optional string Field separator: "," (default), ";", tab or "|". Optional · string one of ",", ";", "\t", "|" · default "," Example: ","
},
"request_body": // live, from your inputs
{
  "csv": "First Name,E-mail\nAda,ada@example.com\n",
  "delimiter": ","
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "headers": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "first_name": {
            "type": "string"
          },
          "e_mail": {
            "type": "string"
          }
        }
      }
    },
    "row_count": {
      "type": "integer"
    },
    "column_types": {
      "type": "object",
      "properties": {
        "first_name": {
          "type": "string"
        },
        "e_mail": {
          "type": "string"
        }
      }
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "csv_normalize",
  "ok": true,
  "headers": [
    "first_name",
    "e_mail"
  ],
  "rows": [
    {
      "first_name": "Ada",
      "e_mail": "ada@example.com"
    }
  ],
  "row_count": 1,
  "column_types": {
    "first_name": "string",
    "e_mail": "string"
  }
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/csv-normalize with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.003 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/csv-normalize on this host and decodes the 402. Never pays.
}
"base64": { Base64 Encode/Decode $0.003 Encode UTF-8 text or decode it back: base64 (default; standard or URL-safe), base32, base58 (Bitcoin alphabet), hex or URI percent-encoding (codec). Deterministic, no network.
"method": "POST", "content_type": "application/json",
"price_usd": 0.003, // 3000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/base64",
"you_provide": { // JSON body fields
required string "encode" turns text into base64, "decode" turns base64 back into text. Required · string one of "encode", "decode" Example: "encode"
required string The UTF-8 text to encode, or the base64 string to decode. Required · string max length 400000 Example: "hello agent"
optional boolean true uses the URL-safe alphabet (- and _ instead of + and /). Optional · boolean default false Example: false
optional string Value for `codec`. Optional · string one of "base64", "base32", "base58", "hex", "uri" · default "base64"
},
"request_body": // live, from your inputs
{
  "mode": "encode",
  "text": "hello agent",
  "url_safe": false
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "mode": {
      "type": "string"
    },
    "url_safe": {
      "type": "boolean"
    },
    "output": {
      "type": "string"
    },
    "bytes": {
      "type": "integer"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "base64",
  "ok": true,
  "mode": "encode",
  "url_safe": false,
  "output": "aGVsbG8gYWdlbnQ=",
  "bytes": 11
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/base64 with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.003 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/base64 on this host and decodes the 402. Never pays.
}
"epoch-convert": { Epoch Converter $0.003 Convert epoch seconds or milliseconds (detected by magnitude) or an ISO-8601 string into epoch_s, epoch_ms, UTC ISO and ISO in any IANA time zone. Deterministic, no network.
"method": "POST", "content_type": "application/json",
"price_usd": 0.003, // 3000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required ['integer', 'number', 'string'] Epoch seconds or milliseconds (told apart by size), or an ISO-8601 date/time string. Required · ['integer', 'number', 'string'] max length 64 Example: 1700000000
optional string IANA time zone for iso_tz, e.g. America/Chicago. Default UTC. Optional · string min length 1 · max length 64 · default "UTC" Example: "America/Chicago"
},
"request_body": // live, from your inputs
{
  "value": 1700000000,
  "tz": "America/Chicago"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "input_kind": {
      "type": "string"
    },
    "epoch_s": {
      "type": "integer"
    },
    "epoch_ms": {
      "type": "integer"
    },
    "iso_utc": {
      "type": "string"
    },
    "iso_tz": {
      "type": "string"
    },
    "tz": {
      "type": "string"
    },
    "utc_offset": {
      "type": "string"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "epoch_convert",
  "ok": true,
  "input_kind": "epoch_s",
  "epoch_s": 1700000000,
  "epoch_ms": 1700000000000,
  "iso_utc": "2023-11-14T22:13:20Z",
  "iso_tz": "2023-11-14T16:13:20-06:00",
  "tz": "America/Chicago",
  "utc_offset": "-06:00"
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/epoch-convert with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.003 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/epoch-convert on this host and decodes the 402. Never pays.
}
"url-to-markdown": { URL to Markdown $0.003 Fetch one public web page and return its title and clean Markdown (headings, links, lists, code, tables). Honors robots.txt, SSRF-guarded, HTML only, 1 MB / 5 s caps. No JavaScript rendering.
"method": "POST", "content_type": "application/json",
"price_usd": 0.003, // 3000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required string A public http(s) page. robots.txt is honored; HTML only; JavaScript is not run. Required · string min length 8 · max length 2000 Example: "https://example.com"
},
"request_body": // live, from your inputs
{
  "url": "https://example.com"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "url": {
      "type": "string"
    },
    "final_url": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "markdown": {
      "type": "string"
    },
    "bytes": {
      "type": "integer"
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "url_to_markdown",
  "ok": true,
  "url": "https://example.com",
  "final_url": "https://example.com/",
  "title": "Example Domain",
  "markdown": "This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.",
  "bytes": 577,
  "truncated": false
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/url-to-markdown with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.003 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/url-to-markdown on this host and decodes the 402. Never pays.
}
"token-risk": { Token Risk (Base) $0.005 Heuristic risk checks for a Base ERC-20: contract code, metadata, proxy, owner/renounced, mint/blacklist/pause/fee selectors, deepest Uniswap/Aerodrome pool, and simulated sell/buy transfers with measured tax. Read-only public RPC. Not financial advice.
"method": "POST", "content_type": "application/json",
"price_usd": 0.005, // 5000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/token-risk",
"you_provide": { // JSON body fields
required string ERC-20 contract address on Base mainnet (0x + 40 hex). Required · string Example: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
optional string Only "base" (Base mainnet) for now. Optional · string one of "base" · default "base" Example: "base"
},
"request_body": // live, from your inputs
{
  "token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "chain": "base"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "token": {
      "type": "string"
    },
    "chain": {
      "type": "string"
    },
    "chain_id": {
      "type": "integer"
    },
    "block": {
      "type": "integer"
    },
    "symbol": {
      "type": "string"
    },
    "risk_level": {
      "type": "string"
    },
    "reasons": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "checks": {
      "type": "object",
      "properties": {
        "contract_code": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string"
            },
            "evidence": {
              "type": "object"
            }
          }
        },
        "erc20_metadata": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string"
            },
            "evidence": {
              "type": "object"
            }
          }
        },
        "proxy": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string"
            },
            "evidence": {
              "type": "object"
            }
          }
        },
        "ownership": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string"
            },
            "evidence": {
              "type": "object"
            }
          }
        },
        "privileged_functions": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string"
            },
            "evidence": {
              "type": "object"
            }
          }
        },
        "liquidity_pool": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string"
            },
            "evidence": {
              "type": "object"
            }
          }
        },
        "sell_simulation": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string"
            },
            "evidence": {
              "type": "object"
            }
          }
        },
        "buy_simulation": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string"
            },
            "evidence": {
              "type": "object"
            }
          }
        },
        "transfer_tax": {
          "type": "object",
          "properties": {
            "result": {
              "type": "string"
            },
            "evidence": {
              "type": "object"
            }
          }
        }
      }
    },
    "rpc": {
      "type": "string"
    },
    "disclaimer": {
      "type": "string"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "token_risk",
  "ok": true,
  "token": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
  "chain": "base",
  "chain_id": 8453,
  "block": 52494540,
  "symbol": "USDC",
  "risk_level": "medium",
  "reasons": [
    "proxy: warn",
    "ownership: warn",
    "privileged_functions: warn"
  ],
  "checks": {
    "contract_code": {
      "result": "pass",
      "evidence": {
        "bytecode_bytes": 1852,
        "block": 52494540
      }
    },
    "erc20_metadata": {
      "result": "pass",
      "evidence": {
        "name": "USD Coin",
        "symbol": "USDC",
        "decimals": 6,
        "total_supply": "4419304031200909",
        "missing": []
      }
    },
    "proxy": {
      "result": "warn",
      "evidence": {
        "standard": "zeppelinos (legacy unstructured storage)",
        "implementation": "0x2ce6311ddae708829bc0784c967b7d77d19fd779",
        "admin": "0x4fc7850364958d97b4d3f5a08f79db2493f8ca44",
        "note": "upgradeable: whoever controls the proxy can replace the token's code"
      }
    },
    "ownership": {
      "result": "warn",
      "evidence": {
        "function": "owner()",
        "owner": "0x3abd6f64a422225e61e435bae41db12096106df7",
        "renounced": false
      }
    },
    "privileged_functions": {
      "result": "warn",
      "evidence": {
        "found": {
          "mint": [
            "configureMinter(address,uint256)",
            "mint(address,uint256)"
          ],
          "blacklist": [
            "blacklist(address)",
            "isBlacklisted(address)"
          ],
          "pause": [
            "pause()",
            "unpause()"
          ]
        },
        "scanned": [
          "token",
          "implementation"
        ],
        "note": "selector presence only; who may call them is not checked"
      }
    },
    "liquidity_pool": {
      "result": "pass",
      "evidence": {
        "dex": "uniswap_v3",
        "variant": "fee 3000",
        "pool": "0x6c561b446416e1a00e8e93e221854d6ea4171372",
        "quote_token": "WETH",
        "token_balance": "76072526114911",
        "quote_balance": "29060996929756341666149",
        "thin_liquidity": false,
        "pools_found": 7
      }
    },
    "sell_simulation": {
      "result": "pass",
      "evidence": {
        "pool": "0x6c561b446416e1a00e8e93e221854d6ea4171372",
        "amount": "76072526114",
        "balance_slot": "solidity:9",
        "method": "eth_simulateV1 transfer leg",
        "received": "76072526114"
      }
    },
    "buy_simulation": {
      "result": "pass",
      "evidence": {
        "pool": "0x6c561b446416e1a00e8e93e221854d6ea4171372",
        "amount": "76072526114",
        "balance_slot": "solidity:9",
        "method": "eth_simulateV1 transfer leg",
        "received": "76072526114"
      }
    },
    "transfer_tax": {
      "result": "pass",
      "evidence": {
        "sell_tax_pct": 0.0,
        "buy_tax_pct": 0.0,
        "note": "token-side transfer tax only; AMM/pool fees are not included"
      }
    }
  },
  "rpc": "mainnet.base.org",
  "disclaimer": "Informational only, not financial advice. These are automated heuristics from public on-chain reads and simulations at a single block. They can miss risks (owner actions after this block, time-, amount- or wallet-specific traps, off-chain controls, other pools) and can flag legitimate tokens (for example regulated stablecoins with blacklist and pause functions). Do your own research."
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/token-risk with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "5000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.005 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/token-risk on this host and decodes the 402. Never pays.
}
"json-repair": { JSON Repair $0.0041 Repair malformed or truncated JSON from LLMs, JS or Python: strips ```json fences and comments, fixes trailing commas, single quotes, unquoted keys, True/False/None, missing commas and unclosed strings/brackets. Returns the parsed JSON, a compact repaired JSON string and the list of fixes. Deterministic, no network.
"method": "POST", "content_type": "application/json",
"price_usd": 0.0041, // 4100 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required string Almost-JSON to fix: LLM output, JS/Python literals, ```json fences, or JSON cut off mid-way. Required · string min length 1 · max length 400000 Example: "{name: 'Ada', tags: ['math', 'code',], active: True, // note\n}"
},
"request_body": // live, from your inputs
{
  "text": "{name: 'Ada', tags: ['math', 'code',], active: True, // note\n}"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "json": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "active": {
          "type": "boolean"
        }
      }
    },
    "repaired": {
      "type": "string"
    },
    "fixes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "changed": {
      "type": "boolean"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "json_repair",
  "ok": true,
  "json": {
    "name": "Ada",
    "tags": [
      "math",
      "code"
    ],
    "active": true
  },
  "repaired": "{\"name\":\"Ada\",\"tags\":[\"math\",\"code\"],\"active\":true}",
  "fixes": [
    "unquoted_keys",
    "single_quotes",
    "trailing_commas",
    "python_literals",
    "removed_comments"
  ],
  "changed": true
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/json-repair with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "4100", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0041 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/json-repair on this host and decodes the 402. Never pays.
}
"cron-next": { Cron Next Runs $0.0031 Validate a 5-field cron expression (lists, ranges, steps, JAN-DEC/SUN-SAT names, @daily/@hourly macros) and return its next 1-20 run times in any IANA time zone (DST-aware), as local ISO, UTC ISO and epoch seconds. Deterministic, no network.
"method": "POST", "content_type": "application/json",
"price_usd": 0.0031, // 3100 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/cron-next",
"you_provide": { // JSON body fields
required string Five-field cron (minute hour day-of-month month day-of-week), e.g. "*/15 9-17 * * MON-FRI", or @daily. Required · string min length 1 · max length 200 Example: "*/15 9-17 * * MON-FRI"
optional string IANA time zone the schedule runs in, e.g. America/Chicago. Default UTC. Optional · string min length 1 · max length 64 · default "UTC" Example: "America/Chicago"
optional integer How many upcoming run times to return (1-20, default 5). Optional · integer min 1 · max 20 · default 5 Example: 3
optional string Optional ISO-8601 start; runs strictly after it are returned. Default: now. Optional · string min length 1 · max length 64 Example: "2026-10-16T12:42:00-05:00"
},
"request_body": // live, from your inputs
{
  "expr": "*/15 9-17 * * MON-FRI",
  "tz": "America/Chicago",
  "count": 3,
  "from": "2026-10-16T12:42:00-05:00"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "skill": {
      "type": "string"
    },
    "ok": {
      "type": "boolean"
    },
    "expr": {
      "type": "string"
    },
    "normalized": {
      "type": "string"
    },
    "tz": {
      "type": "string"
    },
    "from": {
      "type": "string"
    },
    "count": {
      "type": "integer"
    },
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "next_utc": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "next_epoch_s": {
      "type": "array",
      "items": {
        "type": "integer"
      }
    },
    "fields": {
      "type": "object",
      "properties": {
        "minute": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "hour": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "day_of_month": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "month": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        },
        "day_of_week": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        }
      }
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "skill": "cron_next",
  "ok": true,
  "expr": "*/15 9-17 * * MON-FRI",
  "normalized": "*/15 9-17 * * MON-FRI",
  "tz": "America/Chicago",
  "from": "2026-10-16T12:42:00-05:00",
  "count": 3,
  "next": [
    "2026-10-16T12:45:00-05:00",
    "2026-10-16T13:00:00-05:00",
    "2026-10-16T13:15:00-05:00"
  ],
  "next_utc": [
    "2026-10-16T17:45:00Z",
    "2026-10-16T18:00:00Z",
    "2026-10-16T18:15:00Z"
  ],
  "next_epoch_s": [
    1792172700,
    1792173600,
    1792174500
  ],
  "fields": {
    "minute": [
      0,
      15,
      30,
      45
    ],
    "hour": [
      9,
      10,
      11,
      12,
      13,
      14,
      15,
      16,
      17
    ],
    "day_of_month": [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12,
      13,
      14,
      15,
      16,
      17,
      18,
      19,
      20,
      21,
      22,
      23,
      24,
      25,
      26,
      27,
      28,
      29,
      30,
      31
    ],
    "month": [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    "day_of_week": [
      1,
      2,
      3,
      4,
      5
    ]
  }
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/cron-next with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3100", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0031 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/cron-next on this host and decodes the 402. Never pays.
}
"token-price": { Verified Token Price (Base) $0.002 Verified USD price for a Base ERC-20: DeFiLlama cross-checked against the deepest on-chain Uniswap/Aerodrome pool. Returns price, spread, staleness, confidence. Refused, not charged, if sources disagree over 2.5% or one is missing. Data only, not investment advice.
"method": "POST", "content_type": "application/json",
"price_usd": 0.002, // 2000 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required string ERC-20 contract address on Base mainnet (0x + 40 hex). USDC itself is not supported. Required · string Example: "0x4200000000000000000000000000000000000006"
optional string Only "base" (Base mainnet). Optional · string one of "base" · default "base"
optional string Value for `request_id`. Optional · string min length 1 · max length 64
},
"request_body": // live, from your inputs
{
  "token": "0x4200000000000000000000000000000000000006"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "skill": {
      "type": "string"
    },
    "service": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "token": {
          "type": "string"
        },
        "chain": {
          "type": "string"
        },
        "symbol": {
          "type": "string"
        },
        "decimals": {
          "type": "integer"
        },
        "price_usd": {
          "type": "string"
        },
        "spread_pct": {
          "type": "number"
        },
        "agree": {
          "type": "boolean"
        },
        "sources_agree_within_pct": {
          "type": "number"
        },
        "by_source": {
          "type": "object",
          "properties": {
            "defillama": {
              "type": "object"
            },
            "onchain": {
              "type": "object"
            }
          }
        },
        "disclaimer": {
          "type": "string"
        }
      }
    },
    "confidence": {
      "type": "number"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "fetched_at": {
            "type": "string"
          }
        }
      }
    },
    "generated_at": {
      "type": "string"
    },
    "data_as_of": {
      "type": "string"
    },
    "charged": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array"
    },
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "disclaimer": {
      "type": "string"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "ok": true,
  "skill": "token_price",
  "service": "token_price",
  "version": "1.0.0",
  "summary": "WETH $2433.056 (2 sources, spread 0.15%) - data only, not advice",
  "data": {
    "token": "0x4200000000000000000000000000000000000006",
    "chain": "base",
    "symbol": "WETH",
    "decimals": 18,
    "price_usd": "2433.056",
    "spread_pct": 0.1524,
    "agree": true,
    "sources_agree_within_pct": 2.5,
    "by_source": {
      "defillama": {
        "price_usd": "2434.91",
        "confidence": 0.99,
        "as_of": "2026-10-17T11:11:51Z",
        "staleness_s": 58
      },
      "onchain": {
        "price_usd": "2431.203",
        "block": 52723111,
        "pool": {
          "dex": "uniswap_v3",
          "variant": "fee 3000",
          "address": "0x6c561b446416e1a00e8e93e221854d6ea4171372",
          "quote": "USDC",
          "quote_side_usd": 60045166.09
        },
        "weth_usd_onchain": 2431.202812620857
      }
    },
    "disclaimer": "Data only, not investment advice. Spot prices from public sources at one point in time; they can be stale, manipulated in thin pools, or wrong. No buy/sell signal is given or implied."
  },
  "confidence": 0.975,
  "sources": [
    {
      "name": "DeFiLlama coins API",
      "url": "https://coins.llama.fi/prices/current/base:0x4200000000000000000000000000000000000006",
      "fetched_at": "2026-10-17T11:12:48Z"
    },
    {
      "name": "Base on-chain pool (public RPC)",
      "url": "https://basescan.org/address/0x6c561b446416e1a00e8e93e221854d6ea4171372",
      "fetched_at": "2026-10-17T11:12:48Z",
      "block": 52723111
    }
  ],
  "generated_at": "2026-10-17T11:12:49Z",
  "data_as_of": "2026-10-17T11:11:51Z",
  "charged": true,
  "warnings": [],
  "next": [
    "token_risk"
  ],
  "disclaimer": "Data only, not investment advice. Spot prices from public sources at one point in time; they can be stale, manipulated in thin pools, or wrong. No buy/sell signal is given or implied."
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/token-price with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "2000", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.002 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/token-price on this host and decodes the 402. Never pays.
}
"email-check": { Email Deliverability Check $0.0032 Check an email address for deliverability: syntax, canonical form, MX, SPF, DMARC, disposable domain. One verdict with reasons and sources. DNS-over-HTTPS only, no mailbox probing. Not charged if the DNS lookup fails.
"method": "POST", "content_type": "application/json",
"price_usd": 0.0032, // 3200 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required string One email address. Only public DNS is checked; the mailbox is never contacted. Required · string min length 3 · max length 254 Example: "jane.doe+news@gmail.com"
optional string Value for `request_id`. Optional · string min length 1 · max length 64
},
"request_body": // live, from your inputs
{
  "email": "jane.doe+news@gmail.com"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "skill": {
      "type": "string"
    },
    "service": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string"
        },
        "local": {
          "type": "string"
        },
        "domain": {
          "type": "string"
        },
        "verdict": {
          "type": "string"
        },
        "reasons": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "syntax_valid": {
          "type": "boolean"
        },
        "canonical": {
          "type": "string"
        },
        "canonical_rule": {
          "type": "string"
        },
        "plus_tag": {
          "type": "string"
        },
        "domain_exists": {
          "type": "boolean"
        },
        "mx": {
          "type": "array",
          "items": {
            "type": "object"
          }
        },
        "null_mx": {
          "type": "boolean"
        },
        "implicit_mx": {
          "type": "boolean"
        },
        "mx_host_resolves": {
          "type": "boolean"
        },
        "spf": {
          "type": "object",
          "properties": {
            "present": {
              "type": "boolean"
            },
            "record": {
              "type": "string"
            },
            "count": {
              "type": "integer"
            }
          }
        },
        "dmarc": {
          "type": "object",
          "properties": {
            "present": {
              "type": "boolean"
            },
            "record": {
              "type": "string"
            },
            "p": {
              "type": "string"
            },
            "sp": {
              "type": "string"
            },
            "pct": {
              "type": "null"
            },
            "rua": {
              "type": "boolean"
            }
          }
        },
        "disposable": {
          "type": "boolean"
        },
        "role_account": {
          "type": "boolean"
        },
        "free_provider": {
          "type": "boolean"
        },
        "mailbox_checked": {
          "type": "boolean"
        }
      }
    },
    "confidence": {
      "type": "number"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "fetched_at": {
            "type": "string"
          }
        }
      }
    },
    "generated_at": {
      "type": "string"
    },
    "data_as_of": {
      "type": "string"
    },
    "charged": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "ok": true,
  "skill": "email_check",
  "service": "email_check",
  "version": "1.0.0",
  "summary": "deliverable: MX ok (gmail-smtp-in.l.google.com), SPF ok, DMARC p=none",
  "data": {
    "email": "jane.doe+news@gmail.com",
    "local": "jane.doe+news",
    "domain": "gmail.com",
    "verdict": "deliverable",
    "reasons": [
      "MX ok (gmail-smtp-in.l.google.com)",
      "SPF ok",
      "DMARC p=none"
    ],
    "syntax_valid": true,
    "canonical": "janedoe@gmail.com",
    "canonical_rule": "gmail: dots and +tag removed",
    "plus_tag": "news",
    "domain_exists": true,
    "mx": [
      {
        "priority": 5,
        "host": "gmail-smtp-in.l.google.com"
      },
      {
        "priority": 10,
        "host": "alt1.gmail-smtp-in.l.google.com"
      },
      {
        "priority": 20,
        "host": "alt2.gmail-smtp-in.l.google.com"
      },
      {
        "priority": 30,
        "host": "alt3.gmail-smtp-in.l.google.com"
      },
      {
        "priority": 40,
        "host": "alt4.gmail-smtp-in.l.google.com"
      }
    ],
    "null_mx": false,
    "implicit_mx": false,
    "mx_host_resolves": true,
    "spf": {
      "present": true,
      "record": "v=spf1 redirect=_spf.google.com",
      "count": 1
    },
    "dmarc": {
      "present": true,
      "record": "v=DMARC1; p=none; sp=quarantine; rua=mailto:mailauth-reports@google.com",
      "p": "none",
      "sp": "quarantine",
      "pct": null,
      "rua": true
    },
    "disposable": false,
    "role_account": false,
    "free_provider": true,
    "mailbox_checked": false
  },
  "confidence": 0.85,
  "sources": [
    {
      "name": "Cloudflare DoH",
      "url": "https://cloudflare-dns.com/dns-query?name=gmail.com",
      "fetched_at": "2026-10-17T11:12:49Z"
    },
    {
      "name": "disposable-email-domains",
      "url": "https://github.com/disposable-email-domains/disposable-email-domains (CC0-1.0)",
      "fetched_at": "2026-10-17T11:12:49Z",
      "list_date": "2026-10-16"
    }
  ],
  "generated_at": "2026-10-17T11:12:49Z",
  "data_as_of": "2026-10-17T11:12:49Z",
  "charged": true,
  "warnings": [
    "mailbox existence is not checked (no SMTP probing); a deliverable domain can still reject this mailbox"
  ],
  "next": [
    "phone_normalize",
    "ip_intel"
  ]
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/email-check with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3200", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0032 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/email-check on this host and decodes the 402. Never pays.
}
"news-brief": { News Brief with Sources $0.0101 Topic in, deduplicated story clusters out: headline, every outlet URL and first-seen time, from GDELT and publisher RSS. Headlines and links only, no article text. Not charged when nothing matches or sources fail.
"method": "POST", "content_type": "application/json",
"price_usd": 0.0101, // 10100 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/news-brief",
"you_provide": { // JSON body fields
required string A few words, e.g. "stablecoin regulation". Headlines must contain the words. Required · string min length 2 · max length 100 Example: "bitcoin"
optional string "24h" (default), "3d" or "7d". Optional · string one of "24h", "3d", "7d" · default "24h" Example: "3d"
optional integer How many story clusters to return (1-20, default 10). Optional · integer min 1 · max 20 · default 10 Example: 2
optional string Value for `request_id`. Optional · string min length 1 · max length 64
},
"request_body": // live, from your inputs
{
  "topic": "bitcoin",
  "timespan": "3d",
  "max_clusters": 2
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "skill": {
      "type": "string"
    },
    "service": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "topic": {
          "type": "string"
        },
        "terms": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "timespan": {
          "type": "string"
        },
        "clusters": {
          "type": "array",
          "items": {
            "type": "object"
          }
        },
        "cluster_count": {
          "type": "integer"
        },
        "headline_count": {
          "type": "integer"
        },
        "searched": {
          "type": "object",
          "properties": {
            "gdelt": {
              "type": "boolean"
            },
            "feeds_ok": {
              "type": "integer"
            },
            "feeds_total": {
              "type": "integer"
            }
          }
        }
      }
    },
    "confidence": {
      "type": "number"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "fetched_at": {
            "type": "string"
          }
        }
      }
    },
    "generated_at": {
      "type": "string"
    },
    "data_as_of": {
      "type": "string"
    },
    "charged": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "ok": true,
  "skill": "news_brief",
  "service": "news_brief",
  "version": "1.0.0",
  "summary": "2 stories on 'bitcoin'; top: Don’t Let a Crypto Inheritance Get Stuck on the Blockchain",
  "data": {
    "topic": "bitcoin",
    "terms": [
      "bitcoin"
    ],
    "timespan": "3d",
    "clusters": [
      {
        "headline": "Don’t Let a Crypto Inheritance Get Stuck on the Blockchain",
        "first_seen": "2026-10-17T10:30:00Z",
        "latest": "2026-10-17T10:30:00Z",
        "outlet_count": 1,
        "outlets": [
          {
            "outlet": "Wired",
            "headline": "Don’t Let a Crypto Inheritance Get Stuck on the Blockchain",
            "url": "https://www.wired.com/story/crypto-inheritance-how-to/",
            "seen_at": "2026-10-17T10:30:00Z",
            "via": "rss"
          }
        ]
      },
      {
        "headline": "‘Wow, it’s a real discovery’: Claude cracks a 25-year NSA number mystery",
        "first_seen": "2026-10-17T06:39:48Z",
        "latest": "2026-10-17T06:39:48Z",
        "outlet_count": 1,
        "outlets": [
          {
            "outlet": "CoinDesk",
            "headline": "‘Wow, it’s a real discovery’: Claude cracks a 25-year NSA number mystery",
            "url": "https://www.coindesk.com/tech/2026/10/17/wow-it-s-a-real-discovery-claude-cracks-a-25-year-nsa-number-mystery",
            "seen_at": "2026-10-17T06:39:48Z",
            "via": "rss"
          }
        ]
      }
    ],
    "cluster_count": 2,
    "headline_count": 2,
    "searched": {
      "gdelt": false,
      "feeds_ok": 22,
      "feeds_total": 22
    }
  },
  "confidence": 0.7,
  "sources": [
    {
      "name": "Wired",
      "url": "https://www.wired.com/feed/rss",
      "fetched_at": "2026-10-17T11:12:49Z"
    },
    {
      "name": "CoinDesk",
      "url": "https://www.coindesk.com/arc/outboundfeeds/rss/",
      "fetched_at": "2026-10-17T11:12:49Z"
    }
  ],
  "generated_at": "2026-10-17T11:12:56Z",
  "data_as_of": "2026-10-17T11:12:49Z",
  "charged": true,
  "warnings": [
    "headlines and links only; open the outlet URL for the article",
    "GDELT did not answer in time (it rate-limits shared IPs); results come from publisher RSS only"
  ],
  "next": [
    "url_to_markdown"
  ],
  "note": "Headlines and links only. No article text is republished."
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/news-brief with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "10100", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0101 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/news-brief on this host and decodes the 402. Never pays.
}
"ip-intel": { IP & CIDR Intel $0.0033 One public IP or CIDR in: normalized network, size, membership checks, plus holder, abuse contact and origin ASN from RIR RDAP and RIPEstat, and country from DB-IP Lite (CC BY 4.0, attributed). Private ranges refused before payment. Not charged if registries fail.
"method": "POST", "content_type": "application/json",
"price_usd": 0.0033, // 3300 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"docs": "/docs/ip-intel",
"you_provide": { // JSON body fields
required string A public IPv4/IPv6 address or CIDR, e.g. 8.8.8.8 or 1.1.1.0/24. Private ranges are refused. Required · string min length 2 · max length 64 Example: "8.8.8.8"
optional array of string Optional JSON array of IPs to test for membership, e.g. ["1.1.1.1"]. Optional · array of string
optional string Value for `request_id`. Optional · string min length 1 · max length 64
},
"request_body": // live, from your inputs
{
  "query": "8.8.8.8"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "skill": {
      "type": "string"
    },
    "service": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "network": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string"
            },
            "version": {
              "type": "integer"
            },
            "network": {
              "type": "string"
            },
            "prefix_length": {
              "type": "integer"
            },
            "num_addresses": {
              "type": "string"
            },
            "first": {
              "type": "string"
            },
            "last": {
              "type": "string"
            },
            "is_single_address": {
              "type": "boolean"
            },
            "is_global": {
              "type": "boolean"
            },
            "reverse_pointer": {
              "type": "string"
            }
          }
        },
        "registry": {
          "type": "object",
          "properties": {
            "handle": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "holder": {
              "type": "string"
            },
            "type": {
              "type": "string"
            },
            "start_address": {
              "type": "string"
            },
            "end_address": {
              "type": "string"
            },
            "cidrs": {
              "type": "array"
            },
            "registry_country": {
              "type": "null"
            },
            "abuse_email": {
              "type": "string"
            },
            "registered": {
              "type": "string"
            },
            "last_changed": {
              "type": "string"
            },
            "origin_asns_registered": {
              "type": "null"
            }
          }
        },
        "routing": {
          "type": "object",
          "properties": {
            "asns": {
              "type": "array"
            },
            "routed_prefix": {
              "type": "string"
            },
            "as_holder": {
              "type": "string"
            }
          }
        },
        "geo": {
          "type": "object",
          "properties": {
            "country": {
              "type": "string"
            },
            "countries_at_edges": {
              "type": "array"
            },
            "dataset": {
              "type": "string"
            },
            "attribution": {
              "type": "object"
            }
          }
        }
      }
    },
    "confidence": {
      "type": "number"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "fetched_at": {
            "type": "string"
          }
        }
      }
    },
    "generated_at": {
      "type": "string"
    },
    "data_as_of": {
      "type": "string"
    },
    "charged": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "attribution": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "license": {
          "type": "string"
        }
      }
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "ok": true,
  "skill": "ip_intel",
  "service": "ip_intel",
  "version": "1.0.0",
  "summary": "8.8.8.8/32: AS15169 GOOGLE - Google LLC, Google LLC, US",
  "data": {
    "network": {
      "query": "8.8.8.8",
      "version": 4,
      "network": "8.8.8.8/32",
      "prefix_length": 32,
      "num_addresses": "1",
      "first": "8.8.8.8",
      "last": "8.8.8.8",
      "is_single_address": true,
      "is_global": true,
      "reverse_pointer": "8.8.8.8.in-addr.arpa"
    },
    "registry": {
      "handle": "NET-8-8-8-0-2",
      "name": "GOGL",
      "holder": "Google LLC",
      "type": "DIRECT ALLOCATION",
      "start_address": "8.8.8.0",
      "end_address": "8.8.8.255",
      "cidrs": [
        "8.8.8.0/24"
      ],
      "registry_country": null,
      "abuse_email": "network-abuse@google.com",
      "registered": "2023-12-28T17:24:33-05:00",
      "last_changed": "2023-12-28T17:24:56-05:00",
      "origin_asns_registered": null
    },
    "routing": {
      "asns": [
        15169
      ],
      "routed_prefix": "8.8.8.0/24",
      "as_holder": "GOOGLE - Google LLC"
    },
    "geo": {
      "country": "US",
      "countries_at_edges": [
        "US"
      ],
      "dataset": "DB-IP IP-to-Country Lite 2026-10",
      "attribution": {
        "text": "IP Geolocation by DB-IP",
        "url": "https://db-ip.com",
        "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)"
      }
    }
  },
  "confidence": 0.9,
  "sources": [
    {
      "name": "RIR RDAP (via rdap.org bootstrap)",
      "url": "https://rdap.arin.net/registry/ip/8.8.8.8",
      "fetched_at": "2026-10-17T11:12:56Z"
    },
    {
      "name": "RIPEstat network-info / as-overview",
      "url": "https://stat.ripe.net/data/network-info/data.json?resource=8.8.8.8",
      "fetched_at": "2026-10-17T11:12:56Z"
    },
    {
      "name": "IP Geolocation by DB-IP",
      "url": "https://db-ip.com",
      "fetched_at": "2026-10-17T11:12:56Z",
      "dataset_month": "2026-10",
      "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)"
    }
  ],
  "generated_at": "2026-10-17T11:12:56Z",
  "data_as_of": "2026-10-17T11:12:56Z",
  "charged": true,
  "warnings": [
    "country is DB-IP Lite geolocation (country-level, monthly); it can differ from the registry country"
  ],
  "next": [
    "email_check"
  ],
  "attribution": {
    "text": "IP Geolocation by DB-IP",
    "url": "https://db-ip.com",
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)"
  }
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/ip-intel with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3300", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0033 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/ip-intel on this host and decodes the 402. Never pays.
}
"llm-cost-quote": { LLM Cost Quote $0.0034 Text or token counts in, cost per model out, cheapest first, from OpenRouter's public price list with a price-fetched-at timestamp. Applies time-of-day pricing. Not charged if the price list is unavailable or no model matches.
"method": "POST", "content_type": "application/json",
"price_usd": 0.0034, // 3400 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
optional string The prompt text to price (tokens are approximated). Send text or input_tokens. Optional · string max length 400000
optional integer Input token count, if you already know it. Send text or input_tokens. Optional · integer min 0 · max 10000000 Example: 3000
optional integer Expected output tokens (default 500). Optional · integer min 0 · max 1000000 · default 500 Example: 400
optional array of string Optional JSON array of OpenRouter model ids, e.g. ["openai/gpt-4o-mini"]. Optional · array of string Example: ["openai/gpt-4o-mini", "google/gemini-2.5-flash"]
optional integer How many cheapest models to list when models is not given (default 10). Optional · integer min 1 · max 50 · default 10
optional boolean true includes $0 models in the ranking. Optional · boolean default false
optional string Value for `request_id`. Optional · string min length 1 · max length 64
},
"request_body": // live, from your inputs
{
  "input_tokens": 3000,
  "output_tokens": 400,
  "models": [
    "openai/gpt-4o-mini",
    "google/gemini-2.5-flash"
  ]
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "skill": {
      "type": "string"
    },
    "service": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "input_tokens": {
          "type": "integer"
        },
        "output_tokens": {
          "type": "integer"
        },
        "token_source": {
          "type": "string"
        },
        "models_considered": {
          "type": "integer"
        },
        "quotes": {
          "type": "array",
          "items": {
            "type": "object"
          }
        },
        "missing_models": {
          "type": "array"
        },
        "price_fetched_at": {
          "type": "string"
        },
        "currency": {
          "type": "string"
        }
      }
    },
    "confidence": {
      "type": "number"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "fetched_at": {
            "type": "string"
          }
        }
      }
    },
    "generated_at": {
      "type": "string"
    },
    "data_as_of": {
      "type": "string"
    },
    "charged": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array"
    },
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "ok": true,
  "skill": "llm_cost_quote",
  "service": "llm_cost_quote",
  "version": "1.0.0",
  "summary": "cheapest: openai/gpt-4o-mini $0.00069 for 3000 in + 400 out tokens",
  "data": {
    "input_tokens": 3000,
    "output_tokens": 400,
    "token_source": "caller-supplied input_tokens",
    "models_considered": 2,
    "quotes": [
      {
        "model": "openai/gpt-4o-mini",
        "name": "OpenAI: GPT-4o-mini",
        "cost_usd": "0.00069",
        "input_usd_per_mtok": "0.15",
        "output_usd_per_mtok": "0.6",
        "context_length": 128000,
        "fits_context": true,
        "time_based_price": false
      },
      {
        "model": "google/gemini-2.5-flash",
        "name": "Google: Gemini 2.5 Flash",
        "cost_usd": "0.0019",
        "input_usd_per_mtok": "0.3",
        "output_usd_per_mtok": "2.5",
        "context_length": 1048576,
        "fits_context": true,
        "time_based_price": false
      }
    ],
    "missing_models": [],
    "price_fetched_at": "2026-10-17T11:12:57Z",
    "currency": "USD"
  },
  "confidence": 0.97,
  "sources": [
    {
      "name": "OpenRouter public models list",
      "url": "https://openrouter.ai/api/v1/models",
      "fetched_at": "2026-10-17T11:12:57Z"
    }
  ],
  "generated_at": "2026-10-17T11:12:57Z",
  "data_as_of": "2026-10-17T11:12:57Z",
  "charged": true,
  "warnings": [],
  "next": [
    "token_count"
  ]
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/llm-cost-quote with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "3400", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0034 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/llm-cost-quote on this host and decodes the 402. Never pays.
}
"phone-normalize": { Phone Normalize & Validate $0.0021 Parse and validate one phone number with full libphonenumber metadata: valid/possible, number type, region, E.164, national and international formats. Offline. No owner or carrier lookup. Unparseable numbers refused before payment.
"method": "POST", "content_type": "application/json",
"price_usd": 0.0021, // 2100 atomic USDC (6 decimals)
"network": "eip155:8453", // Base mainnet
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"payTo": "0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69",
"you_provide": { // JSON body fields
required string A phone number, e.g. +1 415 555 2671. Without a leading + send region too. Required · string min length 3 · max length 64 Example: "+1 415 555 2671"
optional string Two-letter default region (ISO 3166-1), e.g. US or GB. Optional · string
optional string Value for `request_id`. Optional · string min length 1 · max length 64
},
"request_body": // live, from your inputs
{
  "number": "+1 415 555 2671"
}
"you_get": { // HTTP 200 application/json after payment
"output_schema":
{
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "skill": {
      "type": "string"
    },
    "service": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "input": {
          "type": "string"
        },
        "valid": {
          "type": "boolean"
        },
        "possible": {
          "type": "boolean"
        },
        "type": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "country_code": {
          "type": "integer"
        },
        "national_number": {
          "type": "string"
        },
        "extension": {
          "type": "null"
        },
        "e164": {
          "type": "string"
        },
        "international": {
          "type": "string"
        },
        "national": {
          "type": "string"
        },
        "rfc3966": {
          "type": "string"
        },
        "metadata": {
          "type": "string"
        }
      }
    },
    "confidence": {
      "type": "number"
    },
    "sources": {
      "type": "array"
    },
    "generated_at": {
      "type": "string"
    },
    "data_as_of": {
      "type": "string"
    },
    "charged": {
      "type": "boolean"
    },
    "warnings": {
      "type": "array"
    },
    "next": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "ok",
    "skill"
  ]
}
"example":
{
  "ok": true,
  "skill": "phone_normalize",
  "service": "phone_normalize",
  "version": "1.0.0",
  "summary": "valid fixed_line_or_mobile number in US: +14155552671",
  "data": {
    "input": "+1 415 555 2671",
    "valid": true,
    "possible": true,
    "type": "fixed_line_or_mobile",
    "region": "US",
    "country_code": 1,
    "national_number": "4155552671",
    "extension": null,
    "e164": "+14155552671",
    "international": "+1 415-555-2671",
    "national": "(415) 555-2671",
    "rfc3966": "tel:+1-415-555-2671",
    "metadata": "libphonenumber 9.0.41"
  },
  "confidence": 1.0,
  "sources": [],
  "generated_at": "2026-10-17T11:12:57Z",
  "data_as_of": "2026-10-17T11:12:57Z",
  "charged": true,
  "warnings": [],
  "next": [
    "email_check"
  ],
  "note": "Format and validity only. No owner, carrier or location lookup."
}
},
"flow": [
  1. POST https://grokzilla.shop/api/skills/phone-normalize with the JSON body, no payment header
  2. ← 402 Payment Required + PAYMENT-REQUIRED header: base64 JSON {x402Version: 2, accepts: [{scheme: "exact", network: "eip155:8453", asset: USDC, amount: "2100", payTo}]} (same JSON in the body)
  3. your x402 client checks amount ≤ $0.0021 and signs a USDC transfer authorization to payTo with your wallet
  4. retry the same POST with PAYMENT-SIGNATURE: <base64> (x402 v2) or X-PAYMENT (v1 clients)
  5. ← 200 OK with the result JSON + PAYMENT-RESPONSE header (base64 settlement receipt, tx hash on Base)
],
"copy": { // fills in from your inputs as you type
"agent_prompt"

        
"curl" // unpaid: shows the 402

        
"agentcash" // pays from your AgentCash wallet

        
},
"try": // POSTs unpaid to /api/skills/phone-normalize on this host and decodes the 402. Never pays.
}