{"openapi":"3.1.0","info":{"title":"AgentKit x402","version":"1.0.0","description":"Pay-per-call utility endpoints for AI agents. Payment: x402 v2, scheme exact, eip155:8453, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, pay to 0x9f950fbeE661D8867750750F600Ff03fb7BAbe8D. Contact: zenith-ops@mail.grokbot.com.","contact":{"name":"AgentKit x402","email":"zenith-ops@mail.grokbot.com","url":"https://agentkit-x402.erikssonanton2001.workers.dev/bot"},"license":{"name":"MIT","identifier":"MIT"},"x-logo":{"url":"https://agentkit-x402.erikssonanton2001.workers.dev/favicon.svg"},"x-guidance":"Call any /v1 endpoint with GET. Without payment you receive HTTP 402 and a PAYMENT-REQUIRED header; sign the exact-scheme USDC payment (x402 v2) and retry with the PAYMENT-SIGNATURE header, or use @x402/fetch which does this automatically. You are charged only for 2xx responses. Free samples: GET /v1/demo/{slug}. Limits: pages are fetched without JavaScript, robots.txt is honoured, email checks do not use SMTP."},"servers":[{"url":"https://agentkit-x402.erikssonanton2001.workers.dev"}],"paths":{"/v1/email-check":{"get":{"operationId":"email_check","summary":"Email address check","description":"Email address verification for AI agents and lead-qualification pipelines: syntax check, disposable-domain detection, role-account (info@, support@) detection, free-provider flag, domain typo suggestion (gmial.com -> gmail.com) and DNS MX/A validation via DNS-over-HTTPS. Returns verdict valid, risky, invalid or unknown with a 0-100 score. No SMTP probing, so mailbox existence is not confirmed.","tags":["paid"],"parameters":[{"name":"email","in":"query","required":true,"description":"Email address to check.","example":"anna@gmial.com","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"email":"anna@gmial.com","syntax_valid":true,"local_part":"anna","domain":"gmial.com","disposable":false,"role_account":false,"free_provider":false,"typo_suggestion":"gmail.com","dns":{"nxdomain":false,"mx":[{"priority":10,"host":"mail.gmial.com"}],"null_mx":false,"address_record":true},"verdict":"risky","score":70,"reasons":["possible_domain_typo"],"smtp_checked":false,"note":"Based on syntax, lists and DNS only. No SMTP connection is made, so a deliverable mailbox is not confirmed."}}}},"400":{"description":"Error (missing_email / invalid_email). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."}}}},"/v1/email-auth":{"get":{"operationId":"email_auth","summary":"Email authentication audit (SPF, DKIM, DMARC)","description":"Email deliverability and spoofing-protection audit for a domain: parses SPF (mechanisms, top-level DNS lookup count, +all/~all/-all), DMARC (policy, pct, rua/ruf, alignment), probes common DKIM selectors, and reports MX, BIMI, MTA-STS and TLS-RPT. Returns prioritised findings with fix hints and a 0-100 score. DNS-based; nested SPF includes are not expanded.","tags":["paid"],"parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name without scheme.","example":"example.com","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"domain":"example.com","score":75,"spf":{"found":true,"record":"v=spf1 include:_spf.example.net -all","all_qualifier":"-","mechanisms":["include:_spf.example.net","-all"],"dns_lookups_top_level":1},"dmarc":{"found":true,"record":"v=DMARC1; p=none; rua=mailto:dmarc@example.com","policy":"none","subdomain_policy":null,"pct":100,"rua":"mailto:dmarc@example.com","ruf":null,"dkim_alignment":"relaxed","spf_alignment":"relaxed"},"dkim":{"probed_selectors":["google","selector1","selector2","default","k1","s1","mail","dkim"],"found":[{"selector":"google","found":true,"key_type":"rsa","revoked":false,"approx_rsa_bits":2048}]},"mx":[{"priority":10,"host":"mail.example.com"}],"bimi":{"found":false,"record":null},"mta_sts":{"found":false,"record":null},"tls_rpt":{"found":false,"record":null},"findings":[{"severity":"medium","code":"dmarc_monitoring_only","message":"DMARC policy is p=none (monitoring only); spoofed mail is not blocked.","fix":"After reviewing reports, move to p=quarantine and then p=reject."}]}}}},"400":{"description":"Error (missing_domain / invalid_domain). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."},"404":{"description":"Error (domain_not_found). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"502":{"description":"Error (dns_unavailable). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}}}}},"/v1/domain-dns":{"get":{"operationId":"domain_dns","summary":"DNS records lookup","description":"DNS lookup for a domain through DNS-over-HTTPS: A, AAAA, NS, MX, TXT, CAA, SOA, CNAME records with TTLs, plus DNSSEC presence (DNSKEY, DS) and the resolver validation flag. Structured JSON for domain research, due diligence and infrastructure agents.","tags":["paid"],"parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name without scheme.","example":"example.com","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"domain":"example.com","records":{"a":[{"ttl":300,"data":"93.184.216.34"}],"aaaa":[],"ns":[{"ttl":3600,"data":"ns1.example.net"}],"mx":[{"ttl":3600,"data":"10 mail.example.com.","priority":10,"host":"mail.example.com"}],"txt":[{"ttl":300,"data":"v=spf1 -all"}],"caa":[],"soa":[],"cname":[],"dnskey":[],"ds":[]},"dnssec":{"dnskey_present":false,"ds_present":false,"resolver_validated":false,"note":"resolver_validated reflects the AD flag from the resolver (cloudflare-dns.com) for the A or NS answer."},"failed_lookups":[],"resolver":"cloudflare-dns.com (DNS-over-HTTPS)"}}}},"400":{"description":"Error (missing_domain / invalid_domain). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."},"404":{"description":"Error (domain_not_found). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"502":{"description":"Error (dns_unavailable). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}}}}},"/v1/site-contacts":{"get":{"operationId":"site_contacts","summary":"Website contact extraction","description":"Public contact details published on a website: emails (including mailto links and [at] obfuscation, classified role or personal), phone numbers normalised to E.164, social profile links, address hints and Swedish organisation numbers for .se sites. Fetches the given page plus up to 3 contact-like pages (/contact, /kontakt, /about, /om-oss, /impressum) on the same host only. Honours robots.txt; returns 403 blocked_by_robots (not charged) if disallowed.","tags":["paid"],"parameters":[{"name":"url","in":"query","required":true,"description":"Page URL, usually the homepage.","example":"https://example.com/","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"url":"https://example.se/","emails":[{"email":"info@example.se","type":"role","disposable_domain":false,"source_url":"https://example.se/kontakt"}],"phones":[{"e164":"+46812345678","display":"08-123 45 67","source_url":"https://example.se/kontakt"}],"social":[{"network":"linkedin","url":"https://www.linkedin.com/company/example","source_url":"https://example.se/"}],"address_hints":[{"text":"Storgatan 1, 111 22 Stockholm","source_url":"https://example.se/kontakt"}],"org_numbers":[{"value":"556016-0680","source_url":"https://example.se/kontakt"}],"pages_fetched":[{"url":"https://example.se/","status":200},{"url":"https://example.se/kontakt","status":200}],"pages_skipped":[{"url":"https://example.se/contact","reason":"http_404"}],"robots_txt":"found","notes":["Only information published on the site itself is returned. The caller is responsible for lawful use, in particular for personal email addresses of individuals and sole traders (GDPR)."]}}}},"400":{"description":"Error (invalid_url). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."},"403":{"description":"Error (blocked_by_robots). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"502":{"description":"Error (upstream_error / robots_unavailable / redirect_blocked). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"504":{"description":"Error (upstream_timeout). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}}}}},"/v1/site-audit":{"get":{"operationId":"site_audit","summary":"One-page technical SEO audit and tech detection","description":"Technical SEO audit of one page: HTTP status, redirect chain, title and meta description length, H1 count, canonical, robots meta, hreflang, Open Graph and Twitter tags, JSON-LD types, images without alt text, link counts, security headers (HSTS, CSP, X-Frame-Options), technology detection (CMS, framework, analytics, CDN) and a prioritised issue list with a 0-100 score. Static HTML only; honours robots.txt.","tags":["paid"],"parameters":[{"name":"url","in":"query","required":true,"description":"Page URL to audit.","example":"https://example.com/","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"url":"https://example.com/","final_url":"https://example.com/","status":200,"https":true,"indexable":true,"noindex_source":null,"title":"Example Domain","title_length":14,"meta_description":null,"meta_description_length":0,"canonical":null,"canonical_is_self":null,"robots_meta":null,"lang":"en","viewport":"width=device-width, initial-scale=1","h1":["Example Domain"],"h1_count":1,"h2_count":0,"open_graph":{},"twitter_card":{},"hreflang":[],"json_ld_types":[],"microdata":false,"images":{"total":0,"missing_alt":0},"links":{"internal":0,"external":1,"nofollow":0},"word_count":28,"redirect_chain":[],"security_headers":{"strict_transport_security":null,"content_security_policy":false,"x_content_type_options":null,"x_frame_options":null,"referrer_policy":null,"permissions_policy":false,"cross_origin_opener_policy":null},"technologies":[],"score":94,"issues":[{"severity":"warning","code":"missing_meta_description","message":"No meta description."}]}}}},"400":{"description":"Error (invalid_url). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."},"403":{"description":"Error (blocked_by_robots). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"502":{"description":"Error (upstream_error / robots_unavailable / redirect_blocked). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"504":{"description":"Error (upstream_timeout). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}}}}},"/v1/url-markdown":{"get":{"operationId":"url_markdown","summary":"URL to Markdown","description":"Fetches a web page (up to 1.5 MB, 8 s timeout) and returns clean Markdown: title, headings, paragraphs, lists, links, images, code blocks and simple tables, with navigation and footers removed. Ready to feed to LLMs. Static HTML only, no JavaScript rendering. Honours robots.txt.","tags":["paid"],"parameters":[{"name":"url","in":"query","required":true,"description":"Page URL to convert.","example":"https://example.com/","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"url":"https://example.com/","final_url":"https://example.com/","status":200,"title":"Example Domain","markdown":"# Example Domain\n\nThis domain is for use in illustrative examples in documents.\n\n[More information...](https://www.iana.org/domains/example)","characters":140,"words":17,"source_bytes":1256,"source_truncated":false,"redirects":0,"javascript_rendered":false,"note":"Static HTML only: content that a page builds with JavaScript is not included."}}}},"400":{"description":"Error (invalid_url). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."},"403":{"description":"Error (blocked_by_robots). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"502":{"description":"Error (upstream_error / robots_unavailable / redirect_blocked). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"504":{"description":"Error (upstream_timeout). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}}}}},"/v1/se/validate":{"get":{"operationId":"se_validate","summary":"Swedish identifier validator","description":"Validates Swedish identifiers with checksum and date logic: personnummer, samordningsnummer, organisationsnummer (including sole-trader and VAT forms), bankgiro, plusgiro and OCR payment references. Returns normalised forms and error codes. No application-level storage.","tags":["paid"],"parameters":[{"name":"type","in":"query","required":true,"description":"Identifier type.","example":"orgnr","schema":{"type":"string","enum":["personnummer","samordningsnummer","orgnr","bankgiro","plusgiro","ocr"]}},{"name":"value","in":"query","required":true,"description":"The identifier to validate.","example":"556016-0680","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"requested_type":"orgnr","valid":true,"errors":[],"kind":"legal_entity","legal_form":"Aktiebolag / Limited company (AB)","normalized":"556016-0680","vat_number":"SE556016068001","vat_format_valid":true}}}},"400":{"description":"Error (missing_type / invalid_type / missing_value / invalid_value). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."}}}},"/v1/iban":{"get":{"operationId":"iban","summary":"IBAN validator","description":"IBAN validation: country-specific length (from a bundled table of IBAN countries), mod-97 checksum, normalised and formatted output, BBAN and check digits. Does not check that the account exists.","tags":["paid"],"parameters":[{"name":"iban","in":"query","required":true,"description":"IBAN, spaces allowed.","example":"GB82 WEST 1234 5698 7654 32","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"valid":true,"errors":[],"country":"GB","normalized":"GB82WEST12345698765432","formatted":"GB82 WEST 1234 5698 7654 32","check_digits":"82","bban":"WEST12345698765432"}}}},"400":{"description":"Error (missing_iban / invalid_iban). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."}}}},"/v1/se/account-to-iban":{"get":{"operationId":"se_account_to_iban","summary":"Swedish bank account to IBAN","description":"Converts a Swedish clearing number and account number to IBAN and BIC, identifies the bank, and validates the account number checksum according to the bank-specific rules. Clearing table dated 2026-10-16; does not check that the account exists.","tags":["paid"],"parameters":[{"name":"clearing","in":"query","required":true,"description":"Clearing number, 4 digits (5 for Swedbank 8xxx).","example":"5000","schema":{"type":"string"}},{"name":"account","in":"query","required":true,"description":"Account number.","example":"1234501","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"valid":true,"errors":[],"warnings":[],"clearing":"5000","bank":"SEB","bic":"ESSESESS","checksum_valid":true,"iban":"SE1350000000050001234501","iban_formatted":"SE13 5000 0000 0500 0123 4501"}}}},"400":{"description":"Error (missing_clearing / missing_account / invalid_input). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."}}}},"/v1/bank-days":{"get":{"operationId":"bank_days","summary":"Swedish bank-day calculator","description":"Adds or subtracts Swedish bank days (weekends, public holidays and midsommarafton, julafton, nyarsafton excluded) to a date. Optional mode=work counts only weekends and red days. Returns the result date with weekday, ISO week and holiday names for both dates.","tags":["paid"],"parameters":[{"name":"from","in":"query","required":true,"description":"Start date, YYYY-MM-DD.","example":"2026-12-23","schema":{"type":"string"}},{"name":"add","in":"query","required":true,"description":"Bank days to add (negative to go back, max 1000).","example":"2","schema":{"type":"string"}},{"name":"mode","in":"query","required":false,"description":"bank (default) or work.","example":"bank","schema":{"type":"string","enum":["bank","work"]}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Success. Payment is settled.","content":{"application/json":{"schema":{"type":"object"},"example":{"from":"2026-12-23","add":2,"mode":"bank","result_date":"2026-12-29","from_info":{"date":"2026-12-23","is_business_day":true},"result_info":{"date":"2026-12-29","is_business_day":true}}}}},"400":{"description":"Error (missing_from / invalid_from / invalid_add / invalid_mode). Not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"charged":{"type":"boolean"}}}}}},"402":{"description":"Payment required. The PAYMENT-REQUIRED header carries the x402 v2 requirements (base64 JSON)."}}}}}}