# Pay-per-call APIs for AI agents: 22 tools, no API key, from $0.003 (x402 on Base) Canonical: https://grokzilla.shop | Last updated: 2026-10-14 A pay-per-call API is an HTTP API you pay for one request at a time instead of with an account, API key or subscription. On this site an AI agent sends a normal POST, gets HTTP 402 with the price, pays in USDC on Base with x402 v2, and retries the same request to get the JSON result. ## How payment works 1. POST the JSON body to the skill endpoint with no payment header. 2. The server answers HTTP 402 with a PAYMENT-REQUIRED header (x402 v2, scheme exact, network eip155:8453, asset USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69). 3. Sign the exact USDC amount with any x402 v2 client and retry with the PAYMENT-SIGNATURE header. ## Skills and prices | id | endpoint | price (USD per call) | docs | |---|---|---|---| | osint_graph | POST /api/skills/osint-graph | $0.01 | https://grokzilla.shop/docs/osint-graph | | research | POST /api/skills/research | $0.015 | https://grokzilla.shop/docs/research | | seo | POST /api/skills/seo | $0.012 | https://grokzilla.shop/docs/seo | | ai_detector | POST /api/skills/ai-detector | $0.01 | https://grokzilla.shop/docs/ai-detector | | json_flatten | POST /api/skills/json-flatten | $0.006 | https://grokzilla.shop/docs/json-flatten | | json_sort | POST /api/skills/json-sort | $0.003 | https://grokzilla.shop/docs/json-sort | | text_diff | POST /api/skills/text-diff | $0.006 | https://grokzilla.shop/docs/text-diff | | url_normalize | POST /api/skills/url-normalize | $0.005 | https://grokzilla.shop/docs/url-normalize | | html_clean | POST /api/skills/html-clean | $0.008 | https://grokzilla.shop/docs/html-clean | | json_schema_validate | POST /api/skills/json-schema-validate | $0.006 | https://grokzilla.shop/docs/json-schema-validate | | keyword_extract | POST /api/skills/keyword-extract | $0.008 | https://grokzilla.shop/docs/keyword-extract | | token_count | POST /api/skills/token-count | $0.004 | https://grokzilla.shop/docs/token-count | | nicje | POST /api/skills/nicje | $0.02 | https://grokzilla.shop/docs/nicje | | sha256 | POST /api/skills/sha256 | $0.003 | https://grokzilla.shop/docs/sha256 | | uuid_mint | POST /api/skills/uuid-mint | $0.003 | https://grokzilla.shop/docs/uuid-mint | | slugify | POST /api/skills/slugify | $0.003 | https://grokzilla.shop/docs/slugify | | pii_redact | POST /api/skills/pii-redact | $0.003 | https://grokzilla.shop/docs/pii-redact | | csv_normalize | POST /api/skills/csv-normalize | $0.003 | https://grokzilla.shop/docs/csv-normalize | | base64 | POST /api/skills/base64 | $0.003 | https://grokzilla.shop/docs/base64 | | epoch_convert | POST /api/skills/epoch-convert | $0.003 | https://grokzilla.shop/docs/epoch-convert | | url_to_markdown | POST /api/skills/url-to-markdown | $0.003 | https://grokzilla.shop/docs/url-to-markdown | | token_risk | POST /api/skills/token-risk | $0.005 | https://grokzilla.shop/docs/token-risk | ## FAQ Q: Do I need an account or API key? A: No. Every paid route answers an unpaid POST with HTTP 402 and the payment terms; any x402 v2 client can pay and retry. There is no signup. Q: Which network and asset? A: USDC on Base mainnet (eip155:8453), x402 v2 with the exact scheme. Q: What does a call cost? A: Between $0.003 and $0.02 per call, listed per skill in the table on this page, at /pricing and in /api/catalog. Q: Is there a free tier? A: No. Free beta is off; every skill call is paid. The discovery files (catalog, manifest, OpenAPI, llms.txt) are free to read. Q: Does the server accept x402 v1? A: No. The server is x402 v2 only; a v1 payment header gets a 402 back with the v2 terms. Q: Can humans pay without a crypto wallet? A: Yes, through Stripe checkout on the site (see /pricing for the minimum). ## llms.txt # grokzilla.shop / x402-micro-pay.com > Humanless microservices marketplace for AI agents. Pay-per-call with x402 (USDC on Base mainnet eip155:8453). Humans can also pay with Stripe. ## Identity - Primary (canonical): https://grokzilla.shop - Alias (same content, canonical points to primary): https://x402-micro-pay.com - Protocol: x402 v2 exact scheme - Network: eip155:8453 (Base mainnet) - Asset: USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 - Billing: paid only (free_beta: false) ## Critical agent endpoints (start here) - Try first (cheapest paid call): POST https://grokzilla.shop/api/skills/uuid-mint Body: {"count":1,"version":4} · Price: $0.003 USDC on Base (atomic 3000) · payTo 0xc22f9CAEBAc37fE72D5142f35f21f6696Ea9Ef69 Buyer gets: {"ok":true,"ids":["…uuid v4…"],"skill":"uuid_mint",…} for job IDs / idempotency keys Flow: unpaid POST → 402 + PAYMENT-REQUIRED → PAYMENT-SIGNATURE retry - Manifest: https://grokzilla.shop/.well-known/x402 - Catalog (JSON): https://grokzilla.shop/api/catalog - OpenAPI: https://grokzilla.shop/openapi.json - Humanless contract: https://grokzilla.shop/contracts/humanless.json - Health: https://grokzilla.shop/health - Pricing: https://grokzilla.shop/pricing - Terms: https://grokzilla.shop/terms - Daily utils (first-party): POST /api/skills/json-flatten, /api/skills/text-diff, /api/skills/url-normalize, /api/skills/html-clean, /api/skills/json-schema-validate, /api/skills/keyword-extract, /api/skills/token-count, /api/skills/json-sort ($0.003), /api/skills/sha256 ($0.003), /api/skills/uuid-mint ($0.003), /api/skills/slugify ($0.003), /api/skills/pii-redact ($0.003), /api/skills/csv-normalize ($0.003), /api/skills/base64 ($0.003), /api/skills/epoch-convert ($0.003), /api/skills/url-to-markdown ($0.003), /api/skills/token-risk ($0.005) ## How agents pay 1. GET /.well-known/x402 or /api/catalog for services + prices. 2. POST a skill endpoint. Unpaid calls return HTTP 402 + PAYMENT-REQUIRED header. 3. Sign exact USDC payment to the pay_to address on Base mainnet, retry with PAYMENT-SIGNATURE. 4. Receive JSON result. Respect max_spend_per_call / max_spend_per_session in humanless.json. ## Native skills (paid, Base mainnet) | id | method | endpoint | typical price | |----|--------|----------|---------------| | osint_graph | POST | /api/skills/osint-graph | $0.01 | | research | POST | /api/skills/research | $0.015 | | seo | POST | /api/skills/seo | $0.012 | | ai_detector | POST | /api/skills/ai-detector | $0.01 | | json_flatten | POST | /api/skills/json-flatten | $0.006 | | json_sort | POST | /api/skills/json-sort | $0.003 | | text_diff | POST | /api/skills/text-diff | $0.006 | | url_normalize | POST | /api/skills/url-normalize | $0.005 | | html_clean | POST | /api/skills/html-clean | $0.008 | | json_schema_validate | POST | /api/skills/json-schema-validate | $0.006 | | keyword_extract | POST | /api/skills/keyword-extract | $0.008 | | token_count | POST | /api/skills/token-count | $0.004 | | nicje | POST | /api/skills/nicje | $0.02 | | sha256 | POST | /api/skills/sha256 | $0.003 | | uuid_mint | POST | /api/skills/uuid-mint | $0.003 | | slugify | POST | /api/skills/slugify | $0.003 | | pii_redact | POST | /api/skills/pii-redact | $0.003 | | csv_normalize | POST | /api/skills/csv-normalize | $0.003 | | base64 | POST | /api/skills/base64 | $0.003 | | epoch_convert | POST | /api/skills/epoch-convert | $0.003 | | url_to_markdown | POST | /api/skills/url-to-markdown | $0.003 | | token_risk | POST | /api/skills/token-risk | $0.005 | Exact live prices: GET /api/catalog (price_usd). Every call is paid. 402 responses include JSON body + PAYMENT-REQUIRED header. ## Skill notes - research: Cited answer from Wikipedia, Hacker News, and DuckDuckGo when reachable (matches public/llms.txt) - ai_detector ($0.01): 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. ## Docs for agents - AGENTS.md: https://grokzilla.shop/AGENTS.md - Tutorials: https://grokzilla.shop/docs - Quickstart (prose): https://grokzilla.shop/quickstart - Full text for LLMs: https://grokzilla.shop/llms-full.txt - Source: https://github.com/nicsins/ai-micro-pay ## Doc: https://grokzilla.shop/docs/ai-detector # AI Content Detector Estimate whether text, or the text of a web page, was written by an AI assistant. The result is a stylometric score, the signals behind it, and a band around the score. It does not judge images or other media. Send exactly one of `text` or `url`. Under 80 words the verdict is `uncertain`. Detection is probabilistic and should not be the only evidence. ## Step 1 — Text ```bash curl -s -X POST https://x402-micro-pay.com/api/skills/ai-detector \ -H "Content-Type: application/json" \ -d '{"text":"Paste a passage of at least a few sentences."}' ``` A short snippet still returns signals, and the verdict stays `uncertain` until there are 80 words. ## Step 2 — URL ```bash curl -s -X POST https://x402-micro-pay.com/api/skills/ai-detector \ -H "Content-Type: application/json" \ -d '{"url":"https://www.gutenberg.org/files/1342/1342-h/1342-h.htm"}' ``` The page is fetched and its text is scored. A page that cannot be fetched, or that has no text, returns `uncertain` and a `reason`. No sample paragraph is substituted. ## Step 3 — Agent ```bash python -m agent.humanless_client ai_detector --text "Paste a passage of at least a few sentences." ``` ## Output fields - `verdict` — `likely_ai`, `likely_human`, or `uncertain`. `likely_human` needs a low score and positive human evidence (contractions, uneven sentence lengths, or verse). A low score without that evidence is `uncertain`, because plain model output without stock phrases can also score low. - `ai_likelihood` — stylometric score from 0 to 1, or null when nothing could be scored - `band` — low and high around that score, or null when nothing could be scored - `signals` — sentence length and variance, burstiness, type-token ratio, hapax ratio, punctuation diversity, repeated n-grams, stock phrases per 100 words, contraction rate, average word length, and line-length uniformity - `method` — `stylometry`, or `stylometry+llm` when `OPENROUTER_API_KEY` is set and a second opinion comes back - `word_count` - `caveats` — always includes a note that detection is probabilistic - `reason` — present when a URL could not be scored `ai_likelihood` is not a calibrated probability. The optional model check, when configured, is blended at a weight of 0.25 and reported under `llm`. ## The 4-section rubric The verdict comes from a fixed, deterministic rubric. Each section returns `human_sign`, `ai_sign` or `no_signal` with evidence. | Section | Weight | Looks at | |---|---|---| | rhythm | 10% | sentence-length variance and burstiness | | vocabulary | 40% | a weighted list of LLM tell phrases (secondary signal) | | voice_structure | 30% | hedging, distancing, over-tidy transitions, uniform paragraphs, missing specifics vs. first person, dialogue, names, asides | | resolution | 20% | each section re-checks its neighbour | `likely_ai` or `likely_human` needs at least two sections agreeing with positive evidence and none pointing the other way. Tell phrases alone never decide: unconfirmed tells give `possible_ai_influence`. Disagreement gives `uncertain`. `content_type` (story, opinion, factual_claims) is a label only; nothing is fact-checked. `ai_likelihood` is still the stylometric score. ## Doc: https://grokzilla.shop/docs/base64 # Base64 Encode/Decode Base64-encode UTF-8 text or decode base64 back to text. Standard or URL-safe alphabet. Deterministic, no network. First-party on grokzilla.shop. ## Call `POST /api/skills/base64` ```json { "mode": "encode", "text": "hello agent", "url_safe": false } ``` `mode` (required: `"encode"` or `"decode"`), `text` (required string, up to 400,000 characters), `url_safe` (optional boolean, default `false`: use `-` and `_` instead of `+` and `/`). Decoding ignores whitespace and accepts missing `=` padding. The decoded bytes must be UTF-8 text. ## Errors (not charged) - `422 invalid_params`: missing `mode`/`text`, `mode` not `encode`/`decode`, wrong types, over the size cap. - `400`: `invalid_base64` (characters outside the alphabet, impossible length), `not_utf8` (decoded bytes are not text). ## Response (paid 200) ```json { "skill": "base64", "ok": true, "mode": "encode", "url_safe": false, "output": "aGVsbG8gYWdlbnQ=", "bytes": 11 } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.003 per call. ## Doc: https://grokzilla.shop/docs/csv-normalize # CSV Normalizer Parse CSV text into JSON rows keyed by clean snake_case headers. Deterministic, no network. First-party on grokzilla.shop. ## Call `POST /api/skills/csv-normalize` ```json { "csv": "First Name,E-mail\nAda,ada@example.com\n", "delimiter": "," } ``` `csv` (required string, 1-400,000 characters, first non-blank row is the header), `delimiter` (optional: `","` default, `";"`, `"\t"`, `"|"`). - Headers are trimmed and turned into snake_case (`First Name` → `first_name`, `lastName` → `last_name`). Empty headers become `column_N`; duplicates get `_2`, `_3`. - Cell values are trimmed strings (no type guessing). Blank lines are skipped. A UTF-8 BOM is ignored. - Limits: 10,000 data rows, 256 columns. ## Errors (not charged) - `422 invalid_params`: missing or non-string `csv`, empty `csv`, unsupported `delimiter`, over the size cap. - `400`: `ragged_row` (a row's field count differs from the header), `csv_parse_error` (e.g. unterminated quote), `empty_csv`, `too_many_rows`, `too_many_columns`. ## Response (paid 200) ```json { "skill": "csv_normalize", "ok": true, "headers": ["first_name", "e_mail"], "rows": [{"first_name": "Ada", "e_mail": "ada@example.com"}], "row_count": 1 } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.003 per call. ## Doc: https://grokzilla.shop/docs/epoch-convert # Epoch Converter Convert between Unix epoch time and ISO-8601, in UTC and any IANA time zone. Deterministic, no network. First-party on grokzilla.shop. ## Call `POST /api/skills/epoch-convert` ```json {"value": 1700000000, "tz": "America/Chicago"} ``` `value` (required: number, numeric string, or ISO-8601 string up to 64 characters), `tz` (optional IANA zone, default `UTC`). Numbers are read by magnitude: below 1e11 seconds, below 1e14 milliseconds, below 1e17 microseconds, otherwise nanoseconds (`input_kind` says which). An ISO string without an offset is read in `tz`. `epoch_s` is an integer for whole seconds, else a decimal with millisecond precision. ## Errors (not charged) - `422 invalid_params`: missing `value`, booleans/arrays/null, empty `tz`, over the size caps. - `400`: `unknown_tz`, `bad_iso`, `bad_value`, `out_of_range` (outside years 1 to 9999). ## Response (paid 200) ```json { "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" } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.003 per call. ## Doc: https://grokzilla.shop/docs/first-agent-call # Tutorial – Your First Paid Agent Call **Goal:** Make one successful paid call to a skill and confirm it was logged. ## Prerequisites - Valid agent identity - Ability to complete an x402 payment (or use test mode) - Access to the live endpoints ## Steps 1. Discover available skills: `GET https://x402-micro-pay.com/api/catalog` 2. Read the specific tutorial for the skill under `/docs` 3. Complete payment (x402 or Stripe when enabled) 4. Call the skill endpoint with required payload 5. Receive structured result ## Common Pitfalls - Missing or expired payment proof → 402 - Hitting rate limit → 429 - Wrong payload shape → validation error Once this works, explore batch calls and opportunity signals from the call log. ## Doc: https://grokzilla.shop/docs/html-clean # HTML Cleaner POST `/api/skills/html-clean` — $0.008 USDC on Base. ```json { "html": "
Keep me
", "mode": "markdown" } ``` Returns stripped text or markdown. Scripts and styles are dropped. ## Doc: https://grokzilla.shop/docs/json-flatten # JSON Flattener Deterministic nested JSON → flat path-value map. First-party on grokzilla.shop. ## Call `POST /api/skills/json-flatten` ```json { "data": { "user": { "id": 7, "tags": ["a", "b"] } }, "options": { "separator": ".", "arrayStyle": "index", "maxDepth": 20 } } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Price: $0.01 per call. ## Doc: https://grokzilla.shop/docs/json-schema-validate # JSON Schema Validator POST `/api/skills/json-schema-validate` — $0.006 USDC on Base. ```json { "instance": { "id": 1 }, "schema": { "type": "object", "required": ["id"], "properties": { "id": { "type": "number" } } } } ``` Use this as a cheap gate before paying a larger model. `ok` means the check ran. `valid` means the instance matched the schema. An invalid instance is `ok: true`, `valid: false`, with `errors` filled. `ok: false` means the schema could not be checked (it is not an object, or a nested schema keyword is the wrong type). ## Doc: https://grokzilla.shop/docs/json-sort # JSON Key Sorter Recursively sort object keys and return canonical compact JSON. Deterministic, no network. First-party on grokzilla.shop. ## Call `POST /api/skills/json-sort` ```json { "data": { "b": 1, "a": { "d": 2, "c": 3 } }, "reverse": false } ``` `data` (required, any JSON), `reverse` (optional boolean, default `false`). ## Response (paid 200) ```json { "skill": "json_sort", "ok": true, "sorted": { "a": { "c": 3, "d": 2 }, "b": 1 }, "canonical": "{\"a\":{\"c\":3,\"d\":2},\"b\":1}", "bytes": 25 } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.003 per call. ## Doc: https://grokzilla.shop/docs/keyword-extract # Keyword Extractor POST `/api/skills/keyword-extract` — $0.008 USDC on Base. ```json { "text": "Agents pay per call with USDC on Base using the x402 protocol.", "limit": 10 } ``` Stopword-filtered term ranking. Deterministic. ## Doc: https://grokzilla.shop/docs/nicje # NICJE Data Refinery Taking messy data, making it agent-kind. Native x402 skill on this marketplace. Does not replace other skills. ## Step 1 — Quick test ```bash curl -s -X POST https://x402-micro-pay.com/api/skills/nicje \ -H "Content-Type: application/json" \ -d '{"recipe":"eval_set","request":"prepare a clean evaluation set","raw":"id,name,value\n1,a,2.5\n2,b,5\n2,b,5"}' ``` Unpaid calls return **HTTP 402** with `PAYMENT-REQUIRED`. Pay USDC on Base to the catalog `pay_to`, then retry. ## Step 2 — Recipes | recipe | price | output | |--------|-------|--------| | eval_set | $0.02 | Stratified sample + schema contract. Copies `expected`, else `output`, `label`, `answer`, or `value`, onto each item as `expected` (`0` and `""` count). | | rag_chunks | $0.02 | Token-aware chunks for retrieval | | custom | $0.02 | Swarm classifies the real need | ## Step 3 — Surfaces - Human UI on this domain: https://x402-micro-pay.com/nicje - Dedicated host: https://nicje-x402.vercel.app - Catalog: `GET /api/catalog` (skill id `nicje`) ## Input schema | Field | Type | Required | |-------|------|----------| | raw | string | yes | | request | string | no | | recipe | string | no (default eval_set) | ## Doc: https://grokzilla.shop/docs/osint-graph # Public OSINT Graph 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). Hops stop at 2. People include only notable public roles: employer, education, position, and membership. Family, addresses, and contact details are not returned. If nothing matches, `graph` is empty and `reason` says why. No confidence score is returned. ## Step 1 — Quick test ```bash curl -s -X POST https://x402-micro-pay.com/api/skills/osint-graph \ -H "Content-Type: application/json" \ -d '{"seed_entity":"OpenAI","max_depth":2}' ``` ## Step 2 — Agent client ```bash python -m agent.humanless_client osint_graph --seed "OpenAI" --depth 2 ``` ## Input schema | Field | Type | Required | |-------|------|----------| | seed_entity | string | yes | | max_depth | integer (1–4 accepted; values above 2 run as 2) | no, default 2 | An empty or missing seed is rejected (HTTP 400, or the request validator). The seed is not replaced with a sample. ## Output `skill`, `seed_entity`, `max_depth`, `limit`, `disclaimer`, `resolved`, `alternatives` (up to three Wikidata candidates), `graph.nodes` (`id`, `name`, `type`, `url`), `graph.edges` (`from`, `to`, `relation`, `pid`), `degrees_sample` (shortest paths that use those edges), and `sources`. `reason` is present when the seed did not match or a Wikidata call failed. ## Billing Paid per call. The price is the `osint_graph` entry in `/api/catalog`. ## Doc: https://grokzilla.shop/docs/pii-redact # PII Redactor Replace personal data in free text with typed placeholders. Deterministic, regex-based, no network. First-party on grokzilla.shop. ## Call `POST /api/skills/pii-redact` ```json { "text": "Mail jane@example.com or call 555-123-4567." } ``` `text` (required string, up to 400,000 characters). | Type | Placeholder | Matches | |---|---|---| | email | `[EMAIL]` | `name@domain.tld` | | ipv4 | `[IPV4]` | dotted quads with octets 0-255 | | card | `[CARD]` | 13-19 digits (spaces or dashes allowed) that pass the Luhn check | | ssn | `[SSN]` | SSN-shaped `123-45-6789` / `123 45 6789` | | phone | `[PHONE]` | US formats like `(312) 555-0199`, `555.123.4567`, `+1 555 123 4567`, and `+`-prefixed international numbers (10-15 digits) | This is pattern matching, not a guarantee: names and street addresses are not detected, and numbers that look like the shapes above are redacted. ## Response (paid 200) ```json { "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 } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.003 per call. ## Doc: https://grokzilla.shop/docs/research # Deep Research Searches Wikipedia (opensearch and full-text), Hacker News (Algolia), and DuckDuckGo when reachable, fetches the top public pages, and returns a cited answer from those pages. The answer is extractive (sentences copied from the pages) unless `OPENROUTER_API_KEY` is set, in which case an OpenRouter model may write the answer from that same text. If nothing can be fetched, `sources` is empty and `reason` says why. No confidence score is returned. ## Step 1 — Quick test ```bash curl -s -X POST https://x402-micro-pay.com/api/skills/research \ -H "Content-Type: application/json" \ -d '{"query":"What is x402?"}' ``` ## Step 2 — Agent client ```bash python -m agent.humanless_client research "What is x402?" ``` ## Step 3 — Applet + model 1. Open `/applet` 2. Pick your model provider and paste API key (stored locally) 3. Write a research question in **Service prompt** 4. Paste background docs in **Context window** 5. **Call model + service** to get structured JSON + model explanation ## Input schema | Field | Type | Required | |-------|------|----------| | query | string | yes | An empty or missing query is rejected (HTTP 400, or the request validator). The query is not replaced with a sample. Send a question ("What is x402?") or a topic ("x402 protocol", answered as "what is x402 protocol"). Creative or generative requests ("write a poem about…", "generate a short story…") are refused with HTTP 400 `unsupported_query` before any payment, so nothing is charged. ## Output `skill`, `query`, `answer`, `key_points`, `sources` (`n`, `title`, `url`, `snippet`), `method` (`extractive` or `llm`), and `fetched_at`. Citations in the answer look like `[1]`. `sources` lists only the pages the answer cites, numbered to match the citations. ## Doc: https://grokzilla.shop/docs/seo # SEO Optimizer Fetches a public URL through the SSRF-safe client and returns an on-page SEO score from real checks (title, meta description, headings, image alt text, keywords, and more). If the page cannot be fetched, `score` is null and `reason` says why. ## Step 1 — curl ```bash curl -s -X POST https://x402-micro-pay.com/api/skills/seo \ -H "Content-Type: application/json" \ -d '{"url":"https://example.com","keywords":["x402","agents"]}' ``` ## Step 2 — Agent ```bash python -m agent.humanless_client seo --url https://example.com ``` ## Step 3 — Tutorial workflow 1. Run SEO on your landing page URL 2. Apply top recommendations (failed checks, highest weight first) 3. Re-run and compare `score` ## Doc: https://grokzilla.shop/docs/sha256 # SHA-256 Hash Hash a string with SHA-256 and return hex plus a short prefix. Deterministic, no network. First-party on grokzilla.shop. ## Call `POST /api/skills/sha256` ```json { "text": "hello", "encoding": "utf-8" } ``` `text` (required string), `encoding` (optional: `utf-8` default, `utf8`, `ascii`). ## Response (paid 200) ```json { "skill": "sha256", "ok": true, "algo": "sha256", "bytes": 5, "hex": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824", "hex_prefix": "2cf24dba5fb0a30e" } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.003 per call. ## Doc: https://grokzilla.shop/docs/slugify # Slugify Turn free text into a URL-safe lowercase slug. Deterministic, no network. First-party on grokzilla.shop. ## Call `POST /api/skills/slugify` ```json { "text": "Hello, Grokzilla Shop!", "max_len": 80 } ``` `text` (required string), `max_len` (optional integer 1-200, default 80). Accented letters fold to ASCII (`Café Déjà Vu` → `cafe-deja-vu`, `Straße` → `strasse`). Letters the fold does not cover are transliterated (`ß`→`ss`, `æ`→`ae`, `ø`→`o`, `ł`→`l`, `đ`→`d`). Text with no letters or digits returns an empty `slug`, `empty: true`, and a `reason`. That response is still `ok: true`. ## Response (paid 200) ```json { "skill": "slugify", "ok": true, "slug": "hello-grokzilla-shop", "chars": 20, "empty": false } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.003 per call. ## Doc: https://grokzilla.shop/docs/text-diff # Text Diff Line / word / char diff with structured or unified output. ## Call `POST /api/skills/text-diff` ```json { "a": "hello world", "b": "hello grokzilla", "options": { "mode": "words", "format": "structured" } } ``` Unpaid → HTTP 402. Price: $0.01 per call. ## Doc: https://grokzilla.shop/docs/token-count # Token Counter POST `/api/skills/token-count` — $0.004 USDC on Base. ```json { "text": "Budget this prompt before the expensive hop.", "encoding": "cl100k" } ``` Approximate cl100k / o200k counts for spend decisions. ## Doc: https://grokzilla.shop/docs/token-risk # Token Risk (Base) Heuristic risk checks for an ERC-20 token on Base mainnet before an agent buys or sells it: honeypot and transfer-tax simulation against the deepest pool, plus contract, metadata, proxy, owner and privileged-function checks. Read-only: every check is a JSON-RPC read against a free public Base endpoint (mainnet.base.org, then base-rpc.publicnode.com, then base.drpc.org). Nothing is signed or broadcast, and no paid data provider is called. **Informational only, not financial advice.** The checks run at one block and can miss risks or flag legitimate tokens. ## Call `POST /api/skills/token-risk` ```json {"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "chain": "base"} ``` `token` (required): the token contract address (`0x` + 40 hex). `chain` (optional): only `"base"` for now. ## Checks Each check is `{"result": "pass" | "warn" | "fail" | "unknown", "evidence": {...}}`. A check that could not run is `unknown` with a `reason`; it is never reported as a pass. | Check | What it does | warn / fail when | |---|---|---| | `contract_code` | `eth_getCode` | fail: no code at the address | | `erc20_metadata` | `name`, `symbol`, `decimals`, `totalSupply` | fail: none readable | | `proxy` | EIP-1967 and legacy zeppelinos implementation/admin slots | warn: upgradeable proxy | | `ownership` | `owner()` / `getOwner()` | warn: owner still set; pass: `0x0` or `0x…dEaD` | | `privileged_functions` | PUSH4 selectors in the token's (and implementation's) bytecode: mint, blacklist, pause, fee setters, trading switches / limits | warn: any found (presence only, not who may call them) | | `liquidity_pool` | Uniswap v2 `getPair`, Uniswap v3 `getPool` (fees 100/500/3000/10000), Aerodrome `getPool` (volatile/stable) against WETH and USDC; the pool holding the most of the token is used | warn: thin quote-side liquidity | | `sell_simulation` | `eth_simulateV1`: a holder (balance planted with a state override after locating the balance storage slot) transfers 0.1% of the pool's balance into the pool, the token-side leg of a sell | fail: reverts, returns false, or delivers nothing | | `buy_simulation` | the same amount transferred out of the pool, the token-side leg of a buy | same as above | | `transfer_tax` | `1 − received / sent` for both legs, from `balanceOf` before and after | warn ≥ 1%, fail > 10% | A Uniswap quoter is not used for tax: it quotes the pool's math, not what a fee-on-transfer token actually delivers, so the token transfer is measured directly. AMM fees are not included. `risk_level`: any fail → `high`; else any warn → `medium`; else any unknown → `unknown`; else `low`. One exception: an unreadable owner on a token with no privileged selectors (for example WETH) does not block `low`. `reasons` lists what drove the level. ## Errors (not charged) - `422 invalid_params`: missing or malformed `token`, `chain` other than `"base"`. - `400 invalid_token`: zero or dead address. - `502 upstream_error`: no public Base RPC answered. ## Response (paid 200, USDC) USDC is `medium` because it is an upgradeable proxy with an active owner and mint, blacklist and pause functions. Those are real controls, even though the token is a regulated stablecoin. ```json { "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." } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.005 per call. ## Doc: https://grokzilla.shop/docs/url-normalize # URL Normalizer Strip tracking params, force HTTPS, lowercase host, sort query, extract components. ## Call `POST /api/skills/url-normalize` ```json { "url": "http://Example.COM/path?utm_source=x&b=2&a=1", "options": { "stripTracking": true, "forceHttps": true, "sortQuery": true } } ``` Unpaid → HTTP 402. Price: $0.01 per call. ## Doc: https://grokzilla.shop/docs/url-to-markdown # URL to Markdown Fetch one public web page and get back its title and clean Markdown: headings, paragraphs, links (made absolute), emphasis, lists, code blocks, blockquotes, images and basic tables. Built for agents that need to read a page after a search. First-party on grokzilla.shop; no third-party API is involved. ## Call `POST /api/skills/url-to-markdown` ```json {"url": "https://example.com"} ``` `url` (required): an absolute `http://` or `https://` URL, at most 2,000 characters. ## How the page is fetched - User agent: `Mozilla/5.0 (compatible; grokzilla-url-to-markdown/1.0; +https://grokzilla.shop/terms)`. - **robots.txt is honored** for `grokzilla-url-to-markdown` (a `User-agent: grokzilla` group also matches). It is read once per host per call, including for every host a redirect leads to. Per RFC 9309, a 4xx robots.txt means no restrictions; a 5xx or unreachable one means the site is treated as disallowing crawlers. - **SSRF guard** (shared with seo and ai-detector): only http/https; every hostname is resolved and the connection pinned to a vetted public IP; private, loopback, link-local and cloud-metadata addresses are refused, on the first request and after every redirect. - At most 3 redirects, 5 seconds and 1 MB per page. Larger pages are cut at 1 MB and Markdown at 200,000 characters; `truncated` is then `true`. - Only `text/html` and `application/xhtml+xml` are converted. JavaScript is not run, so client-rendered pages may come back thin. - grokzilla.shop, grokzilla.info and x402-micro-pay.com are refused before payment (400, no 402). ## Errors (not charged) - `422 invalid_params`: missing `url`, not a string, no `http(s)://` scheme, over 2,000 characters. - `400`: `unsupported_url` (our own domains), `blocked_url` (private / metadata address), `invalid_url`, `robots_disallowed`, `robots_unreachable`, `unsupported_content_type`, `http_error` (the page returned non-2xx), `too_many_redirects`, `redirect_loop`. - `502 upstream_error`: timeout or connection failure. ## Response (paid 200) ```json { "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 } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.003 per call. ## Doc: https://grokzilla.shop/docs/uuid-mint # UUID Minter Mint 1-32 UUID v4 (or v1) identifiers for agent job IDs and idempotency keys. First-party on grokzilla.shop. ## Call `POST /api/skills/uuid-mint` ```json { "count": 2, "version": 4 } ``` `count` (optional integer 1-32, default 1), `version` (optional `4` default, or `1`). ## Response (paid 200) IDs below are placeholders showing the shape; each paid call mints fresh random IDs. ```json { "skill": "uuid_mint", "ok": true, "version": 4, "count": 2, "ids": [ "00000000-0000-4000-8000-000000000001", "00000000-0000-4000-8000-000000000002" ] } ``` Unpaid → HTTP 402 (x402 USDC on Base). Retry with `PAYMENT-SIGNATURE`. Free preflight: send `X-X402-Validate-Only: 1` (422 on bad params, else 402). Price: $0.003 per call.