{"openapi":"3.1.0","info":{"title":"NetIntel API","version":"1.0.0","description":"DNS lookup, WHOIS/RDAP, SSL/TLS certificate checks, email SPF/DKIM/DMARC and deliverability, email verification, IP geolocation and IP reputation, domain age and availability, web page fetch, extract and search, and an OpenAI-compatible LLM gateway — 147 pay-per-call endpoints over x402 (USDC on Base or Solana mainnet), no API keys or signup.\n\nNetIntel is agent fair-trade aligned: transparent per-call pricing in USDC on Base or Solana via x402, no API keys or signup, and automatic no-charge on server errors, upstream failures, and input-validation rejections — failed calls are never billed across NetIntel's network, domain, and data-intelligence endpoints.","x-guidance":"NetIntel provides 147 network intelligence endpoints covering DNS, SSL/TLS, WHOIS/RDAP, email security, web fingerprinting, and OSINT. Every endpoint is pay-per-call via x402 micropayments (USDC on Base or Solana mainnet — no API keys, no subscriptions). Call any endpoint normally; if unpaid it returns HTTP 402 with payment requirements, then pay and retry. The per-call price is in each operation's x-payment-info.","contact":{"email":"support@netintel.dev"},"x-logo":{"url":"https://netintel.dev/favicon.png","altText":"NetIntel API"}},"servers":[{"url":"https://netintel.dev"}],"paths":{"/health":{"get":{"operationId":"getHealth","summary":"Report service health and uptime","tags":["meta"],"security":[],"responses":{"200":{"description":"Service is healthy","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"version":{"type":"string"}}}}}}}}},"/dns/lookup":{"get":{"operationId":"getDnsLookup","summary":"DNS lookup for any domain","tags":["dns"],"description":"DNS lookup for any domain — resolve A, AAAA, MX, TXT, NS, CNAME, SOA and PTR records in one call, with SPF and DMARC parsed from TXT.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name to query (e.g. example.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.002000","outputShape":"domain, records, security, propagation"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"records":{"type":"object"},"security":{"type":"object"},"propagation":{"type":"object"}}},"example":{"domain":"example.com","records":{"A":["93.184.216.34"],"AAAA":["2606:2800:220:1:248:1893:25c8:1946"],"MX":[{"priority":10,"exchange":"mail.example.com"}],"NS":["ns1.example.com","ns2.example.com"],"TXT":["v=spf1 include:_spf.google.com ~all"],"SOA":{"mname":"ns1.example.com","rname":"admin.example.com","serial":2024010101,"refresh":3600,"retry":900,"expire":604800,"minimum":86400},"CNAME":[],"PTR":[]},"security":{"spf":{"raw":"v=spf1 include:_spf.google.com ~all","version":"spf1","mechanisms":["include:_spf.google.com"],"all_qualifier":"~all"},"dkim":{"raw":"v=DKIM1; k=rsa; p=MIIBIjAN...","version":"DKIM1","key_type":"rsa","public_key":"MIIBIjAN..."},"dmarc":{"raw":"v=DMARC1; p=reject; rua=mailto:dmarc@example.com","version":"DMARC1","policy":"reject","subdomain_policy":null,"pct":null,"rua":"mailto:dmarc@example.com","ruf":null}},"propagation":{"resolvers":[{"resolver":"Google","ip":"8.8.8.8","A":["93.184.216.34"]},{"resolver":"Cloudflare","ip":"1.1.1.1","A":["93.184.216.34"]},{"resolver":"Quad9","ip":"9.9.9.9","A":["93.184.216.34"]}],"consistent":true}}}}},"402":{"description":"Payment Required"}}}},"/ssl/analyze":{"get":{"operationId":"getSslAnalyze","summary":"Inspect a TLS handshake, cert chain, protocols and ciphers","tags":["ssl"],"description":"Performs a TLS handshake to inspect the certificate chain, probes supported TLS versions (1.0–1.3), detects weak keys and expiry issues, and returns an overall security grade (A/B/C/F). For just the cert facts fast, see the cheaper /ssl/cert (quick tier).","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain to analyze (e.g. example.com)","schema":{"type":"string"}},{"name":"port","in":"query","required":false,"description":"Port to connect to (default: 443)","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.007000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.007000","outputShape":"host, port, certificate, chain, chain_valid, connection, warnings, grade"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"number"},"certificate":{"type":"object"},"chain":{"type":"array"},"chain_valid":{"type":"boolean"},"connection":{"type":"object"},"warnings":{"type":"array"},"grade":{"type":"string"}}},"example":{"host":"example.com","port":443,"certificate":{"subject":{"common_name":"example.com","organization":"Internet Corporation for Assigned Names and Numbers","organizational_unit":null,"country":"US"},"issuer":{"common_name":"DigiCert TLS RSA SHA256 2020 CA1","organization":"DigiCert Inc","country":"US"},"serial_number":"0FD078DD48F1A2BD4D0F2BA96B6038FE","san":["example.com","www.example.com"],"key_info":{"algorithm":"RSA","size":2048},"not_before":"Jan 13 00:00:00 2024 GMT","not_after":"Feb 13 23:59:59 2025 GMT","signature_algorithm":"sha256WithRSAEncryption","version":3},"chain":[{"subject":"DigiCert TLS RSA SHA256 2020 CA1","issuer":"DigiCert Global Root CA","not_before":"Apr 14 00:00:00 2021 GMT","not_after":"Apr 13 23:59:59 2031 GMT"}],"chain_valid":true,"connection":{"protocol":"TLSv1.3","cipher":"TLS_AES_256_GCM_SHA384","supported_protocols":["TLS 1.2","TLS 1.3"]},"warnings":[],"grade":"A"}}}},"402":{"description":"Payment Required"}}}},"/ssl/cert":{"get":{"operationId":"getSslCert","summary":"SSL certificate check for any domain","tags":["ssl"],"description":"SSL certificate check for any domain — issuer, subject, SANs, valid from/to, days until expiry, expired/self-signed flags, TLS version, chain length. One TLS handshake, sub-2-second answer. The light, cheap tier under /ssl/analyze (full analysis, grading). No API key.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain to check (e.g. example.com) — a full URL is also accepted, the host is extracted. Aliases: host, hostname, url, site","schema":{"type":"string"}},{"name":"port","in":"query","required":false,"description":"Port to connect to (default: 443, clamped to 1-65535). Alias: p","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"domain, port, subject, issuer, sans, sans_truncated, valid_from, valid_to, days_remaining, expired, not_yet_valid, self_signed, chain_length, tls_version, sig_alg, key, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"port":{"type":"number"},"subject":{"type":["string","null"]},"issuer":{"type":"object","properties":{"common_name":{"type":["string","null"]},"organization":{"type":["string","null"]}}},"sans":{"type":"array"},"sans_truncated":{"type":"boolean"},"valid_from":{"type":["string","null"]},"valid_to":{"type":["string","null"]},"days_remaining":{"type":["number","null"]},"expired":{"type":"boolean"},"not_yet_valid":{"type":"boolean"},"self_signed":{"type":"boolean"},"chain_length":{"type":"number"},"tls_version":{"type":["string","null"]},"sig_alg":{"type":["string","null"]},"key":{"type":"object","properties":{"type":{"type":["string","null"]},"bits":{"type":["number","null"]}}},"cache_age_seconds":{"type":"number"},"findings":{"type":"array"}}},"example":{"domain":"example.com","port":443,"subject":"example.com","issuer":{"common_name":"R11","organization":"Let's Encrypt"},"sans":["example.com","www.example.com"],"sans_truncated":false,"valid_from":"2026-07-01T00:00:00.000Z","valid_to":"2026-09-29T23:59:59.000Z","days_remaining":27,"expired":false,"not_yet_valid":false,"self_signed":false,"chain_length":3,"tls_version":"TLSv1.3","sig_alg":"sha256WithRSAEncryption","key":{"type":"EC","bits":256},"cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postSslCert","summary":"SSL certificate check for any domain","tags":["ssl"],"description":"SSL certificate check for any domain — issuer, subject, SANs, valid from/to, days until expiry, expired/self-signed flags, TLS version, chain length. One TLS handshake, sub-2-second answer. The light, cheap tier under /ssl/analyze (full analysis, grading). No API key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain to check (e.g. example.com) — a full URL is also accepted, the host is extracted. Aliases: host, hostname, url, site"},"port":{"type":"number","description":"Port to connect to (default: 443, clamped to 1-65535). Alias: p"}},"required":["domain"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"domain, port, subject, issuer, sans, sans_truncated, valid_from, valid_to, days_remaining, expired, not_yet_valid, self_signed, chain_length, tls_version, sig_alg, key, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"port":{"type":"number"},"subject":{"type":["string","null"]},"issuer":{"type":"object","properties":{"common_name":{"type":["string","null"]},"organization":{"type":["string","null"]}}},"sans":{"type":"array"},"sans_truncated":{"type":"boolean"},"valid_from":{"type":["string","null"]},"valid_to":{"type":["string","null"]},"days_remaining":{"type":["number","null"]},"expired":{"type":"boolean"},"not_yet_valid":{"type":"boolean"},"self_signed":{"type":"boolean"},"chain_length":{"type":"number"},"tls_version":{"type":["string","null"]},"sig_alg":{"type":["string","null"]},"key":{"type":"object","properties":{"type":{"type":["string","null"]},"bits":{"type":["number","null"]}}},"cache_age_seconds":{"type":"number"},"findings":{"type":"array"}}},"example":{"domain":"example.com","port":443,"subject":"example.com","issuer":{"common_name":"R11","organization":"Let's Encrypt"},"sans":["example.com","www.example.com"],"sans_truncated":false,"valid_from":"2026-07-01T00:00:00.000Z","valid_to":"2026-09-29T23:59:59.000Z","days_remaining":27,"expired":false,"not_yet_valid":false,"self_signed":false,"chain_length":3,"tls_version":"TLSv1.3","sig_alg":"sha256WithRSAEncryption","key":{"type":"EC","bits":256},"cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/redirect/trace":{"get":{"operationId":"getRedirectTrace","summary":"Follows a URL through its full redirect chain","tags":["redirect"],"description":"Follows a URL through its full redirect chain (up to 20 hops), recording status codes, timing, headers, TLS status, and protocol downgrades per hop, then returns an overall redirect health grade (A–F).","parameters":[{"name":"url","in":"query","required":true,"description":"URL to trace redirects for (e.g. http://google.com)","schema":{"type":"string"}},{"name":"max_hops","in":"query","required":false,"description":"Maximum redirect hops to follow (default: 10, max: 20)","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"chain, final_url, final_status_code, total_hops, total_timing_ms, protocol_downgrade, loop_detected, flags, grade, score, deductions"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"chain":{"type":"array"},"final_url":{"type":"string"},"final_status_code":{"type":"number"},"total_hops":{"type":"number"},"total_timing_ms":{"type":"number"},"protocol_downgrade":{"type":"boolean"},"loop_detected":{"type":"boolean"},"flags":{"type":"array"},"grade":{"type":"string"},"score":{"type":"number"},"deductions":{"type":"array"}}},"example":{"chain":[{"hop":0,"url":"http://example.com/","status_code":301,"location":"https://example.com/","headers":{"location":"https://example.com/","server":"nginx"},"tls":false,"timing_ms":85},{"hop":1,"url":"https://example.com/","status_code":200,"location":null,"headers":{"server":"nginx","content-type":"text/html"},"tls":true,"timing_ms":42}],"final_url":"https://example.com/","final_status_code":200,"total_hops":1,"total_timing_ms":127,"protocol_downgrade":false,"loop_detected":false,"flags":["http_entry_point"],"grade":"A","score":95,"deductions":[{"reason":"http_entry_point","points":-5}]}}}},"402":{"description":"Payment Required"}}}},"/security-headers/analyze":{"get":{"operationId":"getSecurityHeadersAnalyze","summary":"Grade a URL's 10 security-critical response headers","tags":["security-headers"],"description":"Fetches a URL and evaluates 10 security-critical response headers (CSP, HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, X-XSS-Protection, CORP, COEP, COOP), detects anti-patterns, and returns an overall security grade (A–F).","parameters":[{"name":"target","in":"query","required":true,"description":"URL or domain to audit security headers for (e.g. https://example.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"service, target, timestamp, grade, score, deductions, results, warnings, errors, meta"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string"},"target":{"type":"string"},"timestamp":{"type":"string"},"grade":{"type":"string"},"score":{"type":"number"},"deductions":{"type":"array"},"results":{"type":"object"},"warnings":{"type":"array"},"errors":{"type":"array"},"meta":{"type":"object"}}},"example":{"service":"security-headers","target":"https://example.com","timestamp":"2025-01-15T12:00:00.000Z","grade":"B","score":78,"deductions":[{"reason":"Permissions-Policy not set","points":-5},{"reason":"Cross-Origin-Resource-Policy not set","points":-2},{"reason":"Cross-Origin-Embedder-Policy not set","points":-2},{"reason":"Cross-Origin-Opener-Policy not set","points":-2},{"reason":"X-Powered-By header exposes server framework","points":-3}],"results":{"final_url":"https://example.com/","status_code":200,"content_type":"text/html; charset=utf-8","summary":{"pass":6,"warn":0,"fail":0,"info":4},"headers":{"content-security-policy":{"present":true,"raw_value":"default-src 'self'","status":"pass","reason":"Content-Security-Policy is set with a strong policy"},"strict-transport-security":{"present":true,"raw_value":"max-age=31536000; includeSubDomains","status":"pass","reason":"HSTS enabled with max-age=31536000"},"x-content-type-options":{"present":true,"raw_value":"nosniff","status":"pass","reason":"X-Content-Type-Options is set to nosniff"},"x-frame-options":{"present":true,"raw_value":"DENY","status":"pass","reason":"X-Frame-Options is set to DENY"},"referrer-policy":{"present":true,"raw_value":"strict-origin-when-cross-origin","status":"pass","reason":"Referrer-Policy is set to strict-origin-when-cross-origin"},"permissions-policy":{"present":false,"raw_value":null,"status":"warn","reason":"Permissions-Policy not set — browser features not restricted"},"x-xss-protection":{"present":false,"raw_value":null,"status":"info","reason":"X-XSS-Protection not set — modern browsers use CSP instead"},"cross-origin-resource-policy":{"present":false,"raw_value":null,"status":"info","reason":"Cross-Origin-Resource-Policy not set"},"cross-origin-embedder-policy":{"present":false,"raw_value":null,"status":"info","reason":"Cross-Origin-Embedder-Policy not set"},"cross-origin-opener-policy":{"present":false,"raw_value":null,"status":"info","reason":"Cross-Origin-Opener-Policy not set"}},"anti_patterns":[{"header":"x-powered-by","raw_value":"Express","severity":"warn","reason":"Information leakage — reveals server framework"}]},"warnings":[],"errors":[],"meta":{"duration_ms":312}}}}},"402":{"description":"Payment Required"}}}},"/email-auth":{"post":{"operationId":"postEmailAuth","summary":"Email deliverability & domain security check","tags":["email-auth"],"description":"Email deliverability & domain security check — validates SPF, DKIM (multi-selector), and DMARC, detects spoofing and misconfigurations, and returns an A–F email security grade with transparent deductions. Anti-spam / anti-phishing readiness for any sending domain.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain to validate email authentication for (e.g. example.com)"},"dkim_selectors":{"type":"array","items":{"type":"string"},"description":"Optional list of DKIM selectors to probe (defaults to common selectors)"}},"required":["domain"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.002000","outputShape":"domain, resolves, grade, score, spf, dkim, dmarc, deductions"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"resolves":{"type":"boolean","description":"Whether the domain has mail infrastructure (MX/A) — false adds a -100 no-mail-infrastructure deduction"},"grade":{"type":"string"},"score":{"type":"number"},"spf":{"type":"object"},"dkim":{"type":"object"},"dmarc":{"type":"object"},"deductions":{"type":"array"}}},"example":{"domain":"example.com","resolves":true,"grade":"A","score":100,"spf":{"found":true,"record":"v=spf1 include:_spf.google.com -all","mechanisms":["include:_spf.google.com"],"all_qualifier":"-all","dns_lookup_count":1,"issues":[]},"dkim":{"found":true,"selectors_checked":["default","google"],"records":[{"selector":"google","record":"v=DKIM1; k=rsa; p=MIIBIjAN...","key_type":"rsa","key_length_bits":2048,"issues":[]}],"issues":[]},"dmarc":{"found":true,"record":"v=DMARC1; p=reject; rua=mailto:dmarc@example.com; ruf=mailto:forensic@example.com","policy":"reject","subdomain_policy":null,"pct":100,"rua":["mailto:dmarc@example.com"],"ruf":["mailto:forensic@example.com"],"issues":[]},"deductions":[]}}}},"402":{"description":"Payment Required"}}}},"/cloud-fingerprint/analyze":{"get":{"operationId":"getCloudFingerprintAnalyze","summary":"Fingerprints a domain's cloud infrastructure","tags":["cloud-fingerprint"],"description":"Fingerprints a domain's cloud infrastructure — DNS records, HTTP headers, a TLS handshake and PTR lookups — to detect CDN, WAF, hosting, DNS and email provider, plus cert issuer/wildcard/SAN count, with confidence scores and a security grade (A–F). Hosts that resolve but answer nothing on 80/443 return http_reachable:false, score null and grade insufficient_data — never a grade inferred from an unanswered probe.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain to fingerprint (e.g. example.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"domain, resolved_ips, cname_chain, http_reachable, hosting, cdn, waf, dns_provider, email_provider, http_fingerprint, tls, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"resolved_ips":{"type":"array"},"cname_chain":{"type":"array"},"http_reachable":{"type":"boolean"},"hosting":{"type":"object"},"cdn":{"type":"object"},"waf":{"type":"array"},"dns_provider":{"type":"object"},"email_provider":{"type":"object"},"http_fingerprint":{"type":"object"},"tls":{"type":"object","properties":{"issuer":{"type":["string","null"]},"wildcard":{"type":["boolean","null"]},"san_count":{"type":["number","null"]}}},"score":{"type":["number","null"]},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"domain":"cloudflare.com","resolved_ips":["104.16.133.229","104.16.132.229"],"cname_chain":[],"http_reachable":true,"hosting":{"provider":"Cloudflare","confidence":"medium","signals":["cf-ray header present"]},"cdn":{"provider":"Cloudflare","confidence":"medium","signals":["cf-ray header present"]},"waf":[{"provider":"Cloudflare WAF","confidence":"medium","signals":["cf-ray header present"]}],"dns_provider":{"provider":"Cloudflare DNS","confidence":"high","signals":["NS ns3.cloudflare.com contains cloudflare.com"]},"email_provider":{"provider":null,"confidence":null,"signals":[]},"http_fingerprint":{"https_enforced":true,"server_header":"cloudflare","server_version_exposed":false,"x_powered_by":null,"notable_headers":["cf-ray"]},"tls":{"issuer":"Google Trust Services","wildcard":true,"san_count":5},"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/schema-parse/extract":{"post":{"operationId":"postSchemaParseExtract","summary":"Extract text into your own JSON Schema","tags":["schema-parse"],"description":"Extract structured data from any unstructured text into your own JSON Schema — structured-data / information extraction, text-to-JSON, LLM data enrichment. You supply the schema; the LLM returns a matching object. Works for contacts, invoices, events, product specs, medical records, legal clauses, resumes — any shape. Returns the extracted object plus token usage; unfound fields are omitted or null.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"raw_text":{"type":"string","description":"Unstructured text to extract data from — emails, resumes, articles, log entries, contracts, support tickets, etc."},"target_schema":{"type":"object","description":"A standard JSON Schema object with type, properties, and optionally required. Defines the shape of the extracted output."}},"required":["raw_text","target_schema"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"extracted, tokens_used"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"extracted":{"type":"object","description":"Structured data conforming to the caller's target_schema. Missing fields are omitted or null."},"tokens_used":{"type":"object","description":"LLM token consumption for this extraction","properties":{"input":{"type":"number","description":"Prompt tokens consumed"},"output":{"type":"number","description":"Completion tokens consumed"}}}}},"example":{"extracted":{"name":"Sarah Chen","email":"sarah.chen@acme.com","phone":"555-867-5309","company":"Acme Corp","role":"VP of Engineering"},"tokens_used":{"input":312,"output":48}}}}},"402":{"description":"Payment Required"}}}},"/messages":{"post":{"operationId":"postMessages","summary":"Chat completions answered by Claude Sonnet","tags":["messages"],"description":"OpenAI-compatible chat completions over x402, answered by Claude Sonnet 4.6 — send a messages array and get an assistant reply for Q&A, reasoning, agent planning, coding help, summarization, extraction, and classification. OpenAI chat.completions body and response. Vision: up to 4 https image_url parts. Flat $0.06; input ~24KB (each image counts 1,600 tokens), max_tokens 1024; no streaming.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Model to use. Supported: claude-sonnet-4-6 (aliases: balanced, sonnet). Optional — defaults to claude-sonnet-4-6."},"messages":{"type":"array","description":"Chat messages in OpenAI format. Each item is {role: 'system'|'user'|'assistant', content: string}. System messages are applied as the system prompt. User content may also be an array of {type:'text',text} and up to 4 {type:'image_url',image_url:{url:'https://…'}} parts (JPEG/PNG/GIF/WebP).","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_tokens":{"type":"number","description":"Maximum output tokens. Optional — defaults to 1024, capped at 1024."},"temperature":{"type":"number","description":"Sampling temperature (0–1). Optional."},"top_p":{"type":"number","description":"Nucleus sampling (0–1). Optional; ignored if temperature is set."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.060000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.060000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"One choice with the assistant message and a finish_reason (stop/length/content_filter/tool_calls)."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"claude-sonnet-4-6","choices":[{"index":0,"message":{"role":"assistant","content":"The capital of France is Paris."},"finish_reason":"stop"}],"usage":{"prompt_tokens":14,"completion_tokens":8,"total_tokens":22}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-4o":{"post":{"operationId":"postOpenaiGpt4o","summary":"Call OpenAI's gpt-4o via a single pay-per-call x402 endpoint","tags":["openai"],"description":"Call OpenAI's gpt-4o via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.10 per request in USDC. Standard OpenAI chat.completions shape. EVERY call is bounded by a 16000-token combined input budget (real tokenizer) plus the 48000-char cap; output 2048. Vision: up to 4 https image_url parts (detail low/high/auto).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role, content}]. content is text, or parts: {type:'text',text} and (user role, max 4 per call) {type:'image_url',image_url:{url:'https://…',detail:'low'|'high'|'auto'}}. EVERY request — with or without images — must fit a 16000-token combined input budget and a 48000-char cap.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"description":"Message text, or content parts: {type:'text',text} / {type:'image_url',image_url:{url,detail}}"}},"required":["role","content"]}},"max_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 2048, capped at 2048."},"temperature":{"type":"number","description":"Sampling temperature. Optional."},"top_p":{"type":"number","description":"Nucleus sampling. Optional."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.100000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.100000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-4o","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-4-1":{"post":{"operationId":"postOpenaiGpt41","summary":"Call OpenAI's gpt-4.1 via a single pay-per-call x402 endpoint","tags":["openai"],"description":"Call OpenAI's gpt-4.1 via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.09 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~48000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 2048, capped at 2048."},"temperature":{"type":"number","description":"Sampling temperature. Optional."},"top_p":{"type":"number","description":"Nucleus sampling. Optional."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.090000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.090000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-4.1","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-4-1-mini":{"post":{"operationId":"postOpenaiGpt41Mini","summary":"Call OpenAI's gpt-4.1-mini, pay per call","tags":["openai"],"description":"Call OpenAI's gpt-4.1-mini via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~12000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 2048, capped at 2048."},"temperature":{"type":"number","description":"Sampling temperature. Optional."},"top_p":{"type":"number","description":"Nucleus sampling. Optional."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-4.1-mini","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/api/v1/chat/completions":{"post":{"operationId":"postApiV1ChatCompletions","summary":"OpenAI-compatible chat completions gateway","tags":["api"],"description":"OpenAI-compatible chat completions gateway (alias of /v1/chat/completions for api/v1-style base URLs) — standard request shape, model chosen in the body: any gpt-* chat model (not Claude/embeddings), each at its own price. Priced per model, $0.005–$0.65 per call in USDC via x402, no API key: POST unpaid and the 402 quotes your model's exact price. Supports response_format json_object. Free model catalog: GET /v1/models.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Model id, e.g. gpt-4o-mini. Free catalog: GET /v1/models"},"messages":{"type":"array","description":"OpenAI chat messages: [{role, content}]","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_tokens":{"type":"number","description":"Max output tokens (clamped to the model's cap)."}},"required":["model","messages"]}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.005000","max":"0.650000","amount":"0.005000","minAmount":"0.005000","maxAmount":"0.650000","note":"$0.005–$0.65 (depends on the model in the body)"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","costRangeUsd":{"min":"0.005000","max":"0.650000"},"costNote":"$0.005–$0.65 (depends on the model in the body)","outputShape":"id, object, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"model":{"type":"string"},"choices":{"type":"array"},"usage":{"type":"object"}}},"example":{"id":"chatcmpl-9f2f28d90a3c4e0f8f1c2d3e","object":"chat.completion","model":"gpt-4o-mini","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":13,"completion_tokens":2,"total_tokens":15}}}}},"402":{"description":"Payment Required"}}}},"/api/v1/embeddings":{"post":{"operationId":"postApiV1Embeddings","summary":"OpenAI-compatible text embeddings API","tags":["api"],"description":"OpenAI-compatible text embeddings API (alias of /v1/embeddings for api/v1-style base URLs) — input as a string or batch of up to 128 strings, model text-embedding-3-small (default) or text-embedding-3-large. Flat $0.005 per call in USDC via x402, no OpenAI account or API key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"description":"Text to embed. Also accepts an array of up to 128 strings (64000 chars total).","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"maxItems":128}]},"model":{"type":"string","description":"text-embedding-3-small (default) or text-embedding-3-large"},"dimensions":{"type":"number","description":"Optional output vector size (truncation)."}},"required":["input"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"object, data, model, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string"},"data":{"type":"array","description":"[{object:'embedding', index, embedding:[…]}]"},"model":{"type":"string"},"usage":{"type":"object"}}},"example":{"object":"list","data":[{"object":"embedding","index":0,"embedding":[0.0102,-0.0083,0.0264]}],"model":"text-embedding-3-small","usage":{"prompt_tokens":4,"total_tokens":4}}}}},"402":{"description":"Payment Required"}}}},"/v1/embeddings":{"post":{"operationId":"postV1Embeddings","summary":"OpenAI-compatible text embeddings API","tags":["v1"],"description":"OpenAI-compatible text embeddings API — standard /v1/embeddings request shape: input as a string or a batch of up to 128 strings (64000 chars total on text-embedding-3-small, the default; 24000 on text-embedding-3-large). Flat $0.005 per call in USDC via x402, no OpenAI account or API key. Returns float vectors for RAG, semantic search, clustering, and dedup.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"description":"Text to embed. Also accepts an array of up to 128 strings (64000 chars total).","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"maxItems":128}]},"model":{"type":"string","description":"text-embedding-3-small (default) or text-embedding-3-large"},"dimensions":{"type":"number","description":"Optional output vector size (truncation)."}},"required":["input"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"object, data, model, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","description":"Always 'list'"},"data":{"type":"array","description":"[{object:'embedding', index, embedding:[…]}]"},"model":{"type":"string"},"usage":{"type":"object","description":"prompt_tokens, total_tokens (input-only)"}}},"example":{"object":"list","data":[{"object":"embedding","index":0,"embedding":[0.0102,-0.0083,0.0264]}],"model":"text-embedding-3-small","usage":{"prompt_tokens":4,"total_tokens":4}}}}},"402":{"description":"Payment Required"}}}},"/embeddings":{"post":{"operationId":"postEmbeddings","summary":"Multilingual text embeddings","tags":["embeddings"],"description":"Multilingual text embeddings (384-dim) served in-house, no OpenAI dependency, no API key. NetIntel's cheapest embeddings at $0.001/call, batches up to 256 texts. Supports query/passage input types for retrieval (e5). Pairs with /text/chunk for a full chunk→embed RAG pipeline on one provider.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"description":"Text to embed. Also accepts an array of up to 256 strings (200000 chars total). Aliases: text, inputs.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"maxItems":256}]},"input_type":{"type":"string","description":"query or passage (default). Aliases: task, type."},"encoding_format":{"type":"string","description":"float (default) or base64."}},"required":["input"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.001000","outputShape":"object, data, model, dimensions, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","description":"Always 'list'"},"data":{"type":"array","description":"[{object:'embedding', index, embedding:[…384 floats]}]"},"model":{"type":"string","description":"Always 'netintel-embed-small'"},"dimensions":{"type":"number","description":"Always 384"},"usage":{"type":"object","description":"prompt_tokens, total_tokens (input-only, estimated)"}}},"example":{"object":"list","data":[{"object":"embedding","index":0,"embedding":[0.0123,-0.0456,0.0789]}],"model":"netintel-embed-small","provider":"netintel","source_model":"multilingual-e5-small","dimensions":384,"input_type":"passage","normalized":true,"usage":{"prompt_tokens":6,"total_tokens":6},"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/semantic/rank":{"post":{"operationId":"postSemanticRank","summary":"Semantic similarity ranking","tags":["semantic"],"description":"Semantic similarity ranking — send a query plus up to 100 candidate texts, get the candidates back ranked by semantic similarity with scores. No vectors, no cosine math, no embedding model to manage: one call, one price, ranked results. Flat $0.02 per call in USDC via x402, no API key. For RAG retrieval, FAQ matching, and search result ordering.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"The text to rank candidates against."},"candidates":{"type":"array","description":"1-100 candidate strings to rank (64000 chars total on the default model).","items":{"type":"string"}},"model":{"type":"string","description":"text-embedding-3-small (default) or text-embedding-3-large"},"top_k":{"type":"number","description":"Return only the best N results. Optional."},"min_score":{"type":"number","description":"Drop results scoring below this (-1 to 1). Optional."}},"required":["query","candidates"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"results, method, provider, model, dimensions, normalized, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","description":"Ranked best-first: [{index (original position), score, text}]"},"method":{"type":"string","description":"Always 'embedding_similarity'"},"provider":{"type":"string"},"model":{"type":"string"},"dimensions":{"type":"number"},"normalized":{"type":"boolean"},"usage":{"type":"object","description":"prompt_tokens (input-only)"}}},"example":{"results":[{"index":0,"score":0.5361,"text":"Use the Forgot Password link to recover your account."},{"index":1,"score":0.1399,"text":"Refunds are accepted within 30 days."}],"method":"embedding_similarity","provider":"openai","model":"text-embedding-3-small","dimensions":1536,"normalized":true,"usage":{"prompt_tokens":36}}}}},"402":{"description":"Payment Required"}}}},"/v1/chat/completions":{"post":{"operationId":"postV1ChatCompletions","summary":"OpenAI-compatible chat completions gateway","tags":["v1"],"description":"OpenAI-compatible chat completions gateway — standard /v1/chat/completions path and request shape, model chosen in the body: any gpt-* chat model (not Claude/embeddings), each at its own price. Priced per model, $0.005–$0.65 per call in USDC via x402, no API key: POST unpaid and the 402 quotes your model's exact price. Supports response_format json_object. GET /v1/models (free) lists every model with its endpoint and price.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"model":{"type":"string","description":"Model id, e.g. gpt-4o-mini. Free catalog: GET /v1/models (every model, endpoint and price)"},"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_tokens":{"type":"number","description":"Max output tokens (clamped to the model's cap)."}},"required":["model","messages"]}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.005000","max":"0.650000","amount":"0.005000","minAmount":"0.005000","maxAmount":"0.650000","note":"$0.005–$0.65 (depends on the model in the body)"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","costRangeUsd":{"min":"0.005000","max":"0.650000"},"costNote":"$0.005–$0.65 (depends on the model in the body)","outputShape":"id, object, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string"},"model":{"type":"string"},"choices":{"type":"array"},"usage":{"type":"object"}}},"example":{"id":"chatcmpl-9f2f28d90a3c4e0f8f1c2d3e","object":"chat.completion","model":"gpt-4o-mini","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":13,"completion_tokens":2,"total_tokens":15}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-4o-mini":{"post":{"operationId":"postOpenaiGpt4oMini","summary":"Call OpenAI's gpt-4o-mini, pay per call","tags":["openai"],"description":"Call OpenAI's gpt-4o-mini via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~24000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 1024, capped at 1024."},"temperature":{"type":"number","description":"Sampling temperature. Optional."},"top_p":{"type":"number","description":"Nucleus sampling. Optional."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-4o-mini","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-4-1-nano":{"post":{"operationId":"postOpenaiGpt41Nano","summary":"Call OpenAI's gpt-4.1-nano, pay per call","tags":["openai"],"description":"Call OpenAI's gpt-4.1-nano via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~24000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 1024, capped at 1024."},"temperature":{"type":"number","description":"Sampling temperature. Optional."},"top_p":{"type":"number","description":"Nucleus sampling. Optional."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-4.1-nano","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-5":{"post":{"operationId":"postOpenaiGpt55","summary":"Call OpenAI's gpt-5.5 via a single pay-per-call x402 endpoint","tags":["openai"],"description":"Call OpenAI's gpt-5.5 via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.65 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~96000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 8192, capped at 8192."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.650000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.650000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5.5","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-4":{"post":{"operationId":"postOpenaiGpt54","summary":"Call OpenAI's gpt-5.4 via a single pay-per-call x402 endpoint","tags":["openai"],"description":"Call OpenAI's gpt-5.4 via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.25 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~96000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 4096, capped at 4096."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.250000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.250000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5.4","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-4-mini":{"post":{"operationId":"postOpenaiGpt54Mini","summary":"Call OpenAI's gpt-5.4-mini, pay per call","tags":["openai"],"description":"Call OpenAI's gpt-5.4-mini via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.04 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~36000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 2048, capped at 2048."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.040000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.040000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5.4-mini","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-4-nano":{"post":{"operationId":"postOpenaiGpt54Nano","summary":"Call OpenAI's gpt-5.4-nano, pay per call","tags":["openai"],"description":"Call OpenAI's gpt-5.4-nano via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~24000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 1024, capped at 1024."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5.4-nano","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-1":{"post":{"operationId":"postOpenaiGpt51","summary":"Call OpenAI's gpt-5.1 via a single pay-per-call x402 endpoint","tags":["openai"],"description":"Call OpenAI's gpt-5.1 via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.15 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~96000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 4096, capped at 4096."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.150000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.150000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5.1","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-nano":{"post":{"operationId":"postOpenaiGpt5Nano","summary":"Call OpenAI's gpt-5-nano, pay per call","tags":["openai"],"description":"Call OpenAI's gpt-5-nano via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.005 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~24000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 1024, capped at 1024."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5-nano","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-2":{"post":{"operationId":"postOpenaiGpt52","summary":"Call OpenAI's gpt-5.2 via a single pay-per-call x402 endpoint","tags":["openai"],"description":"Call OpenAI's gpt-5.2 via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.20 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~96000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 4096, capped at 4096."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.200000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.200000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5.2","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-6-sol":{"post":{"operationId":"postOpenaiGpt56Sol","summary":"Call OpenAI's gpt-5.6-sol, pay per call","tags":["openai"],"description":"Call OpenAI's gpt-5.6-sol via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.65 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~96000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 8192, capped at 8192."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.650000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.650000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5.6-sol","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-6-terra":{"post":{"operationId":"postOpenaiGpt56Terra","summary":"Call OpenAI's gpt-5.6-terra, pay per call","tags":["openai"],"description":"Call OpenAI's gpt-5.6-terra via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.25 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~96000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 4096, capped at 4096."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.250000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.250000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5.6-terra","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/openai/gpt-5-6-luna":{"post":{"operationId":"postOpenaiGpt56Luna","summary":"Call OpenAI's gpt-5.6-luna, pay per call","tags":["openai"],"description":"Call OpenAI's gpt-5.6-luna via a single pay-per-call x402 endpoint — no OpenAI account or API key needed, pay $0.06 per request in USDC. Standard OpenAI chat.completions request/response shape, capped input and output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messages":{"type":"array","description":"OpenAI chat messages: [{role:'system'|'user'|'assistant', content:string}]. Input capped ~48000 chars total.","items":{"type":"object","properties":{"role":{"type":"string","description":"system, user, or assistant"},"content":{"type":"string","description":"Message text"}},"required":["role","content"]}},"max_completion_tokens":{"type":"number","description":"Max output tokens. Optional — defaults to 2048, capped at 2048."}},"required":["messages"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.060000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.060000","outputShape":"id, object, created, model, choices, usage"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"object":{"type":"string","description":"Always 'chat.completion'"},"created":{"type":"number","description":"Unix timestamp (seconds)"},"model":{"type":"string"},"choices":{"type":"array","description":"Assistant message + finish_reason."},"usage":{"type":"object","description":"prompt_tokens, completion_tokens, total_tokens"}}},"example":{"id":"chatcmpl-abc123","object":"chat.completion","created":1735689600,"model":"gpt-5.6-luna","choices":[{"index":0,"message":{"role":"assistant","content":"Hi!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13}}}}},"402":{"description":"Payment Required"}}}},"/ai-image/generate":{"post":{"operationId":"postAiImageGenerate","summary":"Generate agent-ready image assets","tags":["ai-image"],"description":"Generate agent-ready image assets (icons, logos, social graphics, thumbnails, banners) with gpt-image-1. Claude refines the prompt, screens content, adds alt text and a score. Returns image_url as a base64 PNG data URI. Flat $0.25; n=1; ratios 1:1/16:9/9:16.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","description":"What to create (3-2000 chars)."},"use_case":{"type":"string","description":"One of: app_icon, logo, banner, avatar, social_graphic, og_image, blog_thumbnail, product_mockup, illustration, web_image (default). Unknown values fall back to web_image with a warning."},"aspect_ratio":{"type":"string","description":"1:1, 16:9, or 9:16 (aliases like square/wide/tall accepted)."},"style":{"type":"string","description":"Optional art direction."},"brand_colors":{"type":"array","items":{"type":"string"},"description":"Optional palette."},"provider":{"type":"string","description":"Optional image backend override; unknown values 400."},"n":{"type":"number","description":"Image count — currently clamped to 1."}},"required":["prompt"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.250000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.250000","outputShape":"image_url, revised_prompt, alt_text, score, grade"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"image_url":{"type":"string"},"revised_prompt":{"type":"string"},"alt_text":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"}}},"example":{"image_url":"data:image/png;base64,...","revised_prompt":"A clean app icon...","alt_text":"App icon.","score":92,"grade":"A"}}}},"402":{"description":"Payment Required"}}}},"/classify":{"post":{"operationId":"postClassify","summary":"Classify text into your own categories","tags":["classify"],"description":"Classify text into your own categories — zero-shot: supply 2–20 labels and Claude Haiku returns the best-matching category with confidence and per-label scores. Route, tag, triage, and detect intent or topic with your own taxonomy in one call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The text to classify — a support ticket, email, message, document snippet, etc. Max 10000 words or 50KB."},"labels":{"type":"array","items":{"type":"string"},"description":"2-20 candidate category labels to classify the text into. The chosen label(s) are always drawn from this set."},"multi_label":{"type":"boolean","description":"If true, allow multiple matching labels and return a labels array. Defaults to false (single best label)."}},"required":["text","labels"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"mode, label, labels, confidence, scores, labels_provided, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","description":"single_label or multi_label"},"label":{"type":"string","description":"Best matching label (single-label mode)"},"labels":{"type":"array","items":{"type":"string"},"description":"Matching labels (multi-label mode)"},"confidence":{"type":"number","description":"Confidence for the chosen label (single-label mode)"},"scores":{"type":"object","description":"Per-label relevance scores (0-1) for every provided label"},"labels_provided":{"type":"array","items":{"type":"string"},"description":"Echo of the candidate labels supplied by the caller"},"score":{"type":"number","description":"Quality score 0-100"},"grade":{"type":"string","description":"Letter grade A-F"},"findings":{"type":"array","items":{"type":"string"},"description":"Informational findings (e.g. low_confidence)"}}},"example":{"mode":"single_label","label":"billing","confidence":0.91,"scores":{"billing":0.91,"technical":0.06,"general":0.03},"labels_provided":["billing","technical","general"],"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/content-moderate":{"post":{"operationId":"postContentModerate","summary":"Moderate text content using Claude Haiku","tags":["content-moderate"],"description":"Moderate text content using Claude Haiku — flags categories like harassment, hate, sexual content, violence, self-harm, and spam with per-category severity and an overall allow/flag/block recommendation, so agents can screen user-generated content before publishing or storing it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The text to moderate — a comment, message, post, review, or any user-generated content. Max 10000 words or 50KB."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"categories, flagged_categories, overall, reasoning, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"categories":{"type":"object","description":"Per-category verdicts (harassment, hate, sexual, violence, self_harm, spam), each with flagged (boolean) and severity (none/low/medium/high)"},"flagged_categories":{"type":"array","items":{"type":"string"},"description":"Category names where flagged=true"},"overall":{"type":"string","description":"Overall recommendation: allow, flag, or block"},"reasoning":{"type":"string","description":"One-sentence rationale for the verdict"},"score":{"type":"number","description":"Content cleanliness score 0-100 (allow=100, flag=70, block=20)"},"grade":{"type":"string","description":"Letter grade A-F derived from the score"},"findings":{"type":"array","items":{"type":"object"},"description":"One entry per flagged category with its severity"}}},"example":{"categories":{"harassment":{"flagged":true,"severity":"high"},"hate":{"flagged":false,"severity":"none"},"sexual":{"flagged":false,"severity":"none"},"violence":{"flagged":true,"severity":"medium"},"self_harm":{"flagged":false,"severity":"none"},"spam":{"flagged":false,"severity":"none"}},"flagged_categories":["harassment","violence"],"overall":"block","reasoning":"Contains a direct threat of physical harm targeting the recipient.","score":20,"grade":"F","findings":[{"category":"harassment","severity":"high"},{"category":"violence","severity":"medium"}]}}}},"402":{"description":"Payment Required"}}}},"/entity-extract":{"post":{"operationId":"postEntityExtract","summary":"Extract named entities from text using Claude Haiku","tags":["entity-extract"],"description":"Extract named entities from text using Claude Haiku — people, organizations, locations, dates, emails, URLs, money amounts, and products — returned as structured typed arrays so agents can pull structured signals out of unstructured text in one call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The text to extract named entities from — an article, email, document, or any unstructured text. Max 10000 words or 50KB."},"types":{"type":"array","items":{"type":"string"},"description":"Optional subset of entity types to extract: person, organization, location, date, email, url, money, product, phone. Defaults to all types."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"entities, total_entities, types_extracted, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"entities":{"type":"object","description":"Per-type arrays of unique entity strings as they appear in the text. Only requested types appear when the types param is supplied."},"total_entities":{"type":"number","description":"Total count across all entity arrays"},"types_extracted":{"type":"array","items":{"type":"string"},"description":"The entity types included in this response"},"score":{"type":"number","description":"Quality score 0-100"},"grade":{"type":"string","description":"Letter grade A-F"},"findings":{"type":"array","items":{"type":"object"},"description":"Informational findings (e.g. extraction errors)"}}},"example":{"entities":{"person":["Jane Doe","John Smith"],"organization":["Acme Corp"],"location":["San Francisco"],"date":["2024-03-15"],"email":["jane@acme.com"],"url":["https://acme.com"],"money":["$1.2M"],"product":["WidgetPro"],"phone":[]},"total_entities":9,"types_extracted":["person","organization","location","date","email","url","money","product","phone"],"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/extract/address":{"post":{"operationId":"postExtractAddress","summary":"Parse a freeform address into normalized parts","tags":["extract"],"description":"Parse and normalize a freeform address string using Claude Haiku — splits it into street, city, state/region, postal code, and country, plus a normalized single-line form, so agents can clean and standardize messy address data for shipping, CRM, and verification workflows.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"The freeform address string to parse and normalize. Max 10000 words or 50KB."}},"required":["address"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"address, components_found, is_complete, cached, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"object","description":"Parsed components: street, city, state_region, postal_code, country, country_code (ISO 3166-1 alpha-2), and a normalized single-line form. Missing components are null."},"components_found":{"type":"number","description":"Count of non-null core components (street, city, state_region, postal_code, country)."},"is_complete":{"type":"boolean","description":"True when street, city, and country are all present."},"cached":{"type":"boolean","description":"True if served from the in-memory cache."},"score":{"type":"number","description":"Quality score 0-100"},"grade":{"type":"string","description":"Letter grade A-F"},"findings":{"type":"array","items":{"type":"string"},"description":"Informational findings (e.g. incomplete_address, no_components)."}}},"example":{"address":{"street":"123 Main St","city":"San Francisco","state_region":"CA","postal_code":"94105","country":"United States","country_code":"US","normalized":"123 Main St, San Francisco, CA 94105, United States"},"components_found":5,"is_complete":true,"cached":false,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/extract/contact":{"post":{"operationId":"postExtractContact","summary":"Extract contact details from text or a signature","tags":["extract"],"description":"Extract structured contact details from text, an email signature, or webpage text using Claude Haiku — returns name, title, company, email, phone, and address as clean JSON so agents can turn unstructured contact blocks into CRM-ready records in one call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The text to extract contact details from — free text, an email signature, or webpage text. Max 10000 words or 50KB."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"contact, fields_found, cached, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"contact":{"type":"object","description":"Parsed contact fields: name, title, company, email, phone, address. Missing fields are null."},"fields_found":{"type":"number","description":"Count of non-null contact fields."},"cached":{"type":"boolean","description":"True if served from the in-memory cache."},"score":{"type":"number","description":"Quality score 0-100"},"grade":{"type":"string","description":"Letter grade A-F"},"findings":{"type":"array","items":{"type":"string"},"description":"Informational findings (e.g. no_fields_found)."}}},"example":{"contact":{"name":"Jane Doe","title":"VP of Engineering","company":"Acme Corp","email":"jane@acme.com","phone":"+1 555 867 5309","address":"123 Main St, San Francisco, CA 94105"},"fields_found":6,"cached":false,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/extract/invoice":{"post":{"operationId":"postExtractInvoice","summary":"Extract structured data from invoice or receipt text","tags":["extract"],"description":"Extract structured data from invoice or receipt text — or directly from an invoice URL (PDF, HTML, or plain text, fetched and parsed server-side) — using Claude Haiku: returns vendor, invoice number, dates, line items, subtotal, tax, total, and currency as clean JSON for accounts-payable, expense processing, and bookkeeping automation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The invoice or receipt content ITSELF (email body, OCR dump, pasted PDF text) — not an instruction or question about an invoice. Have only a link? Pass url instead. Text with no extractable invoice data returns an uncharged 400 (NO_INVOICE_CONTENT). Max 10000 words or 50KB."},"url":{"type":"string","description":"Publicly reachable invoice URL — PDF, HTML, or plain text; fetched and parsed server-side (e.g. https://vendor.example/invoice-42.pdf). Provide exactly one of text or url."}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"invoice, line_item_count, totals_reconcile, cached, score, grade, findings, source"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"invoice":{"type":"object","description":"Parsed invoice fields: vendor, invoice_number, invoice_date, due_date, line_items (array of {description, quantity, unit_price, amount}), subtotal, tax, total, currency. Missing fields are null."},"line_item_count":{"type":"number","description":"Number of line items extracted."},"totals_reconcile":{"type":["boolean","null"],"description":"True if sum(line_items.amount) + tax ≈ total (within $0.02). False if they do not reconcile. Null if total or subtotal is missing."},"cached":{"type":"boolean","description":"True if served from the in-memory cache."},"score":{"type":"number","description":"Quality score 0-100"},"grade":{"type":"string","description":"Letter grade A-F"},"findings":{"type":"array","items":{"type":"string"},"description":"Informational findings (e.g. no_total_found, totals_mismatch)."},"source":{"type":"object","description":"Where the invoice content came from. type is \"text\" or \"url\"; url and content_type (pdf | html | text) are null in text mode.","properties":{"type":{"type":"string"},"url":{"type":["string","null"]},"content_type":{"type":["string","null"]}}}}},"example":{"invoice":{"vendor":"Acme Supplies Inc","invoice_number":"INV-2024-0142","invoice_date":"2024-03-01","due_date":"2024-03-31","line_items":[{"description":"Widget A","quantity":10,"unit_price":5,"amount":50},{"description":"Shipping","quantity":1,"unit_price":12,"amount":12}],"subtotal":62,"tax":5.58,"total":67.58,"currency":"USD"},"line_item_count":2,"totals_reconcile":true,"cached":false,"score":100,"grade":"A","findings":[],"source":{"type":"text","url":null,"content_type":null}}}}},"402":{"description":"Payment Required"}}}},"/pdf/parse":{"post":{"operationId":"postPdfParse","summary":"Parse a PDF to text and Markdown","tags":["pdf"],"description":"Parse a PDF to text and Markdown: send a PDF url or base64 file, get clean Markdown with paragraphs rebuilt from the text layer, per-page character offsets for citing pages, metadata (title, author, dates, page count) and the page numbers that are scanned images with no text layer. Up to 50 pages per call. Text layer only, no OCR: an image-only PDF returns an uncharged 422.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Public URL of the PDF (up to 10 MB)"},"file_base64":{"type":"string","description":"The PDF as base64 or a data: URL (up to ~700 KB). Send url OR file_base64."},"pages":{"type":"string","description":"Pages to parse, 1-based, e.g. \"1-3,7\" (default: the first 50)"},"max_chars":{"type":"number","description":"Cap on the markdown length (default 100000)"}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"source, page_count, pages_parsed, metadata, markdown, pages, word_count, char_count, scanned_pages, truncated, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"object"},"page_count":{"type":"number"},"pages_parsed":{"type":"number"},"metadata":{"type":"object"},"markdown":{"type":"string","description":"All parsed pages, each after a <!-- page N --> marker"},"pages":{"type":"array","description":"Per page: page, word_count, has_text, char_start, char_end (offsets into markdown)"},"word_count":{"type":"number"},"char_count":{"type":"number"},"scanned_pages":{"type":"array","items":{"type":"number"}},"truncated":{"type":"boolean"},"findings":{"type":"array","items":{"type":"string"}}}},"example":{"source":{"type":"url","url":"https://netintel.dev/samples/pdf-parse-sample.pdf","final_url":"https://netintel.dev/samples/pdf-parse-sample.pdf","bytes":2236},"page_count":3,"pages_parsed":3,"metadata":{"title":"Quarterly Network Report (sample)","author":"NetIntel","created":"2026-10-10T00:00:00Z","pdf_version":"1.4","has_form":false},"markdown":"<!-- page 1 -->\n\n## Quarterly Network Report\n\nThis sample shows what POST /pdf/parse returns: paragraphs rebuilt from the text layer, ...","pages":[{"page":1,"word_count":76,"has_text":true,"char_start":0,"char_end":507},{"page":2,"word_count":0,"has_text":false,"char_start":509,"char_end":581},{"page":3,"word_count":19,"has_text":true,"char_start":583,"char_end":730}],"word_count":95,"char_count":730,"scanned_pages":[2],"truncated":false,"findings":["scanned_pages_present"]}}}},"402":{"description":"Payment Required"}}}},"/extract/resume":{"post":{"operationId":"postExtractResume","summary":"Extract structured data from resume/CV text using Claude Haiku","tags":["extract"],"description":"Extract structured data from resume/CV text using Claude Haiku — returns name, contact info, skills, work experience, and education as clean JSON arrays so agents can automate applicant screening, candidate databases, and recruiting workflows from raw resume text.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The resume or CV text to extract structured data from. Max 10000 words or 50KB."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"resume, skills_count, experience_count, education_count, cached, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"resume":{"type":"object","description":"Parsed resume fields: name, contact ({email, phone, location, links}), summary, skills (array), experience (array of {title, company, start, end, description}), education (array of {degree, institution, year}). Missing scalar fields are null; arrays are empty when nothing is found."},"skills_count":{"type":"number","description":"Number of skills extracted."},"experience_count":{"type":"number","description":"Number of work-experience entries extracted."},"education_count":{"type":"number","description":"Number of education entries extracted."},"cached":{"type":"boolean","description":"True if served from the in-memory cache."},"score":{"type":"number","description":"Quality score 0-100"},"grade":{"type":"string","description":"Letter grade A-F"},"findings":{"type":"array","items":{"type":"string"},"description":"Informational findings (e.g. no_experience, no_skills, no_name)."}}},"example":{"resume":{"name":"Jane Doe","contact":{"email":"jane@example.com","phone":"+1 555 867 5309","location":"San Francisco, CA","links":["https://linkedin.com/in/janedoe"]},"summary":"Senior engineer with 10 years experience...","skills":["Python","TypeScript","Kubernetes"],"experience":[{"title":"Staff Engineer","company":"Acme Corp","start":"2020","end":"present","description":"Led platform team"}],"education":[{"degree":"BS Computer Science","institution":"UC Berkeley","year":"2014"}]},"skills_count":3,"experience_count":1,"education_count":1,"cached":false,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/extract/table":{"post":{"operationId":"postExtractTable","summary":"Extract tabular data from messy text or HTML using Claude Haiku","tags":["extract"],"description":"Extract tabular data from messy text or HTML using Claude Haiku — detects columns and rows in unstructured content and returns clean structured JSON (columns + rows) so agents can turn pasted tables, HTML tables, and delimited text into usable data in one call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The messy text or HTML containing tabular data to extract. Max 10000 words or 50KB. Aliases also accepted: content, html, csv, table, markdown, data."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"table, column_count, cached, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"table":{"type":"object","description":"Parsed table: columns (array of column names), rows (array of objects keyed by column name), and row_count (number of rows). Empty columns/rows with row_count 0 when no tabular structure is detected."},"column_count":{"type":"number","description":"Number of columns detected."},"cached":{"type":"boolean","description":"True if served from the in-memory cache."},"score":{"type":"number","description":"Quality score 0-100"},"grade":{"type":"string","description":"Letter grade A-F"},"findings":{"type":"array","items":{"type":"string"},"description":"Informational findings (e.g. no_table_found, count_mismatch)."}}},"example":{"table":{"columns":["product","price","qty"],"rows":[{"product":"Widget A","price":"5.00","qty":"10"},{"product":"Widget B","price":"7.50","qty":"4"}],"row_count":2},"column_count":3,"cached":false,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/markdown/clean":{"post":{"operationId":"postMarkdownClean","summary":"Convert messy HTML or text into clean Markdown","tags":["markdown"],"description":"Convert messy HTML or text into clean, well-structured Markdown using Claude Haiku — strips boilerplate, fixes heading hierarchy, normalizes lists and links, and returns readable Markdown so agents can feed clean docs into downstream pipelines, knowledge bases, or LLM context.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The messy HTML or text to convert into clean Markdown. Max 10000 words or 50KB. Aliases also accepted: html, content, markdown, input."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"markdown, input_chars, output_chars, reduction_ratio, cached, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"markdown":{"type":"string","description":"The cleaned, well-structured GitHub-flavored Markdown."},"input_chars":{"type":"number","description":"Character count of the input."},"output_chars":{"type":"number","description":"Character count of the cleaned markdown."},"reduction_ratio":{"type":"number","description":"1 - (output_chars / input_chars), rounded to 2dp — how much boilerplate was stripped (informational)."},"cached":{"type":"boolean","description":"True if served from the in-memory cache."},"score":{"type":"number","description":"Quality score 0-100"},"grade":{"type":"string","description":"Letter grade A-F"},"findings":{"type":"array","items":{"type":"string"},"description":"Informational findings (e.g. empty_output)."}}},"example":{"markdown":"# Welcome\n\nHello [world](https://example.com).\n","input_chars":108,"output_chars":39,"reduction_ratio":0.64,"cached":false,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/normalize/json":{"post":{"operationId":"postNormalizeJson","summary":"Conform messy JSON to a target schema","tags":["normalize"],"description":"Conform messy or inconsistent JSON to a target schema using Claude Haiku — renames keys, coerces types (string→number, \"true\"→boolean, etc.), and fills missing fields with null, returning JSON that matches the exact shape the caller specified so agents can normalize data from varied sources into one consistent structure.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":["string","object"],"description":"The messy JSON to normalize — a JSON string or an already-parsed object. Max 10000 words or 50KB."},"schema":{"type":"object","description":"A map of field name → type token. Supported tokens: string, number, boolean, date, string[], number[], object. Max 50 fields. Output keys are forced to exactly these field names."}},"required":["data","schema"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"normalized, fields_in_schema, fields_populated, fields_nulled, schema_match, cached, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"normalized":{"type":"object","description":"The input conformed to the target schema: keys are exactly the schema field names, values coerced to the declared types, missing fields null."},"fields_in_schema":{"type":"number","description":"Number of fields in the target schema."},"fields_populated":{"type":"number","description":"Number of non-null fields in the output."},"fields_nulled":{"type":"number","description":"Number of null fields in the output."},"schema_match":{"type":"boolean","description":"True when the model's output keys were exactly the schema field names. False when code had to force-conform (strip extra / add missing) keys."},"cached":{"type":"boolean","description":"True if served from the in-memory cache."},"score":{"type":"number","description":"Quality score 0-100."},"grade":{"type":"string","description":"Letter grade A-F."},"findings":{"type":"array","items":{"type":"string"},"description":"Informational findings (e.g. schema_mismatch_corrected, mostly_nulled)."}}},"example":{"normalized":{"full_name":"Jane Doe","age":42,"is_active":true,"tags":["vip","beta"],"signup_date":"2024-03-01"},"fields_in_schema":5,"fields_populated":5,"fields_nulled":0,"schema_match":true,"cached":false,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/text-to-json":{"post":{"operationId":"postTextToJson","summary":"Turn text into JSON matching your schema","tags":["text-to-json"],"description":"Turn unstructured text into structured JSON matching a caller-supplied schema using Claude Haiku — the agent declares the fields and types it wants, and gets back populated JSON with values pulled from the text and coerced to the right types, so agents can structure any prose into the exact shape their pipeline expects.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The unstructured prose to extract structured data from. Max 10000 words or 50KB."},"schema":{"type":"object","description":"A map of field name → type token. Supported tokens: string, number, boolean, date, string[], number[], object. Max 50 fields. Each field is extracted from the text as the declared type; output keys are forced to exactly these field names."}},"required":["text","schema"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"result, fields_in_schema, fields_populated, fields_nulled, schema_match, cached, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"result":{"type":"object","description":"The extracted data: keys are exactly the schema field names, values pulled from the text and cast to the declared types, unfindable fields null."},"fields_in_schema":{"type":"number","description":"Number of fields in the schema."},"fields_populated":{"type":"number","description":"Number of non-null fields in the output."},"fields_nulled":{"type":"number","description":"Number of null fields in the output."},"schema_match":{"type":"boolean","description":"True when the model's output keys were exactly the schema field names. False when code had to force-conform (strip extra / add missing) keys."},"cached":{"type":"boolean","description":"True if served from the in-memory cache."},"score":{"type":"number","description":"Quality score 0-100."},"grade":{"type":"string","description":"Letter grade A-F."},"findings":{"type":"array","items":{"type":"string"},"description":"Informational findings (e.g. schema_mismatch_corrected, mostly_nulled)."}}},"example":{"result":{"company":"Acme Corp","founded_year":2010,"employees":250,"is_public":false,"locations":["San Francisco","London"]},"fields_in_schema":5,"fields_populated":5,"fields_nulled":0,"schema_match":true,"cached":false,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/sentiment/analyze":{"post":{"operationId":"postSentimentAnalyze","summary":"Score text sentiment from -1 to +1 with polarity","tags":["sentiment"],"description":"Sentiment analysis API — analyze sentiment of text and get a text sentiment score in one call: classifies positive / negative / neutral / mixed polarity with a -1 to +1 sentiment score, plus emotion detection in text (joy, anger, sadness, fear, surprise, disgust, trust, anticipation). Aspect-based sentiment and opinion mining for customer feedback analysis — analyze reviews, support tickets, social posts, chat messages. Via Claude Haiku.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The text to analyze sentiment for — a review, message, feedback, or any natural-language text. Max 10000 words or 50KB."},"aspects":{"type":"array","items":{"type":"string"},"description":"Optional list of up to 10 aspects for aspect-based sentiment (e.g. [\"price\", \"service\", \"quality\"]). When provided, sentiment toward each named aspect is also returned."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.002000","outputShape":"polarity, score, confidence, emotions, aspects, service_score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"polarity":{"type":"string","description":"Overall sentiment: positive, negative, neutral, or mixed"},"score":{"type":"number","description":"Sentiment polarity score from -1.0 (very negative) to 1.0 (very positive)"},"confidence":{"type":"number","description":"Model confidence 0.0-1.0"},"emotions":{"type":"array","items":{"type":"string"},"description":"Detected emotions drawn from joy, anger, sadness, fear, surprise, disgust, trust, anticipation"},"aspects":{"type":"object","description":"Per-aspect sentiment (present only when the aspects param was supplied); each aspect maps to { polarity, score }"},"service_score":{"type":"number","description":"Endpoint health score 0-100 (100 on success) — distinct from the sentiment score"},"grade":{"type":"string","description":"Letter grade A-F derived from service_score"},"findings":{"type":"array","description":"Reserved — currently always [] on success (analysis errors surface as 502s, never findings)"}}},"example":{"polarity":"mixed","score":0.2,"confidence":0.86,"emotions":["joy","trust"],"aspects":{"food":{"polarity":"positive","score":0.9},"service":{"polarity":"positive","score":0.8},"price":{"polarity":"negative","score":-0.4}},"service_score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/text-summarize":{"post":{"operationId":"postTextSummarize","summary":"Summarize text, articles or documents","tags":["text-summarize"],"description":"Summarize text, articles or documents — condense raw text, Markdown, or a URL into a TL;DR plus key bullet points. Accepts raw text or a URL (fetched and extracted), enforces an input cap, and returns a clean structured summary so agents can compress documents and articles in one call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Raw text to summarize. Provide exactly one of text or url. Max 10000 words or 50KB."},"url":{"type":"string","description":"URL to fetch, extract readable text from, and summarize. Provide exactly one of text or url. The page must yield ≥50 words of extractable paragraph text (fetch capped at 500KB/10s) — thin or JS-rendered pages 400 without charging."},"max_points":{"type":"number","description":"Number of key bullet points to return (default 5, max 10)."}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"source, summary, key_points, original_word_count, summary_word_count, compression_ratio, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string","description":"text or url"},"summary":{"type":"string","description":"Concise 2-4 sentence summary"},"key_points":{"type":"array","items":{"type":"string"},"description":"Key bullet points extracted from the content"},"original_word_count":{"type":"number","description":"Word count of the input content"},"summary_word_count":{"type":"number","description":"Word count of the generated summary"},"compression_ratio":{"type":"number","description":"summary_word_count / original_word_count, rounded to 2 decimals"},"score":{"type":"number","description":"Quality score 0-100"},"grade":{"type":"string","description":"Letter grade A-F"},"findings":{"type":"array","description":"Reserved — currently always [] on success"}}},"example":{"source":"text","summary":"The James Webb Space Telescope captured its deepest infrared image yet, revealing thousands of galaxies. Known as Webb's First Deep Field, it shows galaxy cluster SMACS 0723 acting as a gravitational lens to magnify far more distant galaxies. The image will help astronomers study galaxy formation in the early universe.","key_points":["Webb captured its deepest infrared image to date","The image shows galaxy cluster SMACS 0723 as it appeared 4.6 billion years ago","The cluster's mass acts as a gravitational lens magnifying distant galaxies","It will aid the study of early-universe galaxy formation"],"original_word_count":78,"summary_word_count":52,"compression_ratio":0.67,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/text/chunk":{"post":{"operationId":"postTextChunk","summary":"Split text into overlapping chunks for RAG ingestion","tags":["text"],"description":"Split text into overlapping chunks for RAG ingestion — by characters or words, with configurable chunk size and overlap. Deterministic (same input → same chunks), returns each chunk with its index and start/end offsets. No API key, no LLM. Pairs with /v1/embeddings for a full chunk→embed pipeline.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Text to split — 1 to 200000 characters. Aliases: content, input, body."},"chunk_size":{"type":"number","description":"Window size in chars or words. Default 1000; clamped to 50–20000 chars or 5–20000 words. Aliases: size, chunkSize."},"overlap":{"type":"number","description":"Units shared by consecutive chunks. Default 10% of chunk_size (max 100); clamped to 0..chunk_size-1. Aliases: chunk_overlap, chunkOverlap."},"unit":{"type":"string","description":"\"chars\" (default) or \"words\". Aliases: by, mode."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.001000","outputShape":"unit, chunk_size, overlap, count, source_length, chunks, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"unit":{"type":"string","description":"chars or words"},"chunk_size":{"type":"number","description":"Effective window size after clamping"},"overlap":{"type":"number","description":"Effective overlap after clamping"},"count":{"type":"number","description":"Number of chunks (max 2000)"},"source_length":{"type":"number","description":"Length of the input text in characters"},"chunks":{"type":"array","description":"Sliding-window chunks in order. start/end are UTF-16 character offsets into the source (text.slice(start, end) reproduces a chars-mode chunk; words-mode chunks are re-joined with single spaces). Surrogate pairs are never split.","items":{"type":"object","properties":{"index":{"type":"number"},"text":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"},"length":{"type":"number","description":"Characters in this chunk's text"}}}},"findings":{"type":"array","description":"Parameter adjustments applied (clamped chunk_size/overlap, unknown unit); [] when none","items":{"type":"object","properties":{"rule":{"type":"string"},"detail":{"type":"string"}}}}}},"example":{"unit":"chars","chunk_size":60,"overlap":15,"count":3,"source_length":115,"chunks":[{"index":0,"text":"NetIntel is a pay-per-call API for AI agents. It offers over","start":0,"end":60,"length":60},{"index":1,"text":" It offers over one hundred endpoints. Agents pay per reques","start":45,"end":105,"length":60},{"index":2,"text":" pay per request in USDC.","start":90,"end":115,"length":25}],"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/text/stats":{"get":{"operationId":"getTextStats","summary":"Count words, sentences and reading time in text","tags":["text"],"description":"Instant text statistics — characters (with/without spaces), words, unique words, sentences, paragraphs, average word/sentence length, longest word, reading and speaking time. Deterministic, no LLM, no API key. For agents sizing content before summarizing, chunking, embedding, or posting. Pass text as ?text= (GET) or a JSON body (POST).","parameters":[{"name":"text","in":"query","required":true,"description":"Text to analyze — 1 to 200000 characters. Aliases: content, input, body.","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.001000","outputShape":"characters, characters_no_spaces, words, unique_words, sentences, paragraphs, avg_word_length, avg_sentence_length, longest_word, reading_time_seconds, speaking_time_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"characters":{"type":"number","description":"Unicode code points, including whitespace"},"characters_no_spaces":{"type":"number","description":"Code points excluding all Unicode whitespace"},"words":{"type":"number","description":"Whitespace-delimited tokens"},"unique_words":{"type":"number","description":"Case-insensitive distinct words after stripping leading/trailing punctuation"},"sentences":{"type":"number","description":"Segments ended by . ! ? … followed by whitespace/end (runs collapse; a trailing segment without terminator counts); min 1"},"paragraphs":{"type":"number","description":"Blocks separated by one or more blank lines; min 1"},"avg_word_length":{"type":"number","description":"characters_no_spaces / words, 2 dp"},"avg_sentence_length":{"type":"number","description":"words / sentences, 2 dp"},"longest_word":{"type":["string","null"],"description":"Longest punctuation-stripped word, first seen on ties; null when nothing survives stripping"},"reading_time_seconds":{"type":"number","description":"ceil(words / 200 wpm × 60)"},"speaking_time_seconds":{"type":"number","description":"ceil(words / 130 wpm × 60)"},"findings":{"type":"array","description":"Reserved — currently always [] on success"}}},"example":{"characters":83,"characters_no_spaces":70,"words":14,"unique_words":14,"sentences":2,"paragraphs":1,"avg_word_length":5,"avg_sentence_length":7,"longest_word":"pay-per-call","reading_time_seconds":5,"speaking_time_seconds":7,"findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postTextStats","summary":"Count words, sentences and reading time in text","tags":["text"],"description":"Instant text statistics — characters (with/without spaces), words, unique words, sentences, paragraphs, average word/sentence length, longest word, reading and speaking time. Deterministic, no LLM, no API key. For agents sizing content before summarizing, chunking, embedding, or posting. Pass text as ?text= (GET) or a JSON body (POST).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Text to analyze — 1 to 200000 characters. Aliases: content, input, body."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.001000","outputShape":"characters, characters_no_spaces, words, unique_words, sentences, paragraphs, avg_word_length, avg_sentence_length, longest_word, reading_time_seconds, speaking_time_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"characters":{"type":"number","description":"Unicode code points, including whitespace"},"characters_no_spaces":{"type":"number","description":"Code points excluding all Unicode whitespace"},"words":{"type":"number","description":"Whitespace-delimited tokens"},"unique_words":{"type":"number","description":"Case-insensitive distinct words after stripping leading/trailing punctuation"},"sentences":{"type":"number","description":"Segments ended by . ! ? … followed by whitespace/end (runs collapse; a trailing segment without terminator counts); min 1"},"paragraphs":{"type":"number","description":"Blocks separated by one or more blank lines; min 1"},"avg_word_length":{"type":"number","description":"characters_no_spaces / words, 2 dp"},"avg_sentence_length":{"type":"number","description":"words / sentences, 2 dp"},"longest_word":{"type":["string","null"],"description":"Longest punctuation-stripped word, first seen on ties; null when nothing survives stripping"},"reading_time_seconds":{"type":"number","description":"ceil(words / 200 wpm × 60)"},"speaking_time_seconds":{"type":"number","description":"ceil(words / 130 wpm × 60)"},"findings":{"type":"array","description":"Reserved — currently always [] on success"}}},"example":{"characters":83,"characters_no_spaces":70,"words":14,"unique_words":14,"sentences":2,"paragraphs":1,"avg_word_length":5,"avg_sentence_length":7,"longest_word":"pay-per-call","reading_time_seconds":5,"speaking_time_seconds":7,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/translate/long":{"post":{"operationId":"postTranslateLong","summary":"Translate up to 2000 words between languages using Claude Haiku","tags":["translate"],"description":"Translate up to 2000 words between languages using Claude Haiku — auto-detects source, supports 30+ target languages, preserves formatting, for larger documents and articles. For short snippets use the cheaper /translate/short.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The text to translate. Max 2000 words (and 50KB). For shorter snippets use the cheaper /translate/short. Aliases also accepted: q, input, content, message."},"target":{"type":"string","description":"Target language as an ISO 639-1 code (e.g. \"de\") or English name (e.g. \"German\"). 30+ languages mapped directly; other values (endonyms, qualified names like \"Brazilian Portuguese\") are interpreted by the model with a targetHint finding. Required. Aliases also accepted: target_lang, target_language, to, lang, targetLanguage. (The response returns this as target_language.)"},"source":{"type":"string","description":"Optional source language (ISO 639-1 code or English name). When omitted, the source language is auto-detected. Aliases also accepted: source_language, from."}},"required":["text","target"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"translation, source_language, target_language, source_detected, word_count, tier, service_score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"translation":{"type":"string","description":"The translated text, formatting preserved"},"source_language":{"type":"string","description":"ISO 639-1 code of the source language (detected or supplied)"},"target_language":{"type":"string","description":"ISO 639-1 code of the target language"},"source_detected":{"type":"boolean","description":"true when the source language was auto-detected; false when supplied by the caller"},"word_count":{"type":"number","description":"Word count of the input text"},"tier":{"type":"string","description":"Pricing tier — always \"long\" for this endpoint"},"service_score":{"type":"number","description":"Endpoint health score 0-100 (100 on success)"},"grade":{"type":"string","description":"Letter grade A-F derived from service_score"},"findings":{"type":"array","description":"Plain-string hints — e.g. a targetHint string when the target language was model-interpreted"}}},"example":{"translation":"Das James-Webb-Weltraumteleskop hat sein bisher tiefstes Infrarotbild des Universums aufgenommen und Tausende von Galaxien in einem winzigen Himmelsausschnitt enthüllt.","source_language":"en","target_language":"de","source_detected":true,"word_count":26,"tier":"long","service_score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/translate/structured":{"post":{"operationId":"postTranslateStructured","summary":"Translate structured content","tags":["translate"],"description":"Translate structured content — JSON, HTML, Markdown, templates, UI strings — without breaking structure. Preserves keys, tags, markdown, URLs, emails, variables, placeholders, code blocks, and brand names, honors a caller glossary, and validates that no placeholder was dropped, so agents can localize app content safely.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"description":"The structured content to translate: a JSON object/array, or a string of HTML, Markdown, or template text. Max 32KB / 500 strings.","oneOf":[{"type":"object"},{"type":"array"},{"type":"string"}]},"content_type":{"type":"string","description":"One of \"json\", \"html\", \"markdown\", \"template\", \"text\". Auto-detected when omitted; a non-string content is always treated as json."},"target":{"type":"string","description":"Target language — ISO 639-1 code (\"fr\") or English name (\"French\"). Aliases also accepted: target_lang, target_language, to, lang."},"source":{"type":"string","description":"Source language. Auto-detected when omitted."},"glossary":{"type":"object","description":"Enforced term mappings: {\"dashboard\":\"tableau de bord\"}. Compliance is reported per term; a missed term costs 10 points."},"protected_values":{"type":"array","description":"Strings that must pass through byte-for-byte — brand names, IDs, SKUs: [\"Acme\",\"SKU-1234\"]. Dropping one fails the call."},"formality":{"type":"string","description":"\"formal\", \"informal\", or \"neutral\" (default)."},"tone":{"type":"string","description":"Optional tone guidance, e.g. \"friendly and concise\"."},"locale":{"type":"string","description":"Target locale for regional variants, e.g. \"fr-CA\"."}},"required":["content","target"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"translated, detected_language, target_language, content_type, placeholder_validation, structure_validation, glossary_compliance, warnings, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"translated":{"type":"object","description":"The translated document, in the same shape and format as the input"},"detected_language":{"type":"string","description":"ISO 639-1 code of the source language"},"target_language":{"type":"string","description":"ISO 639-1 code translated into"},"content_type":{"type":"string","description":"The content type used (given or auto-detected)"},"placeholder_validation":{"type":"object","description":"Proof that every placeholder, tag, URL, email, code span, and protected value survived. A drop is a 502, never a 200."},"structure_validation":{"type":"object","description":"Proof the document still parses: JSON keys intact, HTML tags balanced, markdown syntax preserved"},"glossary_compliance":{"type":"object","description":"Which glossary terms were applied and which were missed"},"warnings":{"type":"array","description":"Non-fatal notes, e.g. a missed glossary term"},"score":{"type":"number","description":"0-100; 100 on a clean, structure-valid translation"},"grade":{"type":"string","description":"Letter grade A-F derived from score"},"findings":{"type":"array","description":"Scored deductions, e.g. glossary_missed"}}},"example":{"translated":{"greeting":"Bonjour {{name}}","cta":"Cliquez ici pour ouvrir le tableau de bord"},"detected_language":"en","target_language":"fr","content_type":"json","placeholder_validation":{"passed":true,"expected":["{{name}}"],"found":["{{name}}"],"missing":[]},"structure_validation":{"passed":true,"type":"json"},"glossary_compliance":{"applied":["dashboard→tableau de bord"],"missed":[]},"warnings":[],"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/translate/batch":{"post":{"operationId":"postTranslateBatch","summary":"Translate many independent strings in one request","tags":["translate"],"description":"Translate many independent strings in one request — each with a caller ID preserved in the response — with per-item status, glossary and tone support, and partial success so one bad item never fails the batch, so agents can localize whole string tables in a single call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","description":"The strings to translate: [{\"id\":\"greeting\",\"text\":\"Hello {{name}}\",\"context\":\"button label\"}]. ids and order are preserved in the response. 1-200 items, 64KB total."},"target":{"type":"string","description":"Target language — ISO 639-1 code (\"fr\") or English name (\"French\"). Aliases also accepted: target_lang, target_language, to, lang."},"source":{"type":"string","description":"Source language, applied to every item. Auto-detected per item when omitted."},"glossary":{"type":"object","description":"Enforced term mappings applied to all items: {\"dashboard\":\"tableau de bord\"}."},"protected_values":{"type":"array","description":"Strings that must survive byte-for-byte in every item — brand names, IDs: [\"Acme\"]."},"tone":{"type":"string","description":"Optional tone guidance, e.g. \"friendly and concise\"."},"formality":{"type":"string","description":"\"formal\", \"informal\", or \"neutral\" (default)."}},"required":["items","target"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"target_language, item_count, succeeded, failed, items, billed_items, pricing, usage, warnings, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"target_language":{"type":"string","description":"ISO 639-1 code translated into"},"item_count":{"type":"number","description":"Items submitted"},"succeeded":{"type":"number","description":"Items translated and structurally verified"},"failed":{"type":"number","description":"Items that failed — the batch still returns 200"},"items":{"type":"array","description":"One entry per input item, in input order, each carrying your id: {id, status (\"ok\"|\"failed\"), translated, detected_language, confidence, warnings, reason}. A failed item has translated=null and a reason (structure_broken, unparseable, truncated, llm_unavailable, timeout)."},"billed_items":{"type":"number","description":"Item count used for pricing (base covers 25)"},"pricing":{"type":"object","description":"Base price, included items, and per-item overage beyond the included count"},"usage":{"type":"object","description":"Model, model_calls, input_tokens, output_tokens"},"warnings":{"type":"array","description":"Batch-level notes, e.g. that some items failed"},"score":{"type":"number","description":"0-100; 100 on a successful run, even with some items failed"},"grade":{"type":"string","description":"Letter grade A-F derived from score"},"findings":{"type":"array","description":"Scored deductions, e.g. all_items_failed"}}},"example":{"target_language":"fr","item_count":2,"succeeded":2,"failed":0,"items":[{"id":"greeting","status":"ok","translated":"Bonjour {{name}}","detected_language":"en","confidence":0.98,"warnings":[]},{"id":"cta","status":"ok","translated":"Ouvrir le tableau de bord","detected_language":"en","confidence":0.98,"warnings":[]}],"billed_items":2,"pricing":{"base_usd":"$0.05","included_items":25,"overage_items":0,"overage_per_item_usd":0.002,"overage_usd":0},"usage":{"model":"claude-haiku-4-5-20251001","model_calls":2,"input_tokens":480,"output_tokens":64},"warnings":[],"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/translate/short":{"post":{"operationId":"postTranslateShort","summary":"Translate text between languages","tags":["translate"],"description":"Translate text between languages — text translation API for short content: translate a sentence, chat message, or up to 500 words to English, Spanish, French, Chinese, or any of 30+ languages. Language translation with auto-detected source language, formatting preserved; returns the translation plus detected source. Machine translation via Claude Haiku for agents localizing content cheaply. For longer documents use /translate/long.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The text to translate. Max 500 words (and 50KB). For longer documents use /translate/long. Aliases also accepted: q, input, content, message."},"target":{"type":"string","description":"Target language as an ISO 639-1 code (e.g. \"fr\") or English name (e.g. \"French\"). 30+ languages mapped directly; other values (endonyms, qualified names) are interpreted by the model with a targetHint finding. Required. Aliases also accepted: target_lang, target_language, to, lang, targetLanguage. (The response returns this as target_language.)"},"source":{"type":"string","description":"Optional source language (ISO 639-1 code or English name). When omitted, the source language is auto-detected. Aliases also accepted: source_language, from."}},"required":["text","target"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"translation, source_language, target_language, source_detected, word_count, tier, service_score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"translation":{"type":"string","description":"The translated text, formatting preserved"},"source_language":{"type":"string","description":"ISO 639-1 code of the source language (detected or supplied)"},"target_language":{"type":"string","description":"ISO 639-1 code of the target language"},"source_detected":{"type":"boolean","description":"true when the source language was auto-detected; false when supplied by the caller"},"word_count":{"type":"number","description":"Word count of the input text"},"tier":{"type":"string","description":"Pricing tier — always \"short\" for this endpoint"},"service_score":{"type":"number","description":"Endpoint health score 0-100 (100 on success)"},"grade":{"type":"string","description":"Letter grade A-F derived from service_score"},"findings":{"type":"array","description":"Plain-string hints — e.g. a targetHint string when the target language was model-interpreted"}}},"example":{"translation":"Bonjour le monde","source_language":"en","target_language":"fr","source_detected":true,"word_count":2,"tier":"short","service_score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/asn-lookup/analyze":{"get":{"operationId":"getAsnLookupAnalyze","summary":"Resolve an IP or domain to its ASN and network owner","tags":["asn-lookup"],"description":"Resolves an IP address or domain to its Autonomous System Number (ASN), network owner, country, and hosting/cloud classification — agents get structured network ownership context plus a trust score to assess infrastructure risk.","parameters":[{"name":"target","in":"query","required":true,"description":"IP address (v4 or v6) or domain name to look up (aliases accepted: ip, address, host, hostname, query — query param or JSON body)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"target, ip, ip_version, hostname, asn, asn_number, organization, network, country, region, city, is_hosting, is_cloud, is_vpn, classification, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string"},"ip":{"type":"string"},"ip_version":{"type":"number"},"hostname":{"type":["string","null"]},"asn":{"type":["string","null"]},"asn_number":{"type":["number","null"]},"organization":{"type":["string","null"]},"network":{"type":["string","null"]},"country":{"type":["string","null"]},"region":{"type":["string","null"]},"city":{"type":["string","null"]},"is_hosting":{"type":"boolean"},"is_cloud":{"type":"boolean"},"is_vpn":{"type":"boolean"},"classification":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"target":"8.8.8.8","ip":"8.8.8.8","ip_version":4,"hostname":"dns.google","asn":"AS15169","asn_number":15169,"organization":"Google LLC","network":null,"country":"US","region":"California","city":"Mountain View","is_hosting":true,"is_cloud":true,"is_vpn":false,"classification":"cloud","score":80,"grade":"B","findings":[{"rule":"cloud_infrastructure","deduction":-20,"detail":"IP belongs to known cloud provider (Google LLC)"}]}}}},"402":{"description":"Payment Required"}}}},"/whois-rdap/lookup":{"get":{"operationId":"getWhoisRdapLookup","summary":"WHOIS domain lookup via RDAP","tags":["whois-rdap"],"description":"WHOIS domain lookup via RDAP — domain registration data: registrar, registration and expiry dates, last-updated date, nameservers, and status flags from the authoritative registry, plus an actionability score so agents can assess domain trustworthiness, ownership, or availability risk.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name to look up (e.g. example.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"domain, tld, rdap_url, registrar, registrar_iana_id, created_at, updated_at, expires_at, days_until_expiry, name_servers, status, status_has_abuse_flags, score, grade, findings, raw_rdap_url"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"tld":{"type":"string"},"rdap_url":{"type":"string"},"registrar":{"type":"string"},"registrar_iana_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"},"expires_at":{"type":"string"},"days_until_expiry":{"type":"number"},"name_servers":{"type":"array"},"status":{"type":"array"},"status_has_abuse_flags":{"type":"boolean"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"},"raw_rdap_url":{"type":"string"}}},"example":{"domain":"example.com","tld":"com","rdap_url":"https://rdap.verisign.com/com/v1/domain/example.com","registrar":"RESERVED-Internet Assigned Numbers Authority","registrar_iana_id":"376","created_at":"1995-08-14T04:00:00Z","updated_at":"2026-01-16T18:26:50Z","expires_at":"2026-08-13T04:00:00Z","days_until_expiry":37,"name_servers":["elliott.ns.cloudflare.com","hera.ns.cloudflare.com"],"status":["client delete prohibited","client transfer prohibited"],"status_has_abuse_flags":false,"score":85,"grade":"B","findings":[{"rule":"expires_within_90_days","deduction":-15,"detail":"Domain expires in 37 days"}],"raw_rdap_url":"https://rdap.verisign.com/com/v1/domain/example.com"}}}},"402":{"description":"Payment Required"}}}},"/cert-transparency/lookup":{"get":{"operationId":"getCertTransparencyLookup","summary":"Enumerate certificates issued for a domain via crt.sh","tags":["cert-transparency"],"description":"Query the crt.sh certificate transparency log database to enumerate all SSL certificates ever issued for a domain — returns subdomains discovered, certificate issuers, validity periods, and a risk score flagging wildcard certs, expiring certs, and suspicious issuance patterns.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name to query certificate transparency logs for (e.g. example.com)","schema":{"type":"string"}},{"name":"include_subdomains","in":"query","required":false,"description":"Whether to include subdomain certificates (default: true)","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of certificates to return (default: 100, max: 500)","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"domain, total_certs_found, unique_subdomains, unique_subdomain_count, issuers, wildcard_certs, expiring_within_30_days, recently_issued, certs, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"total_certs_found":{"type":"number"},"unique_subdomains":{"type":"array"},"unique_subdomain_count":{"type":"number"},"issuers":{"type":"array"},"wildcard_certs":{"type":"array"},"expiring_within_30_days":{"type":"array"},"recently_issued":{"type":"array"},"certs":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"domain":"example.com","total_certs_found":47,"unique_subdomains":["www.example.com","mail.example.com"],"unique_subdomain_count":2,"issuers":["Let's Encrypt"],"wildcard_certs":[],"expiring_within_30_days":[],"recently_issued":[],"certs":[{"id":12345678,"common_name":"example.com","issuer":"Let's Encrypt","not_before":"2024-01-01T00:00:00Z","not_after":"2024-04-01T00:00:00Z","sans":["example.com","www.example.com"],"is_wildcard":false,"is_expired":false,"days_until_expiry":90}],"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/subnet/calc":{"get":{"operationId":"getSubnetCalc","summary":"Calculates IPv4/IPv6 subnet details from CIDR notation","tags":["subnet"],"description":"Calculates IPv4/IPv6 subnet details from CIDR notation — network/broadcast, netmask, wildcard (Cisco ACL) mask, binary/hex masks, usable host range, RFC classification (private/loopback/multicast), supernet, and subnet-split counts. Pass comma-separated CIDRs to detect overlaps and classify each pair (subnet/supernet/partial overlap/disjoint); multi-CIDR responses return {subnets, overlaps}.","parameters":[{"name":"cidr","in":"query","required":true,"description":"CIDR block, e.g. 10.0.1.0/24 or 2001:db8::/48 (IPv6). Comma-separate multiple CIDRs for overlap/containment analysis, e.g. 10.0.0.0/16,10.0.1.0/24","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"cidr, ip_version, network, broadcast, netmask, wildcard, binary_mask, hex_mask, prefix_length, total_hosts, usable_hosts, first_usable, last_usable, is_private, supernet, subnets, rfc_classification"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"cidr":{"type":"string"},"ip_version":{"type":"number"},"network":{"type":"string"},"broadcast":{"type":"string"},"netmask":{"type":"string"},"wildcard":{"type":"string"},"binary_mask":{"type":"string"},"hex_mask":{"type":"string"},"prefix_length":{"type":"number"},"total_hosts":{"type":"number"},"usable_hosts":{"type":"number"},"first_usable":{"type":"string"},"last_usable":{"type":"string"},"is_private":{"type":"boolean"},"supernet":{"type":"string"},"subnets":{"type":"array"},"rfc_classification":{"type":"string"}}},"example":{"cidr":"10.0.1.0/24","ip_version":4,"network":"10.0.1.0","broadcast":"10.0.1.255","netmask":"255.255.255.0","wildcard":"0.0.0.255","binary_mask":"11111111111111111111111100000000","hex_mask":"ffffff00","prefix_length":24,"total_hosts":256,"usable_hosts":254,"first_usable":"10.0.1.1","last_usable":"10.0.1.254","is_private":true,"supernet":"10.0.0.0/23","subnets":[{"prefix":"/25","count":2},{"prefix":"/26","count":4},{"prefix":"/27","count":8},{"prefix":"/28","count":16}],"rfc_classification":"Private (RFC 1918)"}}}},"402":{"description":"Payment Required"}}}},"/dns-propagation/check":{"get":{"operationId":"getDnsPropagationCheck","summary":"Compare a DNS record across 10 global resolvers","tags":["dns-propagation"],"description":"Query a domain's DNS record across 10 geographically distributed public resolvers simultaneously — returns what each resolver sees, whether results are consistent, propagation percentage, and a readiness score so agents can confirm DNS changes have fully propagated globally.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name to check propagation for (e.g. example.com)","schema":{"type":"string"}},{"name":"record_type","in":"query","required":false,"description":"DNS record type: A, AAAA, MX, TXT, CNAME, NS (default: A)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"domain, record_type, propagation_percentage, consistent, majority_value, resolvers, divergent_resolvers, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"record_type":{"type":"string"},"propagation_percentage":{"type":"number"},"consistent":{"type":"boolean"},"majority_value":{"type":"array"},"resolvers":{"type":"array"},"divergent_resolvers":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"domain":"example.com","record_type":"A","propagation_percentage":90,"consistent":true,"majority_value":["104.20.23.154","172.66.147.243"],"resolvers":[{"name":"Google Primary","ip":"8.8.8.8","status":"success","records":["104.20.23.154","172.66.147.243"],"matches_majority":true,"response_time_ms":24},{"name":"Comodo Secure","ip":"8.26.56.26","status":"timeout","records":[],"matches_majority":false,"response_time_ms":null}],"divergent_resolvers":["Comodo Secure"],"score":92,"grade":"A","findings":[{"rule":"resolver_timeout","deduction":-8,"detail":"1 resolver timed out"}]}}}},"402":{"description":"Payment Required"}}}},"/dnssec/validate":{"get":{"operationId":"getDnssecValidate","summary":"Validate a domain's DNSSEC configuration over DNS-over-HTTPS","tags":["dnssec"],"description":"Validate a domain's DNSSEC configuration over DNS-over-HTTPS: DS records at the parent zone, DNSKEY records at the domain, RRSIG signatures, NSEC/NSEC3, plus the validating resolver's AD bit — returns a full chain-of-trust assessment and readiness score so agents can verify DNS integrity before trusting resolution results.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name to validate DNSSEC for (e.g. example.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"domain, dnssec_enabled, resolver_validated, chain_of_trust, components, tld_ds_present, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"dnssec_enabled":{"type":"boolean"},"resolver_validated":{"type":"boolean","description":"Validating resolver's AD bit — chain verified upstream"},"chain_of_trust":{"type":"string"},"components":{"type":"object"},"tld_ds_present":{"type":"boolean"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"domain":"example.com","dnssec_enabled":true,"resolver_validated":true,"chain_of_trust":"complete","components":{"ds_record":{"present":true,"count":1,"algorithms":["ECDSAP256SHA256"]},"dnskey_record":{"present":true,"count":4,"key_types":["ZSK","KSK","ZSK","ZSK"]},"rrsig_record":{"present":true,"signatures_found":1},"nsec_or_nsec3":{"present":true,"type":"NSEC"}},"tld_ds_present":true,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/ip-blacklist/check":{"get":{"operationId":"getIpBlacklistCheck","summary":"Check an IP address against 15 major DNS blacklists","tags":["ip-blacklist"],"description":"Check an IP address against 15 major DNS blacklists (Spamhaus, Barracuda, SORBS, etc.) simultaneously — returns which lists it appears on, a reputation score, and a threat classification so agents can make block/allow decisions instantly.","parameters":[{"name":"ip","in":"query","required":true,"description":"IPv4 address to check (e.g. 1.2.3.4)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"ip, reversed_ip, listed_count, total_checked, threat_level, score, grade, findings, blacklists"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"reversed_ip":{"type":"string"},"listed_count":{"type":"number"},"total_checked":{"type":"number"},"threat_level":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"},"blacklists":{"type":"array"}}},"example":{"ip":"1.2.3.4","reversed_ip":"4.3.2.1","listed_count":0,"total_checked":15,"threat_level":"clean","score":100,"grade":"A","findings":[],"blacklists":[{"name":"zen.spamhaus.org","listed":false,"description":"Spamhaus ZEN — combined spam sources and exploits"}]}}}},"402":{"description":"Payment Required"}}}},"/ip-reputation/analyze":{"get":{"operationId":"getIpReputationAnalyze","summary":"IP reputation and malicious-IP check","tags":["ip-reputation"],"description":"IP reputation and malicious-IP check — screens an address against AbuseIPDB and AlienVault OTX threat feeds and returns a composite risk score, threat categories, malware families, and full source data.","parameters":[{"name":"ip","in":"query","required":true,"description":"IPv4 or IPv6 address to check","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"ip, risk_score, risk_level, composite, abuseipdb, otx"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"risk_score":{"type":"number","description":"0-100, higher = more malicious"},"risk_level":{"type":"string"},"composite":{"type":"object"},"abuseipdb":{"type":"object"},"otx":{"type":"object"}}},"example":{"ip":"185.220.101.45","risk_score":87,"risk_level":"critical","composite":{"is_malicious":true,"threat_categories":["brute_force","port_scan"],"first_seen":"2022-03-11","last_seen":"2024-11-01T14:22:00Z"},"abuseipdb":{"confidence_score":100,"total_reports":1842,"distinct_reporters":312,"last_reported_at":"2024-11-01T14:22:00Z","isp":"Frantech Solutions","usage_type":"Data Center/Web Hosting/Transit","domain":"frantech.ca","categories":[18,14]},"otx":{"available":true,"pulse_count":38,"malware_families":["Mirai"],"threat_types":["scanning"],"asn":"AS53667","country_code":"NL","reputation":-100}}}}},"402":{"description":"Payment Required"}}}},"/cron-parser/explain":{"get":{"operationId":"getCronParserExplain","summary":"Explain and validate a cron expression","tags":["cron-parser"],"description":"Parse any cron expression into a human-readable explanation, validate its syntax, compute the next 5 scheduled run times (UTC), and detect common patterns (daily, weekly, monthly, hourly) — accepts standard numeric fields plus JAN-DEC/SUN-SAT name tokens — so agents can understand, validate, and work with cron schedules without implementing their own cron parser.","parameters":[{"name":"expression","in":"query","required":true,"description":"Cron expression, 5 or 6 space-separated fields; month/day names accepted (e.g. 0 9 * * MON-FRI)","schema":{"type":"string"}},{"name":"count","in":"query","required":false,"description":"Number of next run times to return (default: 5, max: 20)","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"expression, is_valid, fields, explanation, pattern_name, next_runs, warnings, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"expression":{"type":"string"},"is_valid":{"type":"boolean"},"fields":{"type":"object"},"explanation":{"type":"string"},"pattern_name":{"type":"string"},"next_runs":{"type":"array"},"warnings":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"expression":"0 9 * * 1-5","is_valid":true,"fields":{"minute":"0","hour":"9","day_of_month":"*","month":"*","day_of_week":"1-5"},"explanation":"At 9:00 AM, Monday through Friday","pattern_name":"Weekdays at 9:00 AM","next_runs":["2024-03-11T09:00:00Z"],"warnings":[],"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/currency-exchange/convert":{"get":{"operationId":"getCurrencyExchangeConvert","summary":"Convert any amount between 32 fiat currencies","tags":["currency-exchange"],"description":"Convert any amount between 32 fiat currencies (live European Central Bank rates) and major cryptocurrencies (BTC, ETH, USDC, SOL, ICP, CELO and more, live Coinbase spot rates) — fiat↔fiat, crypto↔fiat, and crypto↔crypto all work. Returns converted amount, exchange rate, inverse rate, rate date, and rate source so agents can price and invoice across fiat and crypto without a paid forex API.","parameters":[{"name":"from","in":"query","required":true,"description":"ISO 4217 source currency code (e.g. USD)","schema":{"type":"string"}},{"name":"to","in":"query","required":true,"description":"Target — ISO 4217 fiat code (EUR) or crypto ticker (BTC, ETH)","schema":{"type":"string"}},{"name":"amount","in":"query","required":false,"description":"Amount to convert (default 1)","schema":{"type":"number"}},{"name":"date","in":"query","required":false,"description":"YYYY-MM-DD historical rate (fiat only). Default: latest","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"from, to, amount, converted_amount, exchange_rate, inverse_rate, rate_date, is_historical, source, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"amount":{"type":"number"},"converted_amount":{"type":"number"},"exchange_rate":{"type":"number"},"inverse_rate":{"type":"number"},"rate_date":{"type":"string"},"is_historical":{"type":"boolean"},"source":{"type":"string","description":"ecb | coinbase | coingecko | same"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"from":"USD","to":"BTC","amount":100,"converted_amount":0.00094932,"exchange_rate":0.0000094932,"inverse_rate":105340,"rate_date":"2026-06-23","is_historical":false,"source":"coinbase","score":100,"grade":"A","findings":[{"rule":"crypto_spot","detail":"Crypto pair priced at Coinbase spot"}]}}}},"402":{"description":"Payment Required"}}}},"/crypto/market":{"get":{"operationId":"getCryptoMarket","summary":"Fetch live market data for ~50 top crypto assets","tags":["crypto"],"description":"Structured live crypto market data for ~50 top assets in one JSON call: spot price and 24h open/high/low/volume/change (Coinbase Exchange) plus market cap, rank and circulating/total/max supply (CoinGecko). Quote in USD, EUR or GBP; defaults symbol=BTC vs=USD, so a bare call returns Bitcoin. 60s cache, keyless upstreams — the purpose-built replacement for scraping exchange price pages.","parameters":[{"name":"symbol","in":"query","required":false,"description":"Crypto ticker (BTC) or full name (\"bitcoin\"); defaults to BTC if omitted. Aliases: coin, ticker, asset","schema":{"type":"string"}},{"name":"vs","in":"query","required":false,"description":"Quote currency: USD (default), EUR or GBP. Aliases: currency, fiat","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"symbol, name, vs, price, change_24h, change_24h_pct, high_24h, low_24h, open_24h, volume_24h, market_cap, market_cap_rank, supply, last_updated, cache_age_seconds, source, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"symbol":{"type":"string"},"name":{"type":"string"},"vs":{"type":"string"},"price":{"type":"number"},"change_24h":{"type":["number","null"]},"change_24h_pct":{"type":["number","null"]},"high_24h":{"type":["number","null"]},"low_24h":{"type":["number","null"]},"open_24h":{"type":["number","null"]},"volume_24h":{"type":["number","null"]},"market_cap":{"type":["number","null"]},"market_cap_rank":{"type":["number","null"]},"supply":{"type":"object","properties":{"circulating":{"type":["number","null"]},"total":{"type":["number","null"]},"max":{"type":["number","null"]}}},"last_updated":{"type":"string"},"cache_age_seconds":{"type":"number"},"source":{"type":"string","description":"coinbase+coingecko | coinbase | coingecko"},"findings":{"type":"array"}}},"example":{"symbol":"BTC","name":"Bitcoin","vs":"USD","price":64826.88,"change_24h":101.88,"change_24h_pct":0.16,"high_24h":65050.87,"low_24h":64238.08,"open_24h":64725,"volume_24h":206284430,"market_cap":1299946852247,"market_cap_rank":1,"supply":{"circulating":20058731,"total":20058734,"max":21000000},"last_updated":"2026-07-20T01:34:52.830Z","cache_age_seconds":0,"source":"coinbase+coingecko","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/gas/price":{"get":{"operationId":"getGasPrice","summary":"Fetch live gas prices across 5 EVM chains","tags":["gas"],"description":"Live gas prices across Base, Ethereum, Arbitrum, Optimism, and Polygon with USD cost estimates for a transfer, an ERC-20 send, and a swap — keyless, one call, all chains. Per chain: gas price + EIP-1559 base/priority fee in gwei, native-token USD price, 15s cache. L2 figures are execution-gas only (L1 data fee excluded, flagged in findings).","parameters":[{"name":"chains","in":"query","required":false,"description":"Comma list from base, ethereum, arbitrum, optimism, polygon; omit for all 5. Aliases: chain, network, networks; eth/arb/op/matic/pol accepted","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.002000","outputShape":"chains, stale, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"chains":{"type":"object","additionalProperties":{"type":["object","null"],"properties":{"gas_price_gwei":{"type":["number","null"]},"base_fee_gwei":{"type":["number","null"]},"priority_fee_gwei":{"type":["number","null"]},"usd_estimates":{"type":"object","properties":{"transfer":{"type":["number","null"]},"erc20_transfer":{"type":["number","null"]},"swap":{"type":["number","null"]}}},"native_token":{"type":"string"},"native_usd":{"type":["number","null"]},"source":{"type":"string"},"cache_age_seconds":{"type":"number"}}}},"stale":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"chains":{"base":{"gas_price_gwei":0.006,"base_fee_gwei":0.005,"priority_fee_gwei":0.001,"usd_estimates":{"transfer":0.000230535,"erc20_transfer":0.000713562,"swap":0.00219557},"native_token":"ETH","native_usd":1829.645,"source":"https://mainnet.base.org","cache_age_seconds":0},"ethereum":{"gas_price_gwei":0.119926866,"base_fee_gwei":0.120496247,"priority_fee_gwei":0.1,"usd_estimates":{"transfer":0.0046079,"erc20_transfer":0.0142625,"swap":0.0438847},"native_token":"ETH","native_usd":1829.645,"source":"https://ethereum-rpc.publicnode.com","cache_age_seconds":0}},"stale":false,"findings":[{"rule":"l2_data_fee_excluded","detail":"base estimates are execution-gas only and exclude the L1 data fee"}]}}}},"402":{"description":"Payment Required"}}}},"/crypto/price":{"get":{"operationId":"getCryptoPrice","summary":"Crypto prices for up to 25 coins in one call","tags":["crypto"],"description":"Crypto prices for up to 25 coins in one call — live cryptocurrency spot prices for BTC, ETH, SOL and more in USD, EUR, or GBP from Coinbase with Kraken and CoinGecko fallback; no API key, one flat price. Per asset: price, 24h change when the source provides it, source, cache age. 30s cache; unknown symbols land in unresolved without failing the call. 25 prices for one $0.005 call vs 25 single-symbol lookups.","parameters":[{"name":"symbols","in":"query","required":false,"description":"Comma list of 1–25 tickers or full names (\"BTC,ETH\" or \"bitcoin\"); a leading $ is fine. Aliases: symbol, coins, coin, tickers, ticker, assets","schema":{"type":"string"}},{"name":"vs","in":"query","required":false,"description":"Quote currency: USD (default), EUR or GBP. Aliases: currency, fiat, vs_currency","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"vs, prices, unresolved, stale, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"vs":{"type":"string"},"prices":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"name":{"type":"string"},"price":{"type":"number"},"change_24h_pct":{"type":["number","null"]},"source":{"type":"string","description":"coinbase | coingecko | kraken"},"cache_age_seconds":{"type":"number"}}}},"unresolved":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"vs":"USD","prices":[{"symbol":"BTC","name":"Bitcoin","price":62441.615,"change_24h_pct":null,"source":"coinbase","cache_age_seconds":0},{"symbol":"ETH","name":"Ethereum","price":1829.645,"change_24h_pct":null,"source":"coinbase","cache_age_seconds":0}],"unresolved":[],"stale":false,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/crypto/ohlc":{"get":{"operationId":"getCryptoOhlc","summary":"Historical OHLC candles for any major crypto asset","tags":["crypto"],"description":"Historical OHLC candles for any major crypto asset — hourly or daily, up to 300 candles, with period stats (change %, high, low) — from Coinbase Exchange with Kraken fallback, no API key. Also a price-at-date mode: pass date=YYYY-MM-DD for that day's candle and close. USD, EUR, or GBP quotes; 5min cache.","parameters":[{"name":"symbol","in":"query","required":false,"description":"One ticker or full name (\"BTC\" or \"bitcoin\"); a leading $ is fine. Aliases: coin, ticker, asset","schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"description":"1h or 1d (default 1d). hour/hourly and day/daily accepted. Aliases: granularity, timeframe","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"Lookback window, default 30. Max 300 for 1d, 12 for 1h (300 candles). Alias: period","schema":{"type":"number"}},{"name":"limit","in":"query","required":false,"description":"Number of most-recent candles (the usual candle-API param). Capped at 288 for 1h, 300 for 1d. Aliases: count, candles. Use instead of days.","schema":{"type":"number"}},{"name":"date","in":"query","required":false,"description":"YYYY-MM-DD price-at-date mode: that day's single daily candle + its close as price. Mutually exclusive with days/limit","schema":{"type":"string"}},{"name":"vs","in":"query","required":false,"description":"Quote currency: USD (default), EUR or GBP. Aliases: currency, fiat, vs_currency","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"symbol, vs, interval, start, end, candles, stats, price, candle_count, source, cache_age_seconds, stale, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"symbol":{"type":"string"},"vs":{"type":"string"},"interval":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"candles":{"type":"array","items":{"type":"object","properties":{"time":{"type":"string"},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"},"volume":{"type":"number"}}}},"stats":{"type":"object","properties":{"open":{"type":"number"},"close":{"type":"number"},"change_pct":{"type":["number","null"]},"period_high":{"type":"number"},"period_low":{"type":"number"},"avg_volume":{"type":"number"}}},"price":{"type":["number","null"]},"candle_count":{"type":"number"},"source":{"type":"string","description":"coinbase | kraken"},"cache_age_seconds":{"type":"number"},"stale":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"symbol":"BTC","vs":"USD","interval":"1d","start":"2026-07-26","end":"2026-08-01","candles":[{"time":"2026-07-26T00:00:00.000Z","open":64295.61,"high":65511.36,"low":64229.6,"close":65341.07,"volume":2390.56790196},{"time":"2026-07-27T00:00:00.000Z","open":65341.07,"high":65705.08,"low":63545,"close":63694.43,"volume":5069.45269918},{"time":"2026-07-28T00:00:00.000Z","open":63693.44,"high":64041.02,"low":62645.39,"close":63847.12,"volume":6232.18054403},{"time":"2026-07-29T00:00:00.000Z","open":63847.12,"high":64665.3,"low":63194.45,"close":63896.14,"volume":8092.70552294},{"time":"2026-07-30T00:00:00.000Z","open":63896.14,"high":65118.08,"low":63502.91,"close":64721.9,"volume":8025.87127027},{"time":"2026-07-31T00:00:00.000Z","open":64721.9,"high":65360,"low":62358.96,"close":62825.9,"volume":8260.37090197},{"time":"2026-08-01T00:00:00.000Z","open":62826.69,"high":63093,"low":62209.81,"close":62445.14,"volume":2472.01120363}],"stats":{"open":64295.61,"close":62445.14,"change_pct":-2.88,"period_high":65705.08,"period_low":62209.81,"avg_volume":5791.88},"candle_count":7,"source":"coinbase","cache_age_seconds":0,"stale":false,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/currency-exchange/batch":{"get":{"operationId":"getCurrencyExchangeBatch","summary":"Convert one base currency to up to 30 targets in a single call","tags":["currency-exchange"],"description":"Convert one base currency to up to 30 targets in a single call — fiat (~200 currencies incl. SAR, AED, COP) and major crypto — ECB reference rates + Coinbase spot, no API key. Per target: rate, converted amount, rate date, source. The batch sibling of /currency-exchange/convert: 30 pairs for one $0.02 call instead of 30 singles.","parameters":[{"name":"from","in":"query","required":true,"description":"Base currency: ISO 4217 fiat code or crypto ticker, e.g. USD or BTC. Aliases: base, source","schema":{"type":"string"}},{"name":"to","in":"query","required":true,"description":"Comma list of 1–30 target codes, e.g. EUR,SAR,BTC. Aliases: targets, symbols","schema":{"type":"string"}},{"name":"amount","in":"query","required":false,"description":"Amount of the base currency to convert; default 1. Alias: value","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"from, amount, rates, unavailable, stale, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"amount":{"type":"number"},"rates":{"type":"array","items":{"type":"object","properties":{"to":{"type":"string"},"rate":{"type":["number","null"]},"converted_amount":{"type":["number","null"]},"rate_date":{"type":["string","null"]},"source":{"type":["string","null"],"description":"frankfurter | currency-api | er-api | coinbase | same (crosses join with +)"}}}},"unavailable":{"type":"array","items":{"type":"string"}},"stale":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"from":"USD","amount":100,"rates":[{"to":"EUR","rate":0.8707,"converted_amount":87.07,"rate_date":"2026-07-31","source":"frankfurter"},{"to":"SAR","rate":3.75,"converted_amount":375,"rate_date":"2026-08-01","source":"currency-api"},{"to":"BTC","rate":0.000016014961,"converted_amount":0.0016014961,"rate_date":"2026-08-01","source":"coinbase"}],"unavailable":[],"stale":false,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/currency-exchange/history":{"get":{"operationId":"getCurrencyExchangeHistory","summary":"Daily historical exchange-rate series for any currency pair","tags":["currency-exchange"],"description":"Daily historical exchange-rate series for any currency pair — fiat via ECB reference data, crypto via Coinbase daily closes — with min/max/average/change stats, no API key. Pass start/end dates or a days lookback (default 30). The history sibling of /currency-exchange/convert: trend and repricing context for the pairs agents already quote spot.","parameters":[{"name":"from","in":"query","required":true,"description":"Base currency: ISO 4217 fiat code or crypto ticker, e.g. USD or BTC. Aliases: base, source","schema":{"type":"string"}},{"name":"to","in":"query","required":true,"description":"One target code, e.g. EUR or BTC. Aliases: target, quote","schema":{"type":"string"}},{"name":"start","in":"query","required":false,"description":"Range start, YYYY-MM-DD. Alias: from_date. Caps: ECB fiat 366d, other fiat 90d, crypto 300d","schema":{"type":"string"}},{"name":"end","in":"query","required":false,"description":"Range end, YYYY-MM-DD; default today. Alias: to_date","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"Alternative to start/end: lookback window ending today; default 30. Alias: period","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"from, to, start, end, series, stats, point_count, source, cache_age_seconds, stale, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"series":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"rate":{"type":"number","description":"units of `to` per 1 `from` on that date"}}}},"stats":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"},"average":{"type":"number"},"change_pct":{"type":"number","description":"first→last point, %"},"volatility_pct":{"type":"number","description":"stdev of daily % changes"}}},"point_count":{"type":"number"},"source":{"type":"string","description":"frankfurter | ecb-xml | currency-api | coinbase"},"cache_age_seconds":{"type":"number"},"stale":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"from":"USD","to":"EUR","start":"2026-07-26","end":"2026-08-01","series":[{"date":"2026-07-24","rate":0.87897},{"date":"2026-07-27","rate":0.87804},{"date":"2026-07-28","rate":0.87974},{"date":"2026-07-29","rate":0.87873},{"date":"2026-07-30","rate":0.87138},{"date":"2026-07-31","rate":0.8707}],"stats":{"min":0.8707,"max":0.87974,"average":0.87626,"change_pct":-0.94,"volatility_pct":0.34},"point_count":6,"source":"frankfurter","cache_age_seconds":0,"stale":false,"findings":[{"rule":"non_trading_days_omitted","detail":"ECB publishes business days only — weekends and holidays have no reference rate and are omitted, never interpolated"}]}}}},"402":{"description":"Payment Required"}}}},"/token/info":{"get":{"operationId":"getTokenInfo","summary":"Full profile for any ERC-20 token by contract address","tags":["token"],"description":"Full profile for any ERC-20 token by contract address — name, symbol, decimals, supply from the chain itself, plus live price, liquidity, and volume from DEX data — Base and Ethereum, no API key. Holder count included; identity read on-chain so it can't lie or be rate-limited away. 10min cache; unlisted tokens return nulls with a no_dex_liquidity finding.","parameters":[{"name":"address","in":"query","required":true,"description":"ERC-20 contract address: 0x + 40 hex chars, checksum case ignored. Aliases: contract, token, contract_address","schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"description":"base (default) or ethereum (eth accepted). Alias: network","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"address, chain, name, symbol, decimals, total_supply, total_supply_formatted, price_usd, liquidity_usd, volume_24h_usd, top_pool, holders, is_contract, source, cache_age_seconds, stale, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"chain":{"type":"string"},"name":{"type":["string","null"]},"symbol":{"type":["string","null"]},"decimals":{"type":["number","null"]},"total_supply":{"type":["string","null"],"description":"raw atomic units as a decimal string — can exceed Number.MAX_SAFE_INTEGER"},"total_supply_formatted":{"type":["number","null"],"description":"total_supply / 10^decimals — may lose precision on huge supplies"},"price_usd":{"type":["number","null"]},"liquidity_usd":{"type":["number","null"]},"volume_24h_usd":{"type":["number","null"]},"top_pool":{"type":["object","null"],"properties":{"dex":{"type":"string"},"pair":{"type":"string"},"url":{"type":["string","null"]}}},"holders":{"type":["number","null"]},"is_contract":{"type":"boolean"},"source":{"type":"string","description":"e.g. \"rpc+dexscreener+blockscout\""},"cache_age_seconds":{"type":"number"},"stale":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"address":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","chain":"base","name":"USD Coin","symbol":"USDC","decimals":6,"total_supply":"4156545500926116","total_supply_formatted":4156545500.926116,"price_usd":0.9999,"liquidity_usd":907385.42,"volume_24h_usd":803.46,"top_pool":{"dex":"uniswap","pair":"USDC/USDbC","url":"https://dexscreener.com/base/0xa0ab20a64f46b5676fe1542cb87b454e5104007689e0eef4212aa0cbe34933a1"},"holders":12726127,"is_contract":true,"source":"rpc+dexscreener+blockscout","cache_age_seconds":0,"stale":false,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/wallet/balance":{"get":{"operationId":"getWalletBalance","summary":"Fetch native, USDC and token balances for a wallet","tags":["wallet"],"description":"Token balance for any wallet — native coin, USDC and any ERC-20 on Base, Ethereum, or Solana, with USD estimates — straight from public RPCs, no API key. Raw units as decimal strings plus formatted numbers; add up to 10 ERC-20 contracts via tokens=. 60s cache; an empty, never-used address is a real answer (zeros + no_activity_detected finding).","parameters":[{"name":"address","in":"query","required":true,"description":"Wallet address: 0x + 40 hex chars on base/ethereum, base58 on solana. Aliases: wallet, account, addr","schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"description":"base (default), ethereum, or solana (eth/sol accepted). Alias: network","schema":{"type":"string"}},{"name":"tokens","in":"query","required":false,"description":"EVM only: comma list of up to 10 ERC-20 contract addresses for extra balances","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"address, chain, native, usdc, tokens, source, cache_age_seconds, stale, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"chain":{"type":"string"},"native":{"type":"object","properties":{"symbol":{"type":"string"},"raw":{"type":"string","description":"raw units (wei/lamports) as a decimal string"},"formatted":{"type":"number"},"usd":{"type":["number","null"]}}},"usdc":{"type":"object","properties":{"raw":{"type":["string","null"]},"formatted":{"type":["number","null"]},"usd":{"type":["number","null"]}}},"tokens":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":["string","null"]},"raw":{"type":["string","null"]},"formatted":{"type":["number","null"]},"usd":{"type":["number","null"]}}}},"source":{"type":"string","description":"the RPC that answered"},"cache_age_seconds":{"type":"number"},"stale":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"address":"0x4f3c04c3f17264b83ae884df7985142b7dc8047c","chain":"base","native":{"symbol":"ETH","raw":"0","formatted":0,"usd":0},"usdc":{"raw":"3519150","formatted":3.51915,"usd":3.52},"tokens":[],"source":"https://mainnet.base.org","cache_age_seconds":0,"stale":false,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/wallet/intel":{"get":{"operationId":"getWalletIntel","summary":"Counterparty due-diligence for any Base or Ethereum wallet","tags":["wallet"],"description":"Counterparty due-diligence for any Base or Ethereum wallet — age, funding origin, USDC flow, activity pattern, and risk flags in one scored report. The domain-report of wallets: wallet age, first funder, in/out totals, distinct counterparties, 30d activity shape, contract-or-EOA, score + A–F grade. An empty or fresh wallet is a real answer (low score + flags). 5min cache.","parameters":[{"name":"address","in":"query","required":true,"description":"EVM wallet address: 0x + 40 hex chars. Aliases: wallet, account, addr","schema":{"type":"string"}},{"name":"chain","in":"query","required":false,"description":"base (default) or ethereum (eth accepted). Alias: network","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"address, chain, is_contract, wallet_age_days, first_seen, first_funder, usdc_in_total, usdc_out_total, net_flow, counterparties, top_counterparty, activity_30d, activity_pattern, native_balance, transfers_analyzed, truncated, score, grade, flags, source, cache_age_seconds, stale, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"chain":{"type":"string"},"is_contract":{"type":["boolean","null"]},"wallet_age_days":{"type":["number","null"]},"first_seen":{"type":["string","null"]},"first_funder":{"type":["object","null"],"properties":{"address":{"type":"string"},"date":{"type":"string"}}},"usdc_in_total":{"type":["number","null"]},"usdc_out_total":{"type":["number","null"]},"net_flow":{"type":["number","null"]},"counterparties":{"type":["number","null"]},"top_counterparty":{"type":["object","null"],"properties":{"address":{"type":"string"},"volume":{"type":"number"}}},"activity_30d":{"type":["object","null"],"properties":{"transfers":{"type":"number"},"volume":{"type":"number"}}},"activity_pattern":{"type":["string","null"],"description":"dormant | steady | burst"},"native_balance":{"type":["number","null"]},"transfers_analyzed":{"type":["number","null"]},"truncated":{"type":"boolean"},"score":{"type":["number","null"],"description":"0-100; null when history is unavailable"},"grade":{"type":["string","null"],"description":"A-F"},"flags":{"type":"array","items":{"type":"string"}},"source":{"type":"string"},"cache_age_seconds":{"type":"number"},"stale":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"address":"0x4f3c04c3f17264b83ae884df7985142b7dc8047c","chain":"base","is_contract":false,"wallet_age_days":157,"first_seen":"2026-02-25T13:48:31.000Z","first_funder":{"address":"0xdadc335482ad545296fd7b28518a251ffcbeb9df","date":"2026-02-25T13:48:31.000Z"},"usdc_in_total":31.00175,"usdc_out_total":25.691,"net_flow":5.31075,"counterparties":6,"top_counterparty":{"address":"0xdadc335482ad545296fd7b28518a251ffcbeb9df","volume":31.691},"activity_30d":{"transfers":213,"volume":11.685},"activity_pattern":"steady","native_balance":0,"transfers_analyzed":727,"truncated":false,"score":100,"grade":"A","flags":[],"source":"blockscout","cache_age_seconds":0,"stale":false,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/iban/validate":{"get":{"operationId":"getIbanValidate","summary":"Validate any IBAN offline","tags":["iban"],"description":"Validate any IBAN offline — mod-97 check digits, per-country structure, bank/branch extraction, and pretty formatting for ~80 countries — deterministic, instant, no upstream. A structurally invalid IBAN is a real answer: valid:false + findings naming exactly what failed. Pass iban as ?iban= (GET) or a JSON body (POST).","parameters":[{"name":"iban","in":"query","required":true,"description":"The IBAN to validate — spaces, hyphens, case, and a leading IBAN: label are tolerated. Aliases: account, account_number, number","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"iban, valid, country, country_name, check_digits, checksum_ok, length_ok, structure_ok, bank_code, branch_code, account_number, formatted, sepa_member, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string","description":"normalized electronic format"},"valid":{"type":"boolean"},"country":{"type":"string"},"country_name":{"type":["string","null"]},"check_digits":{"type":"string"},"checksum_ok":{"type":"boolean"},"length_ok":{"type":"boolean"},"structure_ok":{"type":"boolean"},"bank_code":{"type":["string","null"]},"branch_code":{"type":["string","null"]},"account_number":{"type":["string","null"]},"formatted":{"type":"string","description":"print format, grouped by 4"},"sepa_member":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"iban":"DE89370400440532013000","valid":true,"country":"DE","country_name":"Germany","check_digits":"89","checksum_ok":true,"length_ok":true,"structure_ok":true,"bank_code":"37040044","branch_code":null,"account_number":"0532013000","formatted":"DE89 3704 0044 0532 0130 00","sepa_member":true,"findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postIbanValidate","summary":"Validate any IBAN offline","tags":["iban"],"description":"Validate any IBAN offline — mod-97 check digits, per-country structure, bank/branch extraction, and pretty formatting for ~80 countries — deterministic, instant, no upstream. A structurally invalid IBAN is a real answer: valid:false + findings naming exactly what failed. Pass iban as ?iban= (GET) or a JSON body (POST).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string","description":"The IBAN to validate — spaces, hyphens, case, and a leading IBAN: label are tolerated. Aliases: account, account_number, number"}},"required":["iban"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"iban, valid, country, country_name, check_digits, checksum_ok, length_ok, structure_ok, bank_code, branch_code, account_number, formatted, sepa_member, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string","description":"normalized electronic format"},"valid":{"type":"boolean"},"country":{"type":"string"},"country_name":{"type":["string","null"]},"check_digits":{"type":"string"},"checksum_ok":{"type":"boolean"},"length_ok":{"type":"boolean"},"structure_ok":{"type":"boolean"},"bank_code":{"type":["string","null"]},"branch_code":{"type":["string","null"]},"account_number":{"type":["string","null"]},"formatted":{"type":"string","description":"print format, grouped by 4"},"sepa_member":{"type":"boolean"},"findings":{"type":"array"}}},"example":{"iban":"DE89370400440532013000","valid":true,"country":"DE","country_name":"Germany","check_digits":"89","checksum_ok":true,"length_ok":true,"structure_ok":true,"bank_code":"37040044","branch_code":null,"account_number":"0532013000","formatted":"DE89 3704 0044 0532 0130 00","sepa_member":true,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/weather/current":{"get":{"operationId":"getWeatherCurrent","summary":"Current weather for any city or lat/lon worldwide, plus a…","tags":["weather"],"description":"Current weather for any city or lat/lon worldwide, plus a 3-day forecast — temperature, feels-like, humidity, wind, precipitation, cloud cover, and a plain-language condition. Give a city name (geocoded for you) or coordinates. No API key, metric or imperial units. Pass params as query (GET) or a JSON body (POST).","parameters":[{"name":"city","in":"query","required":false,"description":"City or place name to geocode, e.g. \"London\" or \"Austin, TX\". Aliases: location, q, place, name. Ignored when coordinates are given","schema":{"type":"string"}},{"name":"latitude","in":"query","required":false,"description":"Latitude -90..90 — must be paired with longitude; coordinates skip geocoding and win over city. Alias: lat","schema":{"type":"number"}},{"name":"longitude","in":"query","required":false,"description":"Longitude -180..180 — must be paired with latitude. Aliases: lon, lng","schema":{"type":"number"}},{"name":"units","in":"query","required":false,"description":"metric (default: °C, km/h, mm) or imperial (°F, mph, inch). Alias: unit","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.002000","outputShape":"location, current, forecast, units, source, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"location":{"type":"object","properties":{"name":{"type":["string","null"]},"country":{"type":["string","null"]},"region":{"type":["string","null"]},"latitude":{"type":"number"},"longitude":{"type":"number"},"timezone":{"type":["string","null"]}}},"current":{"type":"object","properties":{"temperature":{"type":["number","null"]},"feels_like":{"type":["number","null"]},"humidity_pct":{"type":["number","null"]},"wind_speed":{"type":["number","null"]},"wind_direction_deg":{"type":["number","null"]},"precipitation":{"type":["number","null"]},"cloud_cover_pct":{"type":["number","null"]},"weather_code":{"type":["number","null"]},"condition":{"type":["string","null"],"description":"plain-language WMO condition"},"is_day":{"type":"boolean"}}},"forecast":{"type":"array","description":"next 3 days: date, temp_max, temp_min, precipitation, weather_code, condition"},"units":{"type":"object","properties":{"temperature":{"type":"string"},"wind_speed":{"type":"string"},"precipitation":{"type":"string"}}},"source":{"type":"string"},"cache_age_seconds":{"type":"number","description":"0 = fresh; forecasts are cached up to 10 min per location"},"findings":{"type":"array"}}},"example":{"location":{"name":"London","country":"United Kingdom","region":"England","latitude":51.51,"longitude":-0.13,"timezone":"Europe/London"},"current":{"temperature":14.2,"feels_like":13.1,"humidity_pct":77,"wind_speed":11.5,"wind_direction_deg":210,"precipitation":0,"cloud_cover_pct":75,"weather_code":3,"condition":"Overcast","is_day":true},"forecast":[{"date":"2026-08-31","temp_max":18.4,"temp_min":11.2,"precipitation":1.3,"weather_code":61,"condition":"Rain"},{"date":"2026-09-01","temp_max":19.1,"temp_min":12,"precipitation":0,"weather_code":2,"condition":"Partly cloudy"},{"date":"2026-09-02","temp_max":17.8,"temp_min":11.6,"precipitation":0.4,"weather_code":80,"condition":"Rain showers"}],"units":{"temperature":"°C","wind_speed":"km/h","precipitation":"mm"},"source":"open-meteo","cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postWeatherCurrent","summary":"Current weather for any city or lat/lon worldwide, plus a…","tags":["weather"],"description":"Current weather for any city or lat/lon worldwide, plus a 3-day forecast — temperature, feels-like, humidity, wind, precipitation, cloud cover, and a plain-language condition. Give a city name (geocoded for you) or coordinates. No API key, metric or imperial units. Pass params as query (GET) or a JSON body (POST).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"city":{"type":"string","description":"City or place name to geocode, e.g. \"London\" or \"Austin, TX\". Aliases: location, q, place, name. Ignored when coordinates are given"},"latitude":{"type":"number","description":"Latitude -90..90 — must be paired with longitude; coordinates skip geocoding and win over city. Alias: lat"},"longitude":{"type":"number","description":"Longitude -180..180 — must be paired with latitude. Aliases: lon, lng"},"units":{"type":"string","description":"metric (default: °C, km/h, mm) or imperial (°F, mph, inch). Alias: unit"}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.002000","outputShape":"location, current, forecast, units, source, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"location":{"type":"object","properties":{"name":{"type":["string","null"]},"country":{"type":["string","null"]},"region":{"type":["string","null"]},"latitude":{"type":"number"},"longitude":{"type":"number"},"timezone":{"type":["string","null"]}}},"current":{"type":"object","properties":{"temperature":{"type":["number","null"]},"feels_like":{"type":["number","null"]},"humidity_pct":{"type":["number","null"]},"wind_speed":{"type":["number","null"]},"wind_direction_deg":{"type":["number","null"]},"precipitation":{"type":["number","null"]},"cloud_cover_pct":{"type":["number","null"]},"weather_code":{"type":["number","null"]},"condition":{"type":["string","null"],"description":"plain-language WMO condition"},"is_day":{"type":"boolean"}}},"forecast":{"type":"array","description":"next 3 days: date, temp_max, temp_min, precipitation, weather_code, condition"},"units":{"type":"object","properties":{"temperature":{"type":"string"},"wind_speed":{"type":"string"},"precipitation":{"type":"string"}}},"source":{"type":"string"},"cache_age_seconds":{"type":"number","description":"0 = fresh; forecasts are cached up to 10 min per location"},"findings":{"type":"array"}}},"example":{"location":{"name":"London","country":"United Kingdom","region":"England","latitude":51.51,"longitude":-0.13,"timezone":"Europe/London"},"current":{"temperature":14.2,"feels_like":13.1,"humidity_pct":77,"wind_speed":11.5,"wind_direction_deg":210,"precipitation":0,"cloud_cover_pct":75,"weather_code":3,"condition":"Overcast","is_day":true},"forecast":[{"date":"2026-08-31","temp_max":18.4,"temp_min":11.2,"precipitation":1.3,"weather_code":61,"condition":"Rain"},{"date":"2026-09-01","temp_max":19.1,"temp_min":12,"precipitation":0,"weather_code":2,"condition":"Partly cloudy"},{"date":"2026-09-02","temp_max":17.8,"temp_min":11.6,"precipitation":0.4,"weather_code":80,"condition":"Rain showers"}],"units":{"temperature":"°C","wind_speed":"km/h","precipitation":"mm"},"source":"open-meteo","cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/weather/forecast":{"get":{"operationId":"getWeatherForecast","summary":"Multi-day weather forecast for any city or lat/lon worldwide","tags":["weather"],"description":"Multi-day weather forecast for any city or lat/lon worldwide — up to 16 days of daily highs/lows, precipitation & probability, UV, sunrise/sunset, wind, and plain-language conditions, plus optional next-24h hourly. Give a city name (geocoded) or coordinates. No API key, metric or imperial. Pass params as query (GET) or a JSON body (POST).","parameters":[{"name":"city","in":"query","required":false,"description":"City or place name to geocode, e.g. \"London\" or \"Austin, TX\". Aliases: location, q, place, name. Ignored when coordinates are given","schema":{"type":"string"}},{"name":"latitude","in":"query","required":false,"description":"Latitude -90..90 — must be paired with longitude; coordinates skip geocoding and win over city. Alias: lat","schema":{"type":"number"}},{"name":"longitude","in":"query","required":false,"description":"Longitude -180..180 — must be paired with latitude. Aliases: lon, lng","schema":{"type":"number"}},{"name":"days","in":"query","required":false,"description":"Daily forecast length 1-16 (default 7; out-of-range values are clamped with a finding). Alias: forecast_days","schema":{"type":"number"}},{"name":"hourly","in":"query","required":false,"description":"true to include the next 24 hours hour-by-hour (temperature, precipitation + probability, wind, condition). Default false. Alias: include_hourly; 1/true accepted","schema":{"type":"boolean"}},{"name":"units","in":"query","required":false,"description":"metric (default: °C, km/h, mm) or imperial (°F, mph, inch). Alias: unit","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"location, daily, hourly, units, days, source, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"location":{"type":"object","properties":{"name":{"type":["string","null"]},"country":{"type":["string","null"]},"region":{"type":["string","null"]},"latitude":{"type":"number"},"longitude":{"type":"number"},"timezone":{"type":["string","null"]}}},"daily":{"type":"array","description":"one object per day: date, temp_max, temp_min, feels_like_max, feels_like_min, precipitation, precip_probability_pct (nullable far out), uv_index_max, sunrise, sunset, wind_speed_max, wind_gusts_max, wind_direction_deg, weather_code, condition"},"hourly":{"type":"array","description":"present ONLY when hourly=true — next 24 hours: time, temperature, precipitation, precip_probability_pct, wind_speed, weather_code, condition"},"units":{"type":"object","properties":{"temperature":{"type":"string"},"wind_speed":{"type":"string"},"precipitation":{"type":"string"}}},"days":{"type":"number","description":"daily forecast length actually used (after clamping to 1-16)"},"source":{"type":"string"},"cache_age_seconds":{"type":"number","description":"0 = fresh; forecasts are cached up to 10 min per location"},"findings":{"type":"array"}}},"example":{"location":{"name":"London","country":"United Kingdom","region":"England","latitude":51.51,"longitude":-0.13,"timezone":"Europe/London"},"daily":[{"date":"2026-08-31","temp_max":18.4,"temp_min":11.2,"feels_like_max":17.9,"feels_like_min":10.4,"precipitation":1.3,"precip_probability_pct":60,"uv_index_max":4.1,"sunrise":"2026-08-31T06:12","sunset":"2026-08-31T19:44","wind_speed_max":21,"wind_gusts_max":38.5,"wind_direction_deg":230,"weather_code":61,"condition":"Rain"},{"date":"2026-09-01","temp_max":19.1,"temp_min":12,"feels_like_max":18.6,"feels_like_min":11.3,"precipitation":0,"precip_probability_pct":10,"uv_index_max":5.2,"sunrise":"2026-09-01T06:14","sunset":"2026-09-01T19:42","wind_speed_max":15.8,"wind_gusts_max":29.2,"wind_direction_deg":245,"weather_code":2,"condition":"Partly cloudy"}],"units":{"temperature":"°C","wind_speed":"km/h","precipitation":"mm"},"days":7,"source":"open-meteo","cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postWeatherForecast","summary":"Multi-day weather forecast for any city or lat/lon worldwide","tags":["weather"],"description":"Multi-day weather forecast for any city or lat/lon worldwide — up to 16 days of daily highs/lows, precipitation & probability, UV, sunrise/sunset, wind, and plain-language conditions, plus optional next-24h hourly. Give a city name (geocoded) or coordinates. No API key, metric or imperial. Pass params as query (GET) or a JSON body (POST).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"city":{"type":"string","description":"City or place name to geocode, e.g. \"London\" or \"Austin, TX\". Aliases: location, q, place, name. Ignored when coordinates are given"},"latitude":{"type":"number","description":"Latitude -90..90 — must be paired with longitude; coordinates skip geocoding and win over city. Alias: lat"},"longitude":{"type":"number","description":"Longitude -180..180 — must be paired with latitude. Aliases: lon, lng"},"days":{"type":"number","description":"Daily forecast length 1-16 (default 7; out-of-range values are clamped with a finding). Alias: forecast_days"},"hourly":{"type":"boolean","description":"true to include the next 24 hours hour-by-hour (temperature, precipitation + probability, wind, condition). Default false. Alias: include_hourly; 1/true accepted"},"units":{"type":"string","description":"metric (default: °C, km/h, mm) or imperial (°F, mph, inch). Alias: unit"}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"location, daily, hourly, units, days, source, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"location":{"type":"object","properties":{"name":{"type":["string","null"]},"country":{"type":["string","null"]},"region":{"type":["string","null"]},"latitude":{"type":"number"},"longitude":{"type":"number"},"timezone":{"type":["string","null"]}}},"daily":{"type":"array","description":"one object per day: date, temp_max, temp_min, feels_like_max, feels_like_min, precipitation, precip_probability_pct (nullable far out), uv_index_max, sunrise, sunset, wind_speed_max, wind_gusts_max, wind_direction_deg, weather_code, condition"},"hourly":{"type":"array","description":"present ONLY when hourly=true — next 24 hours: time, temperature, precipitation, precip_probability_pct, wind_speed, weather_code, condition"},"units":{"type":"object","properties":{"temperature":{"type":"string"},"wind_speed":{"type":"string"},"precipitation":{"type":"string"}}},"days":{"type":"number","description":"daily forecast length actually used (after clamping to 1-16)"},"source":{"type":"string"},"cache_age_seconds":{"type":"number","description":"0 = fresh; forecasts are cached up to 10 min per location"},"findings":{"type":"array"}}},"example":{"location":{"name":"London","country":"United Kingdom","region":"England","latitude":51.51,"longitude":-0.13,"timezone":"Europe/London"},"daily":[{"date":"2026-08-31","temp_max":18.4,"temp_min":11.2,"feels_like_max":17.9,"feels_like_min":10.4,"precipitation":1.3,"precip_probability_pct":60,"uv_index_max":4.1,"sunrise":"2026-08-31T06:12","sunset":"2026-08-31T19:44","wind_speed_max":21,"wind_gusts_max":38.5,"wind_direction_deg":230,"weather_code":61,"condition":"Rain"},{"date":"2026-09-01","temp_max":19.1,"temp_min":12,"feels_like_max":18.6,"feels_like_min":11.3,"precipitation":0,"precip_probability_pct":10,"uv_index_max":5.2,"sunrise":"2026-09-01T06:14","sunset":"2026-09-01T19:42","wind_speed_max":15.8,"wind_gusts_max":29.2,"wind_direction_deg":245,"weather_code":2,"condition":"Partly cloudy"}],"units":{"temperature":"°C","wind_speed":"km/h","precipitation":"mm"},"days":7,"source":"open-meteo","cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/prediction/markets":{"get":{"operationId":"getPredictionMarkets","summary":"Live prediction market odds from Polymarket","tags":["prediction"],"description":"Live prediction market odds from Polymarket — list the top active markets by volume, or search by keyword. Each result has the question, outcomes with current prices (implied probabilities), 24h/total volume, liquidity, and resolution date. No API key. Great for agents tracking real-world event probabilities (elections, crypto, sports, econ). Pass params as query (GET) or a JSON body (POST).","parameters":[{"name":"query","in":"query","required":false,"description":"Keyword search, e.g. \"election\" or \"bitcoin\". Aliases: q, search, keyword. Omit to list the top active markets by volume","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max markets to return, 1..50 (default 20). Aliases: count, n","schema":{"type":"number"}},{"name":"status","in":"query","required":false,"description":"active (default), closed, or all. Alias: state","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"source, query, status, count, markets, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string"},"query":{"type":["string","null"],"description":"echoed keyword; null when browsing top markets"},"status":{"type":"string","description":"effective filter: active, closed, or all"},"count":{"type":"number"},"markets":{"type":"array","description":"in upstream order — browse: volume desc; search: relevance","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"},"slug":{"type":["string","null"]},"outcomes":{"type":"array","description":"each {outcome, price}; price is the IMPLIED PROBABILITY 0..1 (0.55 = 55% chance), i.e. the current share price in USD"},"volume_usd":{"type":"number","description":"lifetime traded volume"},"volume_24h_usd":{"type":["number","null"]},"liquidity_usd":{"type":["number","null"]},"end_date":{"type":["string","null"],"description":"ISO 8601 resolution/close date"},"category":{"type":["string","null"]},"active":{"type":"boolean"},"closed":{"type":"boolean","description":"true once resolved/closed (active may still be true)"},"url":{"type":["string","null"]}}}},"cache_age_seconds":{"type":"number","description":"0 = fresh; results are cached up to 60s per query"},"findings":{"type":"array","description":"no_results, limit_clamped, invalid_status, outcomes_unparseable"}}},"example":{"source":"polymarket","query":"bitcoin","status":"active","count":2,"markets":[{"id":"3257332","question":"Will Bitcoin reach $100,000 in August?","slug":"will-bitcoin-reach-100k-in-august-2026","outcomes":[{"outcome":"Yes","price":0.0005},{"outcome":"No","price":0.9995}],"volume_usd":3088033.25,"volume_24h_usd":39531.94,"liquidity_usd":220656.48,"end_date":"2026-09-01T04:00:00Z","category":"Crypto","active":true,"closed":false,"url":"https://polymarket.com/market/will-bitcoin-reach-100k-in-august-2026"},{"id":"3257334","question":"Will Bitcoin reach $85,000 in August?","slug":"will-bitcoin-reach-85k-in-august-2026","outcomes":[{"outcome":"Yes","price":0.0005},{"outcome":"No","price":0.9995}],"volume_usd":1674348.63,"volume_24h_usd":194808.39,"liquidity_usd":122917.85,"end_date":"2026-09-01T04:00:00Z","category":"Crypto","active":true,"closed":false,"url":"https://polymarket.com/market/will-bitcoin-reach-85k-in-august-2026"}],"cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postPredictionMarkets","summary":"Live prediction market odds from Polymarket","tags":["prediction"],"description":"Live prediction market odds from Polymarket — list the top active markets by volume, or search by keyword. Each result has the question, outcomes with current prices (implied probabilities), 24h/total volume, liquidity, and resolution date. No API key. Great for agents tracking real-world event probabilities (elections, crypto, sports, econ). Pass params as query (GET) or a JSON body (POST).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword search, e.g. \"election\" or \"bitcoin\". Aliases: q, search, keyword. Omit to list the top active markets by volume"},"limit":{"type":"number","description":"Max markets to return, 1..50 (default 20). Aliases: count, n"},"status":{"type":"string","description":"active (default), closed, or all. Alias: state"}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"source, query, status, count, markets, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string"},"query":{"type":["string","null"],"description":"echoed keyword; null when browsing top markets"},"status":{"type":"string","description":"effective filter: active, closed, or all"},"count":{"type":"number"},"markets":{"type":"array","description":"in upstream order — browse: volume desc; search: relevance","items":{"type":"object","properties":{"id":{"type":"string"},"question":{"type":"string"},"slug":{"type":["string","null"]},"outcomes":{"type":"array","description":"each {outcome, price}; price is the IMPLIED PROBABILITY 0..1 (0.55 = 55% chance), i.e. the current share price in USD"},"volume_usd":{"type":"number","description":"lifetime traded volume"},"volume_24h_usd":{"type":["number","null"]},"liquidity_usd":{"type":["number","null"]},"end_date":{"type":["string","null"],"description":"ISO 8601 resolution/close date"},"category":{"type":["string","null"]},"active":{"type":"boolean"},"closed":{"type":"boolean","description":"true once resolved/closed (active may still be true)"},"url":{"type":["string","null"]}}}},"cache_age_seconds":{"type":"number","description":"0 = fresh; results are cached up to 60s per query"},"findings":{"type":"array","description":"no_results, limit_clamped, invalid_status, outcomes_unparseable"}}},"example":{"source":"polymarket","query":"bitcoin","status":"active","count":2,"markets":[{"id":"3257332","question":"Will Bitcoin reach $100,000 in August?","slug":"will-bitcoin-reach-100k-in-august-2026","outcomes":[{"outcome":"Yes","price":0.0005},{"outcome":"No","price":0.9995}],"volume_usd":3088033.25,"volume_24h_usd":39531.94,"liquidity_usd":220656.48,"end_date":"2026-09-01T04:00:00Z","category":"Crypto","active":true,"closed":false,"url":"https://polymarket.com/market/will-bitcoin-reach-100k-in-august-2026"},{"id":"3257334","question":"Will Bitcoin reach $85,000 in August?","slug":"will-bitcoin-reach-85k-in-august-2026","outcomes":[{"outcome":"Yes","price":0.0005},{"outcome":"No","price":0.9995}],"volume_usd":1674348.63,"volume_24h_usd":194808.39,"liquidity_usd":122917.85,"end_date":"2026-09-01T04:00:00Z","category":"Crypto","active":true,"closed":false,"url":"https://polymarket.com/market/will-bitcoin-reach-85k-in-august-2026"}],"cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/prediction/market":{"get":{"operationId":"getPredictionMarket","summary":"Full detail for ONE Polymarket prediction market by id or slug","tags":["prediction"],"description":"Full detail for ONE Polymarket prediction market by id or slug — question, description, every outcome with its current price (implied probability), volume, liquidity, open/close dates, resolution source, category, and status. No API key. The drill-in companion to /prediction/markets (browse/search): find a market there, then pull its full state here. Pass id or slug as query (GET) or a JSON body (POST).","parameters":[{"name":"id","in":"query","required":false,"description":"Numeric Polymarket market id, e.g. \"665374\". Aliases: market_id, market. Wins over slug","schema":{"type":"string"}},{"name":"slug","in":"query","required":false,"description":"Market slug, e.g. \"will-the-us-invade-iran-before-2027\" (last segment of a polymarket.com URL; a full URL works too). Alias: market_slug","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"source, id, question, slug, description, outcomes, volume_usd, volume_24h_usd, liquidity_usd, start_date, end_date, resolution_source, category, active, closed, url, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"question":{"type":"string"},"slug":{"type":["string","null"]},"description":{"type":["string","null"]},"outcomes":{"type":"array","description":"each {outcome, price}; price = IMPLIED PROBABILITY 0..1 (0.55 = 55% chance)"},"volume_usd":{"type":"number","description":"lifetime traded volume"},"volume_24h_usd":{"type":["number","null"]},"liquidity_usd":{"type":["number","null"]},"start_date":{"type":["string","null"]},"end_date":{"type":["string","null"],"description":"ISO 8601 resolution/close date"},"resolution_source":{"type":["string","null"],"description":"usually null — terms live in description"},"category":{"type":["string","null"],"description":"from Polymarket tags"},"active":{"type":"boolean"},"closed":{"type":"boolean","description":"true once resolved (active may still be true)"},"url":{"type":["string","null"]},"cache_age_seconds":{"type":"number","description":"0 = fresh; cached <=60s per market"},"findings":{"type":"array","description":"outcomes_unparseable, id_treated_as_slug, slug_extracted_from_url"}}},"example":{"source":"polymarket","id":"665374","question":"Will the U.S. invade Iran before 2027?","slug":"will-the-us-invade-iran-before-2027","description":"This market will resolve to \"Yes\" if the United States commences a military offensive intended to establish control over any portion of Iran by December 31, 2026, 11:59 PM ET. Otherwise, this market will resolve to \"No\".\n\nFor the purposes of this market, land de facto controlled by Iran or the United States as of November 4, 2025 12:00 PM ET, will be considered the sovereign territory of that country.\n\nThe resolution source for this market will be a consensus of credible sources.","outcomes":[{"outcome":"Yes","price":0.155},{"outcome":"No","price":0.845}],"volume_usd":63556874.05,"volume_24h_usd":284848.61,"liquidity_usd":664672.8,"start_date":"2025-11-05T17:52:17.414Z","end_date":"2027-01-01T04:59:00Z","resolution_source":null,"category":"Politics","active":true,"closed":false,"url":"https://polymarket.com/market/will-the-us-invade-iran-before-2027","cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postPredictionMarket","summary":"Full detail for ONE Polymarket prediction market by id or slug","tags":["prediction"],"description":"Full detail for ONE Polymarket prediction market by id or slug — question, description, every outcome with its current price (implied probability), volume, liquidity, open/close dates, resolution source, category, and status. No API key. The drill-in companion to /prediction/markets (browse/search): find a market there, then pull its full state here. Pass id or slug as query (GET) or a JSON body (POST).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Numeric Polymarket market id, e.g. \"665374\". Aliases: market_id, market. Wins over slug"},"slug":{"type":"string","description":"Market slug, e.g. \"will-the-us-invade-iran-before-2027\" (last segment of a polymarket.com URL; a full URL works too). Alias: market_slug"}}}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"source, id, question, slug, description, outcomes, volume_usd, volume_24h_usd, liquidity_usd, start_date, end_date, resolution_source, category, active, closed, url, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string"},"id":{"type":"string"},"question":{"type":"string"},"slug":{"type":["string","null"]},"description":{"type":["string","null"]},"outcomes":{"type":"array","description":"each {outcome, price}; price = IMPLIED PROBABILITY 0..1 (0.55 = 55% chance)"},"volume_usd":{"type":"number","description":"lifetime traded volume"},"volume_24h_usd":{"type":["number","null"]},"liquidity_usd":{"type":["number","null"]},"start_date":{"type":["string","null"]},"end_date":{"type":["string","null"],"description":"ISO 8601 resolution/close date"},"resolution_source":{"type":["string","null"],"description":"usually null — terms live in description"},"category":{"type":["string","null"],"description":"from Polymarket tags"},"active":{"type":"boolean"},"closed":{"type":"boolean","description":"true once resolved (active may still be true)"},"url":{"type":["string","null"]},"cache_age_seconds":{"type":"number","description":"0 = fresh; cached <=60s per market"},"findings":{"type":"array","description":"outcomes_unparseable, id_treated_as_slug, slug_extracted_from_url"}}},"example":{"source":"polymarket","id":"665374","question":"Will the U.S. invade Iran before 2027?","slug":"will-the-us-invade-iran-before-2027","description":"This market will resolve to \"Yes\" if the United States commences a military offensive intended to establish control over any portion of Iran by December 31, 2026, 11:59 PM ET. Otherwise, this market will resolve to \"No\".\n\nFor the purposes of this market, land de facto controlled by Iran or the United States as of November 4, 2025 12:00 PM ET, will be considered the sovereign territory of that country.\n\nThe resolution source for this market will be a consensus of credible sources.","outcomes":[{"outcome":"Yes","price":0.155},{"outcome":"No","price":0.845}],"volume_usd":63556874.05,"volume_24h_usd":284848.61,"liquidity_usd":664672.8,"start_date":"2025-11-05T17:52:17.414Z","end_date":"2027-01-01T04:59:00Z","resolution_source":null,"category":"Politics","active":true,"closed":false,"url":"https://polymarket.com/market/will-the-us-invade-iran-before-2027","cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/market/snapshot":{"get":{"operationId":"getMarketSnapshot","summary":"One-call market briefing for agents","tags":["market"],"description":"One-call market briefing for agents — BTC/ETH/SOL spot + 24h moves, major fiat crosses (USD/EUR, USD/GBP, USD/JPY, EUR/GBP), Base and Ethereum gas with USD transfer cost, and the crypto fear/greed index. Four sections fetched concurrently with graceful partial failure; any dead section is null with a finding, never a failed call. 60s cache; no API key.","parameters":[{"name":"symbols","in":"query","required":false,"description":"Optional override of the crypto list, up to 6 tickers or full names (default \"BTC,ETH,SOL\"). Aliases: coins, tickers","schema":{"type":"string"}},{"name":"vs","in":"query","required":false,"description":"Quote currency for the crypto section: USD (default), EUR or GBP. Aliases: currency, fiat, vs_currency","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"generated_at, vs, crypto, fiat, gas, sentiment, sections_ok, stale, cache_age_seconds, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"generated_at":{"type":"string"},"vs":{"type":"string"},"crypto":{"type":["array","null"],"items":{"type":"object","properties":{"symbol":{"type":"string"},"price":{"type":"number"},"change_24h_pct":{"type":["number","null"]},"high_24h":{"type":["number","null"]},"low_24h":{"type":["number","null"]},"source":{"type":"string","description":"coinbase | kraken | coingecko"}}}},"fiat":{"type":["array","null"],"items":{"type":"object","properties":{"pair":{"type":"string"},"rate":{"type":"number"},"rate_date":{"type":"string"}}}},"gas":{"type":["array","null"],"items":{"type":"object","properties":{"chain":{"type":"string"},"gas_price_gwei":{"type":"number"},"transfer_usd":{"type":["number","null"]}}}},"sentiment":{"type":["object","null"],"properties":{"value":{"type":"number"},"classification":{"type":"string"},"yesterday":{"type":["number","null"]}}},"sections_ok":{"type":"number"},"stale":{"type":"boolean"},"cache_age_seconds":{"type":"number"},"findings":{"type":"array"}}},"example":{"generated_at":"2026-08-01T18:56:18.102Z","vs":"USD","crypto":[{"symbol":"BTC","price":62445.13,"change_24h_pct":-0.9224,"high_24h":63093,"low_24h":62209.81,"source":"coinbase"},{"symbol":"ETH","price":1830.6,"change_24h_pct":-2.094,"high_24h":1873.8,"low_24h":1820.14,"source":"coinbase"},{"symbol":"SOL","price":70.84,"change_24h_pct":-2.972,"high_24h":73.19,"low_24h":70.51,"source":"coinbase"}],"fiat":[{"pair":"USD/EUR","rate":0.8707,"rate_date":"2026-07-31"},{"pair":"USD/GBP","rate":0.74508,"rate_date":"2026-07-31"},{"pair":"USD/JPY","rate":160.24,"rate_date":"2026-07-31"},{"pair":"EUR/GBP","rate":0.855725,"rate_date":"2026-07-31"}],"gas":[{"chain":"base","gas_price_gwei":0.006,"transfer_usd":0.000230535},{"chain":"ethereum","gas_price_gwei":0.119926866,"transfer_usd":0.0046079}],"sentiment":{"value":27,"classification":"Fear","yesterday":25},"sections_ok":4,"stale":false,"cache_age_seconds":0,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/convert":{"get":{"operationId":"getConvert","summary":"Convert any physical measurement","tags":["convert"],"description":"Convert any physical measurement — length, mass, volume, temperature, area, speed, pressure, energy, time, data storage & transfer rate, power, frequency, force, fuel economy (mpg/L per 100 km), angle. Auto-detects the category, handles US/imperial ambiguity, reports assumptions. Accepts natural-language queries (\"what is 5 km in miles\") and volume↔mass via density/substance. Deterministic and instant.","parameters":[{"name":"value","in":"query","required":false,"description":"Quantity to convert","schema":{"type":"number"}},{"name":"from","in":"query","required":false,"description":"Source unit, e.g. \"cups\", \"kg\", \"C\", \"miles\" — common aliases accepted (kilograms, °C, fl oz, …)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"Destination unit, e.g. \"fl_oz\", \"lb\", \"F\", \"km\" — must be in the same category as from","schema":{"type":"string"}},{"name":"query","in":"query","required":false,"description":"Alternative to value/from/to: one natural-language string, e.g. \"convert 73 liters to gallons\"","schema":{"type":"string"}},{"name":"system","in":"query","required":false,"description":"\"us\" or \"imperial\" — disambiguates volume units (cup, fl_oz, pint, quart, gallon), bare \"ton\" (us_ton vs imperial_ton), and bare \"mpg\". Default: us","schema":{"type":"string"}},{"name":"base","in":"query","required":false,"description":"\"decimal\" (1000) or \"binary\" (1024) for digital storage units. Default: decimal","schema":{"type":"string"}},{"name":"density","in":"query","required":false,"description":"For volume↔mass: density in kg per liter (= g/mL), e.g. 0.92","schema":{"type":"number"}},{"name":"substance","in":"query","required":false,"description":"For volume↔mass: substance whose nominal density to use (water, milk, gasoline, diesel, ethanol, olive_oil, honey, butter, flour, sugar, seawater)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"value, from, to, result, category, assumptions, precision_note, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"number"},"from":{"type":"string"},"to":{"type":"string"},"result":{"type":"number"},"category":{"type":"string"},"assumptions":{"type":"object","description":"Every default applied to resolve ambiguity: system (volume), oz_interpreted_as, base_used (digital)"},"precision_note":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"value":2,"from":"cups","to":"fl_oz","result":16,"category":"volume","assumptions":{"system":"us"},"precision_note":"rounded to 6 significant figures","score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/money/parse":{"post":{"operationId":"postMoneyParse","summary":"Normalize a money string to a decimal and ISO 4217 code","tags":["money"],"description":"Normalize any messy money string into a typed decimal amount plus ISO 4217 currency — handles symbols, locale separators ($1,234.56 vs €1.234,56), magnitude suffixes (1.2M), accounting notation, and natural-language amounts — so agents can clean money values before converting or storing them, with no external data and a deterministic fast path.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The money string to parse (e.g. \"$1,234.56\", \"€1.234,56\", \"USD 1.2M\"). Max 1000 characters."},"locale_hint":{"type":"string","description":"Optional BCP-47/ISO locale (e.g. \"de-DE\", \"en-US\") to disambiguate decimal vs grouping separators."},"default_currency":{"type":"string","description":"Optional ISO 4217 code to assume when no currency marker is present. Honored for ~50 common codes; unrecognized codes are ignored (currency stays null — never guessed)."},"allow_llm":{"type":"boolean","description":"Default true. When false, skip the natural-language LLM fallback (deterministic-only)."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"data, meta, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"},"meta":{"type":"object"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"data":{"parsed":true,"amount":1234.56,"currency":"USD","raw":"$1,234.56","reason":null},"meta":{"method":"deterministic","currency_ambiguous":true,"separator_assumed":"us","magnitude_applied":null,"sign_convention":"none","confidence":0.5,"used_llm":false},"score":90,"grade":"A","findings":[{"rule":"currency_ambiguous","detail":"Currency symbol/word maps to multiple ISO 4217 codes; resolution is best-effort"}]}}}},"402":{"description":"Payment Required"}}}},"/json/repair":{"post":{"operationId":"postJsonRepair","summary":"Repair malformed JSON into valid JSON","tags":["json"],"description":"Repair malformed JSON into valid JSON — fixes code fences, trailing commas, single quotes, unquoted keys, bad escapes, duplicate keys, truncation, and JSON buried in prose. A deterministic tokenizer runs first (no LLM cost), with an optional Haiku fallback, plus optional schema validation and type coercion — so agents can rescue broken model output or dirty data in one call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"string","description":"The malformed JSON, as a string. May include markdown code fences or surrounding prose. Max 100KB."},"schema":{"type":"object","description":"Optional. Validate the repaired JSON against this schema. Accepts a flat field→type map ({\"n\":\"number\"}) or a JSON-Schema-shaped object ({\"type\":\"object\",\"properties\":{...},\"required\":[...]}). Types: string, number, integer, boolean, object, array, null."},"allow_llm":{"type":"boolean","description":"Default true. When false, deterministic-only: if the tokenizer cannot fix the input, repair_succeeded is false (still a 200)."},"coerce":{"type":"boolean","description":"Default false. With a schema supplied, coerce values to the declared types where lossless (\"5\" → 5, \"yes\" → true)."}},"required":["input"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"was_valid, repair_succeeded, repaired, method, changes, schema_valid, validation_errors, confidence, warnings, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"was_valid":{"type":"boolean"},"repair_succeeded":{"type":"boolean"},"repaired":{"type":["object","array","null"]},"method":{"type":"string"},"changes":{"type":"array"},"schema_valid":{"type":["boolean","null"]},"validation_errors":{"type":"array"},"confidence":{"type":"number"},"warnings":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"was_valid":false,"repair_succeeded":true,"repaired":{"name":"acme","ports":[80,443]},"method":"deterministic","changes":["removed markdown code fences","converted 3 single-quoted strings to double-quoted","removed 2 trailing commas"],"schema_valid":null,"validation_errors":[],"confidence":1,"warnings":[],"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/schema/validate":{"post":{"operationId":"postSchemaValidate","summary":"Validate data against a supplied schema","tags":["schema"],"description":"Validate data against a supplied schema — checks required fields, nested objects, arrays, enums, string formats, numeric ranges, lengths, and additional-property rules deterministically, with optional type coercion and repair, returning precise errors with JSON paths so agents can verify structured data before acting on it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":["object","array","string"],"description":"The data to validate: an object, an array, or a JSON string (malformed strings are repaired first). Max 64KB."},"schema":{"type":"object","description":"JSON Schema ({\"type\":\"object\",\"properties\":{...},\"required\":[...]}) or a simplified field→type map ({\"age\":\"number\",\"email\":\"email\",\"tags\":\"string[]\",\"bio\":\"string?\"}). In the map form a field is required unless suffixed with '?'. Formats: email, url, date, date-time, uuid, ipv4, ipv6, hostname."},"coerce":{"type":"boolean","description":"Default false. Coerce values to the declared types where lossless (\"5\" → 5, \"yes\" → true)."},"repair":{"type":"boolean","description":"Default false. When invalid, also return a repaired copy of the data plus is_repaired_valid. Deterministic first (coercion, declared defaults, enum casing, strict extra-key removal)."},"allow_llm":{"type":"boolean","description":"Default true. Gates the LLM repair fallback only — validation itself is always deterministic."}},"required":["data","schema"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"valid, errors, error_count, repaired, is_repaired_valid, coerced, warnings, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean"},"errors":{"type":"array"},"error_count":{"type":"number"},"repaired":{"type":["object","array","null"]},"is_repaired_valid":{"type":["boolean","null"]},"coerced":{"type":"boolean"},"warnings":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"valid":false,"errors":[{"path":"$.email","message":"required field is missing","expected":"required","received":"undefined"},{"path":"$.age","message":"expected number, received string","expected":"number","received":"string"}],"error_count":2,"repaired":null,"is_repaired_valid":null,"coerced":false,"warnings":[],"score":100,"grade":"A","findings":[{"rule":"data_invalid","deduction":0,"detail":"Data does not satisfy the schema (2 errors)"}]}}}},"402":{"description":"Payment Required"}}}},"/schema/map":{"post":{"operationId":"postSchemaMap","summary":"Transform a source object into a target schema","tags":["schema"],"description":"Transform a source object into a target schema — matches fields by alias and structure deterministically, uses an LLM only for semantic mapping when needed, and supports mapping hints, transforms, and defaults, so agents can reshape data between systems with per-field confidence and a clear report of what mapped and what didn't.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"object","description":"The object to transform. Nested objects are addressed by dot path. Max 64KB / 200 fields."},"target_schema":{"type":"object","description":"Desired output shape. JSON Schema ({\"type\":\"object\",\"properties\":{...},\"required\":[...]}) or a field→type map ({\"full_name\":\"string\",\"price\":\"number\",\"bio\":\"string?\"}). In the map form a field is required unless suffixed with '?'."},"hints":{"type":"object","description":"Optional explicit mapping, keyed by target field: {\"full_name\":\"name\"} or {\"full_name\":[\"name\",\"contact\"]}. Hints outrank every automatic match."},"transforms":{"type":"object","description":"Optional per-target-field transform: {\"price\":\"toNumber\"}. One of: toNumber, toInteger, toString, toBoolean, toISO, toDate, trim, toLowerCase, toUpperCase, toArray."},"defaults":{"type":"object","description":"Optional value per target field to use when the source has no match: {\"currency\":\"USD\"}."},"mode":{"type":"string","description":"\"permissive\" (default): an unmapped target field is null + a warning. \"strict\": it is omitted from `mapped`. Either way an incomplete mapping is a 200 with missing_target listed, never an error."},"allow_llm":{"type":"boolean","description":"Default true. Gates semantic mapping. When false, fields the rules cannot match land in missing_target and no model is called."}},"required":["source","target_schema"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.040000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.040000","outputShape":"mapped, mapped_fields, unmapped_source, missing_target, type_conversions, schema_valid, warnings, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"mapped":{"type":"object"},"mapped_fields":{"type":"array"},"unmapped_source":{"type":"array"},"missing_target":{"type":"array"},"type_conversions":{"type":"array"},"schema_valid":{"type":"boolean"},"warnings":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"mapped":{"full_name":"Jane Doe","price":19.99},"mapped_fields":[{"target":"full_name","source":"name","method":"alias","confidence":1},{"target":"price","source":"cost","method":"alias","confidence":1}],"unmapped_source":["internal_id"],"missing_target":[],"type_conversions":[{"field":"price","from":"string","to":"number"}],"schema_valid":true,"warnings":[],"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/calendar/ics":{"post":{"operationId":"postCalendarIcs","summary":"Turn event fields into a valid RFC 5545 .ics calendar file","tags":["calendar"],"description":"Turn event fields into a valid RFC 5545 .ics calendar file — handles timed and all-day events, escaping, line folding, and a deterministic UID for idempotent re-import — so agents can publish events that import cleanly into Google, Apple, and Outlook calendars. Add ?download=1 (or Accept: text/calendar) to receive the raw .ics file with a Content-Disposition attachment header instead of the JSON envelope. Pure compute, no LLM.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Event summary (e.g. \"Team Offsite\"). Required."},"starts_at":{"type":"string","description":"ISO-8601 start. Use an offset/timestamp for timed events (e.g. 2026-06-27T09:00:00+02:00) or a bare date (YYYY-MM-DD) for all-day. Required."},"ends_at":{"type":"string","description":"Optional ISO-8601 end. Defaults: timed → start + 1 hour; all-day → start + 1 day (exclusive). For multi-day all-day events pass the inclusive last day."},"all_day":{"type":"boolean","description":"Optional. Inferred when omitted: a bare-date starts_at is all-day, a timestamp is timed."},"timezone":{"type":"string","description":"Optional IANA timezone (e.g. Europe/Paris). Timed events are converted to UTC and emitted with a Z suffix (no VTIMEZONE block). Unrecognized values are ignored (falls back to UTC)."},"location":{"type":"string","description":"Optional venue/address → LOCATION."},"description":{"type":"string","description":"Optional → DESCRIPTION."},"url":{"type":"string","description":"Optional → URL."},"organizer":{"type":"string","description":"Optional organizer name and/or email → ORGANIZER (CN=...)."}},"required":["title","starts_at"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"data, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"data":{"ics":"BEGIN:VCALENDAR\r\nVERSION:2.0\r\n...END:VCALENDAR\r\n","uid":"a1b2c3...@netintel.dev","all_day":false},"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/event-classify":{"post":{"operationId":"postEventClassify","summary":"Classify whether text describes a dateable event","tags":["event-classify"],"description":"Cheap, fast \"is this a dateable event?\" filter for social and web text — one tiny Haiku call returns is_event, confidence, and a one-line reason, so agents can screen every post for free-ish and only pay for full extraction on the ones that pass. Front-end filter to /event-extract; intentionally minimal output for cost/latency discipline.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Caption/post/snippet to classify. Required. Max 10000 words or 50KB."},"posted_at":{"type":"string","description":"Optional ISO-8601 timestamp the content was posted — lets the classifier reject past-event recaps (an event whose only date is in the past relative to posted_at is not dateable)."},"timezone":{"type":"string","description":"Optional IANA timezone (e.g. America/Los_Angeles) for date context."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.020000","outputShape":"data, meta, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Minimal verdict: is_event (boolean), confidence (0-1), reason (one short line)."},"meta":{"type":"object"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"data":{"is_event":true,"confidence":0.93,"reason":"specific dated event"},"meta":{"model":"haiku-4.5"},"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/event-extract":{"post":{"operationId":"postEventExtract","summary":"Event extraction / event parsing","tags":["event-extract"],"description":"Event extraction / event parsing — turn any caption, announcement, listing, or page text into a normalized calendar event via Claude Haiku. Resolves relative dates (\"this Saturday 7pm\") against post time + timezone, handles all-day/multi-day, and returns title, start/end, venue, address, city, price, organizer, url. Purpose-built for structured event data (no schema to define); pairs with /event-classify and /calendar/ics.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Caption/announcement/page text to extract an event from. Required. Max 10000 words or 50KB."},"posted_at":{"type":"string","description":"Optional ISO-8601 timestamp the content was posted — the anchor for resolving relative dates (\"this Saturday\", \"tonight\"). Strongly recommended."},"timezone":{"type":"string","description":"Optional IANA timezone (e.g. America/Los_Angeles) to resolve times against. Inferred from city when absent."},"city":{"type":"string","description":"Optional city — helps timezone inference and venue/address disambiguation."}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"data, meta, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Normalized event (is_event, confidence, title, starts_at, ends_at, all_day, timezone, venue, address, city, price, url, organizer). For a non-event, is_event=false + reason and all event fields null."},"meta":{"type":"object"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"data":{"is_event":true,"confidence":0.9,"title":"Live Jazz Night","starts_at":"2026-06-27T19:00:00-07:00","ends_at":null,"all_day":false,"timezone":"America/Los_Angeles","venue":"The Echo","address":"1822 Sunset Blvd","city":"Los Angeles","price":"Free","url":null,"organizer":null},"meta":{"model":"haiku-4.5","date_resolved_from":"posted_at","date_before_posted":false},"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/tech-fingerprint/analyze":{"get":{"operationId":"getTechFingerprintAnalyze","summary":"Detect a site's technology stack from headers and HTML","tags":["tech-fingerprint"],"description":"Fetch a URL and detect the full technology stack from HTTP response headers, HTML meta tags, cookies, and script patterns — returns CMS, framework, CDN, server, analytics, and security tool detections so agents can profile any web target without a browser.","parameters":[{"name":"url","in":"query","required":true,"description":"URL to fingerprint (e.g. https://example.com); bare domains are accepted and get https:// prepended. Aliases also accepted: target, domain, host, site (query param or JSON body).","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"url, status_code, response_time_ms, detections, summary, security_headers_present, security_headers_missing, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"status_code":{"type":"number"},"response_time_ms":{"type":"number"},"detections":{"type":"array"},"summary":{"type":"object"},"security_headers_present":{"type":"array"},"security_headers_missing":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"url":"https://example.com","status_code":200,"response_time_ms":342,"detections":[{"name":"Cloudflare","category":"cdn","confidence":"high"},{"name":"WordPress","category":"cms","confidence":"high"}],"summary":{"server":"Nginx","cdn":"Cloudflare","cms":"WordPress","waf":"Cloudflare WAF","javascript_frameworks":["jQuery"],"analytics":["Google Analytics"]},"security_headers_present":["Strict-Transport-Security","X-Frame-Options"],"security_headers_missing":["Content-Security-Policy","X-Content-Type-Options","Referrer-Policy"],"score":68,"grade":"C","findings":[{"rule":"missing_csp","deduction":-20,"detail":"Content-Security-Policy header missing"}]}}}},"402":{"description":"Payment Required"}}}},"/breach-check/password":{"get":{"operationId":"getBreachCheckPassword","summary":"Check a password against HaveIBeenPwned breaches","tags":["breach-check"],"description":"Deprecated: sends the `password` in the URL, where it can be retained by edge logs, proxies and shell history. Use POST /breach-check/password and send it in the JSON body instead. This form still works and is still supported for existing callers.\n\nCheck if a password has appeared in known data breaches using the HaveIBeenPwned Pwned Passwords API with k-anonymity — the full password is never transmitted, only a 5-character SHA-1 hash prefix — returns breach count and a risk classification so agents can enforce password policies without storing or exposing credentials.","deprecated":true,"parameters":[{"name":"password","in":"query","required":true,"description":"Password to check against known data breaches (1-500 characters; sent as a query param but only a k-anonymity SHA-1 prefix leaves the server)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"breached, breach_count, risk_level, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"breached":{"type":"boolean"},"breach_count":{"type":"number"},"risk_level":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"breached":true,"breach_count":34521,"risk_level":"critical","score":0,"grade":"F","findings":[{"rule":"critical_breach","deduction":-100,"detail":"Password found 34521 times in known data breaches"}]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postBreachCheckPassword","summary":"Check a password against HaveIBeenPwned breaches","tags":["breach-check"],"description":"Check if a password has appeared in known data breaches using the HaveIBeenPwned Pwned Passwords API with k-anonymity — the full password is never transmitted, only a 5-character SHA-1 hash prefix — returns breach count and a risk classification so agents can enforce password policies without storing or exposing credentials.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"Password to check against known data breaches (1-500 characters; sent as a query param but only a k-anonymity SHA-1 prefix leaves the server)"}},"required":["password"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"breached, breach_count, risk_level, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"breached":{"type":"boolean"},"breach_count":{"type":"number"},"risk_level":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"breached":true,"breach_count":34521,"risk_level":"critical","score":0,"grade":"F","findings":[{"rule":"critical_breach","deduction":-100,"detail":"Password found 34521 times in known data breaches"}]}}}},"402":{"description":"Payment Required"}}}},"/domain-availability/check":{"get":{"operationId":"getDomainAvailabilityCheck","summary":"Check whether a domain is available to register","tags":["domain-availability"],"description":"Check if a domain name is available for registration by querying RDAP and DNS — pass a bare name (e.g. mybrand) to sweep it across 10 popular TLDs simultaneously, or a full domain (e.g. mybrand.com) to check that single domain — returns registration status, expiry date if registered, and available/taken TLD lists so agents can find the best domain for a brand or project.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name with or without TLD (e.g. mybrand or mybrand.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"name, results, available_tlds, taken_tlds, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"results":{"type":"array"},"available_tlds":{"type":"array"},"taken_tlds":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"name":"mybrand","results":[{"domain":"mybrand.com","available":false,"status":"registered","registrar":"GoDaddy LLC","expires_at":"2025-06-01T00:00:00Z","days_until_expiry":79,"expiring_soon":true},{"domain":"mybrand.io","available":true,"status":"available","registrar":null,"expires_at":null,"days_until_expiry":null,"expiring_soon":false}],"available_tlds":[".io",".co",".xyz"],"taken_tlds":[".com",".net",".org"],"score":70,"grade":"C","findings":[{"rule":"com_taken","deduction":-20,"detail":"mybrand.com is already registered"}]}}}},"402":{"description":"Payment Required"}}}},"/email-intel/analyze":{"get":{"operationId":"getEmailIntelAnalyze","summary":"Email verification & deliverability check","tags":["email-intel"],"description":"Email verification & deliverability check (email validator / verifier) — validate an address, detect disposable/temporary domains, flag role-based inboxes, confirm MX records exist, and return a trust/risk score so agents can qualify leads, clean lists, and gate signups without sending a single email.","parameters":[{"name":"email","in":"query","required":true,"description":"Email address to validate (e.g. john@gmail.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"email, domain, local_part, format_valid, mx_records_found, mx_records, is_disposable, is_role_based, is_free_provider, is_business_email, deliverability, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"domain":{"type":"string"},"local_part":{"type":"string"},"format_valid":{"type":"boolean"},"mx_records_found":{"type":"boolean"},"mx_records":{"type":"array","items":{"type":"string"}},"is_disposable":{"type":"boolean"},"is_role_based":{"type":"boolean"},"is_free_provider":{"type":"boolean"},"is_business_email":{"type":"boolean"},"deliverability":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"email":"john@gmail.com","domain":"gmail.com","local_part":"john","format_valid":true,"mx_records_found":true,"mx_records":["gmail-smtp-in.l.google.com","alt1.gmail-smtp-in.l.google.com"],"is_disposable":false,"is_role_based":false,"is_free_provider":true,"is_business_email":false,"deliverability":"risky","score":90,"grade":"A","findings":[{"rule":"is_free_provider","deduction":-10,"detail":"Domain is a free consumer email provider"}]}}}},"402":{"description":"Payment Required"}}}},"/email/verify":{"get":{"operationId":"getEmailVerify","summary":"Validate an email address","tags":["email"],"description":"Validate an email address — email verification before you send: syntax + MX + disposable/role/free-provider detection in one call, boolean-first (deliverable, safe_to_send) with a machine-readable reason. DNS-level check only — does not confirm the individual mailbox exists (no SMTP probe). For a scored trust report instead of a yes/no gate, see /email-intel/analyze.","parameters":[{"name":"email","in":"query","required":true,"description":"Email address to verify, 3-320 chars. Aliases: address, email_address, emailAddress, e, q, to","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.001000","outputShape":"email, deliverable, safe_to_send, result, reason, risk_flags, domain, format_valid, mx_found, mx_records, disposable, role_based, free_provider, smtp_checked"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"deliverable":{"type":"boolean"},"safe_to_send":{"type":"boolean"},"result":{"type":"string","description":"deliverable | risky | undeliverable"},"reason":{"type":"string"},"risk_flags":{"type":"array","items":{"type":"string"}},"domain":{"type":"string"},"format_valid":{"type":"boolean"},"mx_found":{"type":"boolean"},"mx_records":{"type":"array","items":{"type":"string"}},"disposable":{"type":"boolean"},"role_based":{"type":"boolean"},"free_provider":{"type":"boolean"},"smtp_checked":{"type":"boolean"}}},"example":{"email":"user@github.com","deliverable":true,"safe_to_send":true,"result":"deliverable","reason":"ok","risk_flags":[],"domain":"github.com","format_valid":true,"mx_found":true,"mx_records":["aspmx.l.google.com"],"disposable":false,"role_based":false,"free_provider":false,"smtp_checked":false}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postEmailVerify","summary":"Validate an email address","tags":["email"],"description":"Validate an email address — email verification before you send: syntax + MX + disposable/role/free-provider detection in one call, boolean-first (deliverable, safe_to_send) with a machine-readable reason. DNS-level check only — does not confirm the individual mailbox exists (no SMTP probe). For a scored trust report instead of a yes/no gate, see /email-intel/analyze.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email address to verify, 3-320 chars. Aliases: address, email_address, emailAddress, e, q, to"}},"required":["email"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.001000","outputShape":"email, deliverable, safe_to_send, result, reason, risk_flags, domain, format_valid, mx_found, mx_records, disposable, role_based, free_provider, smtp_checked"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"deliverable":{"type":"boolean"},"safe_to_send":{"type":"boolean"},"result":{"type":"string","description":"deliverable | risky | undeliverable"},"reason":{"type":"string"},"risk_flags":{"type":"array","items":{"type":"string"}},"domain":{"type":"string"},"format_valid":{"type":"boolean"},"mx_found":{"type":"boolean"},"mx_records":{"type":"array","items":{"type":"string"}},"disposable":{"type":"boolean"},"role_based":{"type":"boolean"},"free_provider":{"type":"boolean"},"smtp_checked":{"type":"boolean"}}},"example":{"email":"user@github.com","deliverable":true,"safe_to_send":true,"result":"deliverable","reason":"ok","risk_flags":[],"domain":"github.com","format_valid":true,"mx_found":true,"mx_records":["aspmx.l.google.com"],"disposable":false,"role_based":false,"free_provider":false,"smtp_checked":false}}}},"402":{"description":"Payment Required"}}}},"/lead/check":{"get":{"operationId":"getLeadCheck","summary":"Check a sales lead before outreach","tags":["lead"],"description":"Check a sales lead before outreach — one call verifies the email address (syntax, MX, disposable/role/free-provider), the company's email setup (SPF/DKIM/DMARC) and its domain age, and returns a verdict: yes, risky or no, with machine-readable reasons. Free personal mailboxes skip the company checks. DNS-level only — no SMTP mailbox probe.","parameters":[{"name":"email","in":"query","required":true,"description":"The lead's email address, 3-320 chars. Aliases: address, email_address, emailAddress, lead, e, q, to","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"email, verdict, safe_to_email, reasons, address, company, partial"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"verdict":{"type":"string","description":"yes | risky | no"},"safe_to_email":{"type":"boolean"},"reasons":{"type":"array","items":{"type":"object"},"description":"{code, detail}; codes: ok, invalid_format, no_mail_server, disposable_address, domain_not_resolving, role_address, personal_address, new_domain, no_email_authentication"},"address":{"type":"object"},"company":{"type":"object","description":"null for free personal mailboxes; sections may be {error}"},"partial":{"type":"boolean"}}},"example":{"email":"jane.doe@stripe.com","verdict":"yes","safe_to_email":true,"reasons":[{"code":"ok","detail":"address and company domain look legitimate"}],"address":{"format_valid":true,"mx_found":true,"mx_records":["aspmx.l.google.com","alt1.aspmx.l.google.com"],"disposable":false,"role_based":false,"free_provider":false,"business_email":true},"company":{"domain":"stripe.com","email_setup":{"resolves":true,"grade":"A","spf":true,"dkim":true,"dmarc":true,"dmarc_policy":"reject"},"domain_age":{"created_at":"1995-09-12T04:00:00Z","age_days":11358,"maturity":"established","source":"rdap"}},"partial":false,"smtp_checked":false}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postLeadCheck","summary":"Check a sales lead before outreach","tags":["lead"],"description":"Check a sales lead before outreach — one call verifies the email address (syntax, MX, disposable/role/free-provider), the company's email setup (SPF/DKIM/DMARC) and its domain age, and returns a verdict: yes, risky or no, with machine-readable reasons. Free personal mailboxes skip the company checks. DNS-level only — no SMTP mailbox probe.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"The lead's email address, 3-320 chars. Aliases: address, email_address, emailAddress, lead, e, q, to"}},"required":["email"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"email, verdict, safe_to_email, reasons, address, company, partial"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"verdict":{"type":"string","description":"yes | risky | no"},"safe_to_email":{"type":"boolean"},"reasons":{"type":"array","items":{"type":"object"},"description":"{code, detail}; codes: ok, invalid_format, no_mail_server, disposable_address, domain_not_resolving, role_address, personal_address, new_domain, no_email_authentication"},"address":{"type":"object"},"company":{"type":"object","description":"null for free personal mailboxes; sections may be {error}"},"partial":{"type":"boolean"}}},"example":{"email":"jane.doe@stripe.com","verdict":"yes","safe_to_email":true,"reasons":[{"code":"ok","detail":"address and company domain look legitimate"}],"address":{"format_valid":true,"mx_found":true,"mx_records":["aspmx.l.google.com","alt1.aspmx.l.google.com"],"disposable":false,"role_based":false,"free_provider":false,"business_email":true},"company":{"domain":"stripe.com","email_setup":{"resolves":true,"grade":"A","spf":true,"dkim":true,"dmarc":true,"dmarc_policy":"reject"},"domain_age":{"created_at":"1995-09-12T04:00:00Z","age_days":11358,"maturity":"established","source":"rdap"}},"partial":false,"smtp_checked":false}}}},"402":{"description":"Payment Required"}}}},"/og-scraper/extract":{"get":{"operationId":"getOgScraperExtract","summary":"Fetch any public URL and extract structured metadata","tags":["og-scraper"],"description":"Fetch any public URL and extract structured metadata — Open Graph tags, Twitter Card tags, canonical URL, title, description, favicon, article author/date, JSON-LD structured data, and content type — so agents can preview, classify, and enrich links without building their own scraper.","parameters":[{"name":"url","in":"query","required":true,"description":"Public URL to extract metadata from (e.g. https://github.com/coinbase/x402)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"url, final_url, status_code, title, description, image, favicon, site_name, canonical_url, content_type, author, published_at, modified_at, twitter_card, json_ld, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"final_url":{"type":"string"},"status_code":{"type":"number"},"title":{"type":"string"},"description":{"type":["string","null"]},"image":{"type":["string","null"]},"favicon":{"type":["string","null"]},"site_name":{"type":["string","null"]},"canonical_url":{"type":["string","null"]},"content_type":{"type":"string"},"author":{"type":["string","null"]},"published_at":{"type":["string","null"]},"modified_at":{"type":["string","null"]},"twitter_card":{"type":["string","null"]},"json_ld":{"type":["object","null"]},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"url":"https://github.com/coinbase/x402","final_url":"https://github.com/coinbase/x402","status_code":200,"title":"GitHub - coinbase/x402: A payments protocol for the internet. Built on HTTP.","description":"A payments protocol for the internet. Built on HTTP. - coinbase/x402","image":"https://opengraph.githubassets.com/d86e2f3ce6d1051d325e229bc56ef07c81a8e75e7455c3d5b52de8a1031e6a51/coinbase/x402","favicon":"https://github.githubassets.com/favicons/favicon","site_name":"GitHub","canonical_url":"https://github.com/coinbase/x402","content_type":"object","author":null,"published_at":null,"modified_at":null,"twitter_card":"summary_large_image","json_ld":null,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/page-extract/read":{"get":{"operationId":"getPageExtractRead","summary":"Extract clean readable text from a web page","tags":["page-extract"],"description":"Fetch any article or web page and extract clean readable text stripped of navigation, ads, and boilerplate — returns the main content body, word count, estimated reading time, detected language, and key sentences so agents can read the web without a browser or third-party scraping service. For JS-rendered or bot-walled pages a plain fetch can't read, use /exa/contents.","parameters":[{"name":"url","in":"query","required":true,"description":"Public URL to extract content from (e.g. https://www.sitemaps.org/protocol.html)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"url, final_url, title, content, preview, word_count, reading_time_minutes, language, content_length_chars, status_code, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"final_url":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"preview":{"type":"array"},"word_count":{"type":"number"},"reading_time_minutes":{"type":"number"},"language":{"type":"string"},"content_length_chars":{"type":"number"},"status_code":{"type":"number"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"url":"https://www.sitemaps.org/protocol.html","final_url":"https://www.sitemaps.org/protocol.html","title":"sitemaps.org - Protocol","content":"This document describes the XML schema for the Sitemap protocol.\n\nThe Sitemap protocol format consists of XML tags...","preview":["This document describes the XML schema for the Sitemap protocol.","The Sitemap protocol format consists of XML tags.","All data values in a Sitemap must be entity-escaped."],"word_count":2456,"reading_time_minutes":11,"language":"en","content_length_chars":18894,"status_code":200,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/web/extract":{"get":{"operationId":"getWebExtract","summary":"Extract web content from any page or PDF as clean Markdown","tags":["web"],"description":"Extract web content from any page or PDF as clean Markdown — web page text, HTML to Markdown for any URL: strips scripts, nav, ads, and boilerplate while preserving headings, links, lists, tables, code blocks, and blockquotes; extracts the text layer from PDFs. Returns Markdown body, title, word count, and a quality grade. Web reader for article and main content. For JS-rendered or bot-walled pages a plain fetch can't read, use /exa/contents.","parameters":[{"name":"url","in":"query","required":true,"description":"Public URL of an HTML page or PDF to extract (e.g. https://www.sitemaps.org/protocol.html)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"url, final_url, content_type, title, markdown, word_count, char_count, output_bytes, truncated, status_code, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"final_url":{"type":"string"},"content_type":{"type":"string","description":"article | pdf | other (non-HTML/PDF falls back to best-effort plain text)"},"title":{"type":"string"},"markdown":{"type":"string"},"word_count":{"type":"number"},"char_count":{"type":"number"},"output_bytes":{"type":"number"},"truncated":{"type":"boolean"},"status_code":{"type":"number"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"url":"https://www.sitemaps.org/protocol.html","final_url":"https://www.sitemaps.org/protocol.html","content_type":"article","title":"sitemaps.org - Protocol","markdown":"## Sitemaps XML format\n\nThis document describes the XML schema for the Sitemap protocol...","word_count":2707,"char_count":21619,"output_bytes":21619,"truncated":false,"status_code":200,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/phone-intel/analyze":{"get":{"operationId":"getPhoneIntelAnalyze","summary":"Validate a phone number and identify country and carrier","tags":["phone-intel"],"description":"Parse and validate any phone number in any format, identify its country and line type (mobile/landline/VOIP/toll-free/premium for NANP + UK numbers; other countries return line_type unknown), and return all standard format variants (E.164, international, national) — catches fictional/unassigned NANP numbers (555 area code, 555-01XX range) so agents can validate contacts and normalize phone data without a paid telecom API.","parameters":[{"name":"phone","in":"query","required":true,"description":"Phone number in any format (e.g. +1 555 867-5309). In query strings URL-encode a leading + as %2B — an unencoded + decodes to a space (tolerated: leading space+digits is re-interpreted as +).","schema":{"type":"string"}},{"name":"country_hint","in":"query","required":false,"description":"ISO 3166-1 alpha-2 country code hint when no dial code present (e.g. US)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"input, is_valid, e164, international, national, country_code, country, country_name, line_type, digit_count, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"input":{"type":"string"},"is_valid":{"type":"boolean"},"e164":{"type":"string"},"international":{"type":"string"},"national":{"type":"string"},"country_code":{"type":"string"},"country":{"type":"string"},"country_name":{"type":"string"},"line_type":{"type":"string"},"digit_count":{"type":"number"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"input":"+1 (555) 867-5309","is_valid":false,"e164":"+15558675309","international":"+1 555 867 5309","national":"(555) 867-5309","country_code":"1","country":"US","country_name":"United States","line_type":"mobile_or_landline","digit_count":11,"score":0,"grade":"F","findings":[{"rule":"unassigned_area_code","deduction":-100,"detail":"555 is not an assigned NANP area code — commonly used for fictional numbers"}]}}}},"402":{"description":"Payment Required"}}}},"/robots-txt/analyze":{"get":{"operationId":"getRobotsTxtAnalyze","summary":"Fetch and parse a domain's robots.txt file","tags":["robots-txt"],"description":"Fetch and parse a domain's robots.txt file — returns all crawl rules by user-agent, sitemap URLs, crawl delay settings, and checks whether a specific path is allowed or blocked for any bot — so agents can respect crawl policies and locate sitemaps before scraping.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name to fetch robots.txt from (e.g. example.com)","schema":{"type":"string"}},{"name":"path","in":"query","required":false,"description":"URL path to check permission for (e.g. /api/data)","schema":{"type":"string"}},{"name":"user_agent","in":"query","required":false,"description":"Bot name to check rules for (default: *)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"domain, robots_url, found, status_code, raw_content_preview, sitemaps, rules, path_check, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"robots_url":{"type":"string"},"found":{"type":"boolean"},"status_code":{"type":"number"},"raw_content_preview":{"type":"string"},"sitemaps":{"type":"array","items":{"type":"string"}},"rules":{"type":"array","items":{"type":"object"}},"path_check":{"type":"object"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"domain":"example.com","robots_url":"https://example.com/robots.txt","found":true,"status_code":200,"raw_content_preview":"User-agent: *\nDisallow: /private/\n...","sitemaps":["https://example.com/sitemap.xml"],"rules":[{"user_agent":"*","allow":["/public/"],"disallow":["/private/","/admin/"],"crawl_delay":null}],"path_check":{"path":"/private/page","user_agent":"*","allowed":false,"matched_rule":"Disallow: /private/","rule_type":"disallow"},"score":85,"grade":"B","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/rss-parser/fetch":{"get":{"operationId":"getRssParserFetch","summary":"Fetch and parse an RSS or Atom feed","tags":["rss-parser"],"description":"Fetch and parse any RSS 2.0 or Atom feed URL and return structured articles with title, link, description (truncated to 500 chars), author, publish date, and categories — so agents can monitor content sources, build news pipelines, and process any feed without building their own XML parser. A URL that isn't a parseable feed still returns 200 with feed_type:\"unknown\", empty items, and a parse_failed finding.","parameters":[{"name":"url","in":"query","required":true,"description":"Feed URL to fetch and parse (e.g. https://example.com/feed.xml)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of items to return (1-50, default 10)","schema":{"type":"integer"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"url, feed_type, feed, total_items_in_feed, items_returned, items, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"feed_type":{"type":"string"},"feed":{"type":"object"},"total_items_in_feed":{"type":"number"},"items_returned":{"type":"number"},"items":{"type":"array","items":{"type":"object"}},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"url":"https://example.com/feed.xml","feed_type":"rss2","feed":{"title":"Example Blog","description":"A blog about interesting things","site_url":"https://example.com","last_updated":"2024-03-10T08:00:00Z"},"total_items_in_feed":25,"items_returned":10,"items":[{"title":"Article Title","url":"https://example.com/article","description":"Short description or summary of the article...","author":"Jane Doe","published_at":"2024-03-10T08:00:00Z","categories":["technology","AI"],"has_full_content":true}],"score":90,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/username-check/lookup":{"get":{"operationId":"getUsernameCheckLookup","summary":"Check username availability across 20+ platforms","tags":["username-check"],"description":"Check username availability across 20+ social platforms and developer sites simultaneously — returns which platforms have a profile registered under that handle so agents can find people, verify identities, scout brand handles, or check name availability before registration.","parameters":[{"name":"username","in":"query","required":true,"description":"Username/handle to check (1-50 chars, alphanumeric + hyphens/underscores/dots)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"username, taken_count, available_count, unknown_count, results, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string"},"taken_count":{"type":"number"},"available_count":{"type":"number"},"unknown_count":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string"},"url":{"type":"string"},"status":{"type":"string","enum":["taken","available","unknown"]}}}},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"username":"johndoe","taken_count":8,"available_count":10,"unknown_count":4,"results":[{"platform":"GitHub","url":"https://github.com/johndoe","status":"taken"},{"platform":"npm","url":"https://www.npmjs.com/~johndoe","status":"available"},{"platform":"Instagram","url":"https://www.instagram.com/johndoe","status":"unknown"}],"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/wayback/lookup":{"get":{"operationId":"getWaybackLookup","summary":"Check the Wayback Machine for archived snapshots","tags":["wayback"],"description":"Query the Internet Archive Wayback Machine to check if a URL has ever been archived, get the closest snapshot to a given date, retrieve the most recent capture, and return archival history stats — so agents can access historical web content, verify past content claims, and recover deleted pages.","parameters":[{"name":"url","in":"query","required":true,"description":"URL to check in the Wayback Machine (e.g. https://example.com)","schema":{"type":"string"}},{"name":"timestamp","in":"query","required":false,"description":"Optional target date in YYYYMMDD or YYYYMMDDHHmmss format to find the closest snapshot","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"url, is_archived, snapshot, first_capture, last_capture, capture_count_estimate, timestamp_requested, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Echoed in normalized form (may gain a trailing slash)"},"is_archived":{"type":"boolean"},"snapshot":{"type":["object","null"]},"first_capture":{"type":["string","null"]},"last_capture":{"type":["string","null"]},"capture_count_estimate":{"type":"number"},"timestamp_requested":{"type":["string","null"]},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"url":"https://example.com","is_archived":true,"snapshot":{"url":"https://web.archive.org/web/20240115120000/https://example.com","timestamp":"20240115120000","formatted_date":"2024-01-15T12:00:00Z","status_code":"200"},"first_capture":"1996-12-02T00:00:00Z","last_capture":"2024-03-10T08:00:00Z","capture_count_estimate":5400,"timestamp_requested":null,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/domain-age/check":{"get":{"operationId":"getDomainAgeCheck","summary":"Determine a domain's age from registration and archives","tags":["domain-age"],"description":"Determine a domain's age from registration data and archival history — tries RDAP, then port-43 WHOIS, then a Wayback-based estimate (age_source: rdap | whois | wayback_estimate | null), returning creation date, age in years, first Wayback capture, archived snapshot count, and a maturity signal so agents can assess trustworthiness and detect freshly registered domains used for fraud or phishing — including .io and TLDs without public RDAP.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name to assess (e.g. example.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"domain, created_at, age_days, age_years, age_source, first_archived_at, archive_snapshot_estimate, registration_to_archive_gap_days, maturity, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"created_at":{"type":["string","null"]},"age_days":{"type":["number","null"]},"age_years":{"type":["number","null"]},"age_source":{"type":["string","null"],"description":"rdap | whois | wayback_estimate | null (undetermined)"},"first_archived_at":{"type":["string","null"]},"archive_snapshot_estimate":{"type":["number","null"]},"registration_to_archive_gap_days":{"type":["number","null"]},"maturity":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"domain":"example.com","created_at":"1995-08-14T04:00:00Z","age_days":11260,"age_years":30.8,"age_source":"rdap","first_archived_at":"1996-12-02T00:00:00Z","archive_snapshot_estimate":5400,"registration_to_archive_gap_days":476,"maturity":"established","score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/web/fetch":{"get":{"operationId":"getWebFetch","summary":"Fetch any URL and get the raw body back","tags":["web"],"description":"Fetch any URL and get the raw body back — JSON parsed, everything else as text — from safe server-side egress. For data APIs (ArcGIS, government/open-data portals, blob storage) that /web/extract's markdown conversion mangles. No API key, SSRF-guarded, billed only on a usable 2xx response. Pass url as ?url= (GET) or a JSON body (POST).","parameters":[{"name":"url","in":"query","required":true,"description":"Absolute http(s) URL to fetch (data API, open-data portal, blob file). Aliases: uri, target, link, u","schema":{"type":"string"}},{"name":"max_bytes","in":"query","required":false,"description":"Optional read cap in bytes (default 2000000, hard cap 5000000); longer bodies are truncated and flagged","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"url, final_url, status, content_type, bytes, truncated, json, text, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"final_url":{"type":"string","description":"after redirects"},"status":{"type":"number","description":"upstream HTTP status (2xx)"},"content_type":{"type":["string","null"],"description":"upstream media type"},"bytes":{"type":"number","description":"bytes returned (≤ max_bytes)"},"truncated":{"type":"boolean"},"json":{"type":["object","array","null"],"description":"parsed body when it is JSON"},"text":{"type":["string","null"],"description":"raw body when it is not JSON"},"findings":{"type":"array"}}},"example":{"url":"https://api.dexscreener.com/latest/dex/tokens/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","final_url":"https://api.dexscreener.com/latest/dex/tokens/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","status":200,"content_type":"application/json","bytes":25499,"truncated":false,"json":{"schemaVersion":"1.0.0","pairs":[{"chainId":"base","dexId":"quickswap","pairAddress":"0x5D0bC342178C8Fe2c2f9A9fcC9D52555C99936db","baseToken":{"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","name":"USD Coin","symbol":"USDC"},"quoteToken":{"address":"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA","name":"USD Base Coin","symbol":"USDbC"},"priceUsd":"1.00013"}]},"text":null,"findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postWebFetch","summary":"Fetch any URL and get the raw body back","tags":["web"],"description":"Fetch any URL and get the raw body back — JSON parsed, everything else as text — from safe server-side egress. For data APIs (ArcGIS, government/open-data portals, blob storage) that /web/extract's markdown conversion mangles. No API key, SSRF-guarded, billed only on a usable 2xx response. Pass url as ?url= (GET) or a JSON body (POST).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Absolute http(s) URL to fetch (data API, open-data portal, blob file). Aliases: uri, target, link, u"},"max_bytes":{"type":"number","description":"Optional read cap in bytes (default 2000000, hard cap 5000000); longer bodies are truncated and flagged"}},"required":["url"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"url, final_url, status, content_type, bytes, truncated, json, text, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"final_url":{"type":"string","description":"after redirects"},"status":{"type":"number","description":"upstream HTTP status (2xx)"},"content_type":{"type":["string","null"],"description":"upstream media type"},"bytes":{"type":"number","description":"bytes returned (≤ max_bytes)"},"truncated":{"type":"boolean"},"json":{"type":["object","array","null"],"description":"parsed body when it is JSON"},"text":{"type":["string","null"],"description":"raw body when it is not JSON"},"findings":{"type":"array"}}},"example":{"url":"https://api.dexscreener.com/latest/dex/tokens/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","final_url":"https://api.dexscreener.com/latest/dex/tokens/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","status":200,"content_type":"application/json","bytes":25499,"truncated":false,"json":{"schemaVersion":"1.0.0","pairs":[{"chainId":"base","dexId":"quickswap","pairAddress":"0x5D0bC342178C8Fe2c2f9A9fcC9D52555C99936db","baseToken":{"address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","name":"USD Coin","symbol":"USDC"},"quoteToken":{"address":"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA","name":"USD Base Coin","symbol":"USDbC"},"priceUsd":"1.00013"}]},"text":null,"findings":[]}}}},"402":{"description":"Payment Required"}}}},"/web/monitor":{"get":{"operationId":"getWebMonitor","summary":"Monitor a web page for changes","tags":["web"],"description":"Monitor a web page for changes — fetch a URL, compare it with your previous check and return changed true/false, the added and removed lines, the percent changed and the new content only when it changed. First call stores the baseline; repeat with the same watch_id from your cron. Works on HTML (readable text), JSON (canonical keys) and plain text; conditional GET; no API key.","parameters":[{"name":"url","in":"query","required":true,"description":"Absolute http(s) URL to monitor. Aliases: target, page, link","schema":{"type":"string"}},{"name":"watch_id","in":"query","required":false,"description":"Your job id (1-64 chars A-Za-z0-9_.:-); keeps watches apart when one wallet serves many agents","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"changed, change_pct, diff, summary"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"changed":{"type":["boolean","null"],"description":"null on the baseline call"},"change_pct":{"type":["number","null"]},"diff":{"type":["object","null"],"description":"added/removed lines with counts"},"summary":{"type":"string"}}},"example":{"changed":true,"change_pct":6.1,"diff":{"added":["Natural gas prices rose 4%"],"removed":["Natural gas prices fell 2%"],"added_count":1,"removed_count":1,"truncated":false},"summary":"changed: +1 / −1 lines (6.1%)"}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postWebMonitor","summary":"Monitor a web page for changes","tags":["web"],"description":"Monitor a web page for changes — fetch a URL, compare it with your previous check and return changed true/false, the added and removed lines, the percent changed and the new content only when it changed. First call stores the baseline; repeat with the same watch_id from your cron. Works on HTML (readable text), JSON (canonical keys) and plain text; conditional GET; no API key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Absolute http(s) URL to monitor. Aliases: target, page, link"},"watch_id":{"type":"string","description":"Your job id (1-64 chars A-Za-z0-9_.:-); keeps watches apart when one wallet serves many agents"}},"required":["url"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.003000","outputShape":"changed, change_pct, diff, summary"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"changed":{"type":["boolean","null"],"description":"null on the baseline call"},"change_pct":{"type":["number","null"]},"diff":{"type":["object","null"],"description":"added/removed lines with counts"},"summary":{"type":"string"}}},"example":{"changed":true,"change_pct":6.1,"diff":{"added":["Natural gas prices rose 4%"],"removed":["Natural gas prices fell 2%"],"added_count":1,"removed_count":1,"truncated":false},"summary":"changed: +1 / −1 lines (6.1%)"}}}},"402":{"description":"Payment Required"}}}},"/domain/watch":{"get":{"operationId":"getDomainWatch","summary":"Monitor a domain for changes","tags":["domain"],"description":"Monitor a domain for changes — DNS records, nameservers, MX, SPF and DMARC, TLS certificate and expiry, newly issued certificates in CT logs, registrar and expiration via RDAP, and the live site's redirect and title, compared with your previous check: changed true/false, field-level before/after and plain alerts (nameservers changed, cert expiring, new cert issued, DMARC removed). Repeat with the same watch_id.","parameters":[{"name":"domain","in":"query","required":true,"description":"Bare domain to monitor. Aliases: host, name, target","schema":{"type":"string"}},{"name":"watch_id","in":"query","required":false,"description":"Your job id (1-64 chars A-Za-z0-9_.:-); keeps watches apart when one wallet serves many agents","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"changed, alerts, summary"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"changed":{"type":["boolean","null"],"description":"null on the baseline call"},"alerts":{"type":"array","items":{"type":"object"}},"summary":{"type":"string"}}},"example":{"changed":true,"alerts":[{"code":"ns_changed","severity":"critical","detail":"nameservers changed"}],"summary":"1 change, 1 critical alert: ns_changed"}}}},"402":{"description":"Payment Required"}}}},"/exa/search":{"get":{"operationId":"getExaSearch","summary":"Exa neural web search for AI agents","tags":["exa"],"description":"Exa neural web search for AI agents — POST or GET a query, get ranked live results (title, url, published_date, author, score) with optional highlight snippets. Filter by category (news, research paper, github, company, pdf, and more), domain include/exclude, and publish date. For a direct answer use /exa/answer. No API key, pay per call on Base or Solana.","parameters":[{"name":"query","in":"query","required":true,"description":"Search query, 1-1000 chars. Aliases: q, search, prompt, text","schema":{"type":"string"}},{"name":"num_results","in":"query","required":false,"description":"1-10 results (default 10); >10 clamped. Aliases: numResults, limit, n, count","schema":{"type":"number"}},{"name":"type","in":"query","required":false,"description":"auto (default) | neural | keyword | fast","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"company | research paper | news | pdf | github | tweet | personal site | linkedin profile | financial report","schema":{"type":"string"}},{"name":"include_domains","in":"query","required":false,"description":"Up to 20 hostnames to restrict to","schema":{"type":"array","items":{"type":"string"}}},{"name":"start_published_date","in":"query","required":false,"description":"ISO 8601 date/datetime lower bound","schema":{"type":"string"}},{"name":"end_published_date","in":"query","required":false,"description":"ISO 8601 date/datetime upper bound","schema":{"type":"string"}},{"name":"snippets","in":"query","required":false,"description":"none (default) | highlights | text — clamps num_results to 2","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"query, search_type, num_results, results, provider, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"search_type":{"type":"string"},"num_results":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"title":{"type":["string","null"]},"url":{"type":"string"},"published_date":{"type":["string","null"]},"author":{"type":["string","null"]},"score":{"type":["number","null"]},"highlights":{"type":["array","null"]},"text":{"type":["string","null"]}}}},"provider":{"type":"string"},"findings":{"type":"array"}}},"example":{"query":"x402 payment protocol","search_type":"neural","num_results":5,"results":[{"title":"x402: an open standard for internet-native payments","url":"https://www.x402.org/","published_date":"2026-05-12T00:00:00.000Z","author":null,"score":0.41,"highlights":null,"text":null},{"title":"coinbase/x402: HTTP-native micropayments protocol","url":"https://github.com/coinbase/x402","published_date":"2025-05-06T00:00:00.000Z","author":null,"score":0.38,"highlights":null,"text":null}],"provider":"exa","findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postExaSearch","summary":"Exa neural web search for AI agents","tags":["exa"],"description":"Exa neural web search for AI agents — POST or GET a query, get ranked live results (title, url, published_date, author, score) with optional highlight snippets. Filter by category (news, research paper, github, company, pdf, and more), domain include/exclude, and publish date. For a direct answer use /exa/answer. No API key, pay per call on Base or Solana.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"Search query, 1-1000 chars. Aliases: q, search, prompt, text"},"num_results":{"type":"number","description":"1-10 results (default 10); >10 clamped. Aliases: numResults, limit, n, count"},"type":{"type":"string","description":"auto (default) | neural | keyword | fast"},"category":{"type":"string","description":"company | research paper | news | pdf | github | tweet | personal site | linkedin profile | financial report"},"include_domains":{"type":"array","items":{"type":"string"},"description":"Up to 20 hostnames to restrict to"},"start_published_date":{"type":"string","description":"ISO 8601 date/datetime lower bound"},"end_published_date":{"type":"string","description":"ISO 8601 date/datetime upper bound"},"snippets":{"type":"string","description":"none (default) | highlights | text — clamps num_results to 2"}},"required":["query"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"query, search_type, num_results, results, provider, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"search_type":{"type":"string"},"num_results":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"title":{"type":["string","null"]},"url":{"type":"string"},"published_date":{"type":["string","null"]},"author":{"type":["string","null"]},"score":{"type":["number","null"]},"highlights":{"type":["array","null"]},"text":{"type":["string","null"]}}}},"provider":{"type":"string"},"findings":{"type":"array"}}},"example":{"query":"x402 payment protocol","search_type":"neural","num_results":5,"results":[{"title":"x402: an open standard for internet-native payments","url":"https://www.x402.org/","published_date":"2026-05-12T00:00:00.000Z","author":null,"score":0.41,"highlights":null,"text":null},{"title":"coinbase/x402: HTTP-native micropayments protocol","url":"https://github.com/coinbase/x402","published_date":"2025-05-06T00:00:00.000Z","author":null,"score":0.38,"highlights":null,"text":null}],"provider":"exa","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/web/search":{"get":{"operationId":"getWebSearch","summary":"Web search for AI agents","tags":["web"],"description":"Web search for AI agents — one query in, ranked live results out (title, url, published_date, author, score, optional snippets). Neural + keyword modes, category/domain/date filters. For a direct answer use /exa/answer. Keyless x402, pay per call on Base or Solana.","parameters":[{"name":"query","in":"query","required":true,"description":"Search query, 1-1000 chars. Aliases: q, search, prompt, text","schema":{"type":"string"}},{"name":"num_results","in":"query","required":false,"description":"1-10 results (default 10); >10 clamped. Aliases: numResults, limit, n, count","schema":{"type":"number"}},{"name":"type","in":"query","required":false,"description":"auto (default) | neural | keyword | fast","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"company | research paper | news | pdf | github | tweet | personal site | linkedin profile | financial report","schema":{"type":"string"}},{"name":"include_domains","in":"query","required":false,"description":"Up to 20 hostnames to restrict to","schema":{"type":"array","items":{"type":"string"}}},{"name":"start_published_date","in":"query","required":false,"description":"ISO 8601 date/datetime lower bound","schema":{"type":"string"}},{"name":"end_published_date","in":"query","required":false,"description":"ISO 8601 date/datetime upper bound","schema":{"type":"string"}},{"name":"snippets","in":"query","required":false,"description":"none (default) | highlights | text — clamps num_results to 2","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"query, search_type, num_results, results, provider, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"search_type":{"type":"string"},"num_results":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"title":{"type":["string","null"]},"url":{"type":"string"},"published_date":{"type":["string","null"]},"author":{"type":["string","null"]},"score":{"type":["number","null"]},"highlights":{"type":["array","null"]},"text":{"type":["string","null"]}}}},"provider":{"type":"string"},"findings":{"type":"array"}}},"example":{"query":"x402 payment protocol","search_type":"neural","num_results":5,"results":[{"title":"x402: an open standard for internet-native payments","url":"https://www.x402.org/","published_date":"2026-05-12T00:00:00.000Z","author":null,"score":0.41,"highlights":null,"text":null},{"title":"coinbase/x402: HTTP-native micropayments protocol","url":"https://github.com/coinbase/x402","published_date":"2025-05-06T00:00:00.000Z","author":null,"score":0.38,"highlights":null,"text":null}],"provider":"exa","findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postWebSearch","summary":"Web search for AI agents","tags":["web"],"description":"Web search for AI agents — one query in, ranked live results out (title, url, published_date, author, score, optional snippets). Neural + keyword modes, category/domain/date filters. For a direct answer use /exa/answer. Keyless x402, pay per call on Base or Solana.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"Search query, 1-1000 chars. Aliases: q, search, prompt, text"},"num_results":{"type":"number","description":"1-10 results (default 10); >10 clamped. Aliases: numResults, limit, n, count"},"type":{"type":"string","description":"auto (default) | neural | keyword | fast"},"category":{"type":"string","description":"company | research paper | news | pdf | github | tweet | personal site | linkedin profile | financial report"},"include_domains":{"type":"array","items":{"type":"string"},"description":"Up to 20 hostnames to restrict to"},"start_published_date":{"type":"string","description":"ISO 8601 date/datetime lower bound"},"end_published_date":{"type":"string","description":"ISO 8601 date/datetime upper bound"},"snippets":{"type":"string","description":"none (default) | highlights | text — clamps num_results to 2"}},"required":["query"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"query, search_type, num_results, results, provider, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"search_type":{"type":"string"},"num_results":{"type":"number"},"results":{"type":"array","items":{"type":"object","properties":{"title":{"type":["string","null"]},"url":{"type":"string"},"published_date":{"type":["string","null"]},"author":{"type":["string","null"]},"score":{"type":["number","null"]},"highlights":{"type":["array","null"]},"text":{"type":["string","null"]}}}},"provider":{"type":"string"},"findings":{"type":"array"}}},"example":{"query":"x402 payment protocol","search_type":"neural","num_results":5,"results":[{"title":"x402: an open standard for internet-native payments","url":"https://www.x402.org/","published_date":"2026-05-12T00:00:00.000Z","author":null,"score":0.41,"highlights":null,"text":null},{"title":"coinbase/x402: HTTP-native micropayments protocol","url":"https://github.com/coinbase/x402","published_date":"2025-05-06T00:00:00.000Z","author":null,"score":0.38,"highlights":null,"text":null}],"provider":"exa","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/exa/contents":{"get":{"operationId":"getExaContents","summary":"Fetch clean page text for up to 3 URLs via Exa","tags":["exa"],"description":"Clean page text for up to 3 URLs in one call via Exa's index + live crawl — works on JS-rendered and bot-walled pages that direct fetch can't read. Returns title, author, published_date and text per URL, with per-URL status. Pairs with /exa/search (search → contents). No API key, pay per call on Base or Solana.","parameters":[{"name":"urls","in":"query","required":true,"description":"1-3 absolute http(s) URLs. Aliases: url (single string), links, targets","schema":{"type":"array","items":{"type":"string"}}},{"name":"max_characters","in":"query","required":false,"description":"Per-page character cap, 200-20000 (default 4000). Aliases: maxCharacters, max_chars, limit","schema":{"type":"number"}},{"name":"livecrawl","in":"query","required":false,"description":"fallback (default) | always | never | preferred. Alias: live","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"results, requested, succeeded, provider, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"status":{"type":"string"},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"published_date":{"type":["string","null"]},"text":{"type":["string","null"]},"char_count":{"type":"number"},"truncated":{"type":"boolean"},"error":{"type":["string","null"]}}}},"requested":{"type":"number"},"succeeded":{"type":"number"},"provider":{"type":"string"},"findings":{"type":"array"}}},"example":{"results":[{"url":"https://www.x402.org/","status":"success","title":"x402 — internet-native payments","author":null,"published_date":null,"text":"x402 is an open standard for internet-native payments…","char_count":1872,"truncated":false,"error":null}],"requested":1,"succeeded":1,"provider":"exa","findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postExaContents","summary":"Fetch clean page text for up to 3 URLs via Exa","tags":["exa"],"description":"Clean page text for up to 3 URLs in one call via Exa's index + live crawl — works on JS-rendered and bot-walled pages that direct fetch can't read. Returns title, author, published_date and text per URL, with per-URL status. Pairs with /exa/search (search → contents). No API key, pay per call on Base or Solana.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"1-3 absolute http(s) URLs. Aliases: url (single string), links, targets"},"max_characters":{"type":"number","description":"Per-page character cap, 200-20000 (default 4000). Aliases: maxCharacters, max_chars, limit"},"livecrawl":{"type":"string","description":"fallback (default) | always | never | preferred. Alias: live"}},"required":["urls"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"results, requested, succeeded, provider, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"status":{"type":"string"},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"published_date":{"type":["string","null"]},"text":{"type":["string","null"]},"char_count":{"type":"number"},"truncated":{"type":"boolean"},"error":{"type":["string","null"]}}}},"requested":{"type":"number"},"succeeded":{"type":"number"},"provider":{"type":"string"},"findings":{"type":"array"}}},"example":{"results":[{"url":"https://www.x402.org/","status":"success","title":"x402 — internet-native payments","author":null,"published_date":null,"text":"x402 is an open standard for internet-native payments…","char_count":1872,"truncated":false,"error":null}],"requested":1,"succeeded":1,"provider":"exa","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/exa/answer":{"get":{"operationId":"getExaAnswer","summary":"Answer a question grounded in a live web search","tags":["exa"],"description":"Ask a question, get a direct answer grounded in a live web search, with numbered citations (title, url, published_date). One call replaces search + read + summarize. For ranked results instead of a synthesized answer use /exa/search. Keyless x402, pay per call on Base or Solana.","parameters":[{"name":"query","in":"query","required":true,"description":"Question, 3-1000 chars. Aliases: q, question, prompt, text","schema":{"type":"string"}},{"name":"include_citation_text","in":"query","required":false,"description":"Include each citation's source text (default false); truncated to 800 chars when >5 citations. Aliases: text, with_text","schema":{"type":"boolean"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"query, answer, citations, citation_count, provider, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"answer":{"type":"string"},"citations":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"title":{"type":["string","null"]},"url":{"type":"string"},"published_date":{"type":["string","null"]},"author":{"type":["string","null"]},"text":{"type":["string","null"]}}}},"citation_count":{"type":"number"},"provider":{"type":"string"},"findings":{"type":"array"}}},"example":{"query":"What is the x402 payment protocol?","answer":"x402 is an open standard that uses the HTTP 402 status code to let clients pay for resources with stablecoins… [1][2]","citations":[{"index":1,"title":"x402 — internet-native payments","url":"https://www.x402.org/","published_date":null,"author":null,"text":null}],"citation_count":1,"provider":"exa","findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postExaAnswer","summary":"Answer a question grounded in a live web search","tags":["exa"],"description":"Ask a question, get a direct answer grounded in a live web search, with numbered citations (title, url, published_date). One call replaces search + read + summarize. For ranked results instead of a synthesized answer use /exa/search. Keyless x402, pay per call on Base or Solana.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"Question, 3-1000 chars. Aliases: q, question, prompt, text"},"include_citation_text":{"type":"boolean","description":"Include each citation's source text (default false); truncated to 800 chars when >5 citations. Aliases: text, with_text"}},"required":["query"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"query, answer, citations, citation_count, provider, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"answer":{"type":"string"},"citations":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"title":{"type":["string","null"]},"url":{"type":"string"},"published_date":{"type":["string","null"]},"author":{"type":["string","null"]},"text":{"type":["string","null"]}}}},"citation_count":{"type":"number"},"provider":{"type":"string"},"findings":{"type":"array"}}},"example":{"query":"What is the x402 payment protocol?","answer":"x402 is an open standard that uses the HTTP 402 status code to let clients pay for resources with stablecoins… [1][2]","citations":[{"index":1,"title":"x402 — internet-native payments","url":"https://www.x402.org/","published_date":null,"author":null,"text":null}],"citation_count":1,"provider":"exa","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/github-intel/analyze":{"get":{"operationId":"getGithubIntelAnalyze","summary":"Fetch public metadata for any GitHub repository","tags":["github-intel"],"description":"Fetch public metadata for any GitHub repository — stars, forks, open issues, language breakdown, license, contributors, last commit date, topics, and an activity/health score — so agents can evaluate dependencies, research projects, and assess open source health without the GitHub API complexity. Pass repo as ?repo=owner/repo (GET) or {\"repo\":\"owner/repo\"} (POST).","parameters":[{"name":"repo","in":"query","required":true,"description":"GitHub repository in owner/repo format or full GitHub URL","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"repo, url, description, homepage, stars, forks, watchers, open_issues, primary_language, languages, license, license_spdx, topics, created_at, last_pushed_at, days_since_last_push, is_archived, is_fork, parent_repo, default_branch, contributor_count, latest_release, latest_release_date, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"repo":{"type":"string"},"url":{"type":"string"},"description":{"type":["string","null"]},"homepage":{"type":["string","null"]},"stars":{"type":"number"},"forks":{"type":"number"},"watchers":{"type":"number"},"open_issues":{"type":"number"},"primary_language":{"type":["string","null"]},"languages":{"type":"object","description":"Language → bytes breakdown"},"license":{"type":["string","null"]},"license_spdx":{"type":["string","null"]},"topics":{"type":"array"},"created_at":{"type":"string"},"last_pushed_at":{"type":"string"},"days_since_last_push":{"type":"number"},"is_archived":{"type":"boolean"},"is_fork":{"type":"boolean"},"parent_repo":{"type":["string","null"]},"default_branch":{"type":"string"},"contributor_count":{"type":"number"},"latest_release":{"type":["string","null"]},"latest_release_date":{"type":["string","null"]},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"repo":"expressjs/express","url":"https://github.com/expressjs/express","description":"Fast, unopinionated, minimalist web framework for node.","homepage":"https://expressjs.com","stars":65000,"forks":15000,"watchers":65000,"open_issues":200,"primary_language":"JavaScript","languages":{"JavaScript":543210,"TypeScript":12345},"license":"MIT License","license_spdx":"MIT","topics":["nodejs","javascript","web","framework"],"created_at":"2009-06-26T18:56:01Z","last_pushed_at":"2024-03-10T08:00:00Z","days_since_last_push":12,"is_archived":false,"is_fork":false,"parent_repo":null,"default_branch":"master","contributor_count":100,"latest_release":"v4.18.3","latest_release_date":"2024-02-26T14:00:00Z","score":100,"grade":"A","findings":[{"rule":"active_development","deduction":0,"detail":"Pushed within last 180 days"}]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postGithubIntelAnalyze","summary":"Fetch public metadata for any GitHub repository","tags":["github-intel"],"description":"Fetch public metadata for any GitHub repository — stars, forks, open issues, language breakdown, license, contributors, last commit date, topics, and an activity/health score — so agents can evaluate dependencies, research projects, and assess open source health without the GitHub API complexity. Pass repo as ?repo=owner/repo (GET) or {\"repo\":\"owner/repo\"} (POST).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"repo":{"type":"string","description":"GitHub repository in owner/repo format or full GitHub URL"}},"required":["repo"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"repo, url, description, homepage, stars, forks, watchers, open_issues, primary_language, languages, license, license_spdx, topics, created_at, last_pushed_at, days_since_last_push, is_archived, is_fork, parent_repo, default_branch, contributor_count, latest_release, latest_release_date, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"repo":{"type":"string"},"url":{"type":"string"},"description":{"type":["string","null"]},"homepage":{"type":["string","null"]},"stars":{"type":"number"},"forks":{"type":"number"},"watchers":{"type":"number"},"open_issues":{"type":"number"},"primary_language":{"type":["string","null"]},"languages":{"type":"object","description":"Language → bytes breakdown"},"license":{"type":["string","null"]},"license_spdx":{"type":["string","null"]},"topics":{"type":"array"},"created_at":{"type":"string"},"last_pushed_at":{"type":"string"},"days_since_last_push":{"type":"number"},"is_archived":{"type":"boolean"},"is_fork":{"type":"boolean"},"parent_repo":{"type":["string","null"]},"default_branch":{"type":"string"},"contributor_count":{"type":"number"},"latest_release":{"type":["string","null"]},"latest_release_date":{"type":["string","null"]},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"repo":"expressjs/express","url":"https://github.com/expressjs/express","description":"Fast, unopinionated, minimalist web framework for node.","homepage":"https://expressjs.com","stars":65000,"forks":15000,"watchers":65000,"open_issues":200,"primary_language":"JavaScript","languages":{"JavaScript":543210,"TypeScript":12345},"license":"MIT License","license_spdx":"MIT","topics":["nodejs","javascript","web","framework"],"created_at":"2009-06-26T18:56:01Z","last_pushed_at":"2024-03-10T08:00:00Z","days_since_last_push":12,"is_archived":false,"is_fork":false,"parent_repo":null,"default_branch":"master","contributor_count":100,"latest_release":"v4.18.3","latest_release_date":"2024-02-26T14:00:00Z","score":100,"grade":"A","findings":[{"rule":"active_development","deduction":0,"detail":"Pushed within last 180 days"}]}}}},"402":{"description":"Payment Required"}}}},"/holidays/check":{"get":{"operationId":"getHolidaysCheck","summary":"Look up public holidays for a country and year","tags":["holidays"],"description":"Look up public holidays for any country and year, check whether a specific date is a holiday, and calculate the next business day — so agents can handle scheduling, SLA calculations, deadline setting, and date-aware workflows without hardcoding country-specific holiday rules.","parameters":[{"name":"country_code","in":"query","required":true,"description":"ISO 3166-1 alpha-2 country code (e.g. US, GB, DE)","schema":{"type":"string"}},{"name":"year","in":"query","required":false,"description":"4-digit year (default: current year, range 2000-2099)","schema":{"type":"integer"}},{"name":"date","in":"query","required":false,"description":"YYYY-MM-DD specific date to check — populates date_check with {date, is_holiday, is_weekend, is_business_day, holiday_name, next_business_day}; omitted → date_check is null","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"country_code, year, total_holidays, holidays, date_check, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"country_code":{"type":"string"},"year":{"type":"number"},"total_holidays":{"type":"number"},"holidays":{"type":"array"},"date_check":{"type":["object","null"]},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"country_code":"US","year":2026,"total_holidays":17,"holidays":[{"date":"2026-01-01","name":"New Year's Day","local_name":"New Year's Day","is_global":true,"types":["Public","Bank"]}],"date_check":{"date":"2026-07-03","is_holiday":true,"is_weekend":false,"is_business_day":false,"holiday_name":"Independence Day","next_business_day":"2026-07-06"},"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/ip-geo/locate":{"get":{"operationId":"getIpGeoLocate","summary":"IP geolocation lookup (geoip / IP location API)","tags":["ip-geo"],"description":"IP geolocation lookup (geoip / IP location API) — geolocate any IPv4 or IPv6 address to city, region, country, latitude/longitude, timezone, and ISP/ASN as structured JSON so agents can localize content and enrich user records without a paid geolocation subscription. For proxy/VPN/anonymizer or hosting/datacenter detection, use /ip-risk/score or /ip-reputation/analyze.","parameters":[{"name":"ip","in":"query","required":true,"description":"IPv4 or IPv6 address to geolocate (e.g. 8.8.8.8)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.002000","outputShape":"ip, country, country_code, region, region_name, city, zip, latitude, longitude, timezone, isp, organization, asn, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"country":{"type":["string","null"]},"country_code":{"type":["string","null"]},"region":{"type":["string","null"]},"region_name":{"type":["string","null"]},"city":{"type":["string","null"]},"zip":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"timezone":{"type":["string","null"]},"isp":{"type":["string","null"]},"organization":{"type":["string","null"]},"asn":{"type":["string","null"]},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","description":"Geo fields are null (score 40) when all upstream geo providers decline — retry later rather than treating as a hard failure"}}},"example":{"ip":"8.8.8.8","country":"United States","country_code":"US","region":"VA","region_name":"Virginia","city":"Ashburn","zip":"20149","latitude":39.0438,"longitude":-77.4874,"timezone":"America/New_York","isp":"Google LLC","organization":"Google LLC","asn":"AS15169","score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/jwt-inspector/decode":{"get":{"operationId":"getJwtInspectorDecode","summary":"Decode and inspect any JWT token","tags":["jwt-inspector"],"description":"Deprecated: sends the `token` in the URL, where it can be retained by edge logs, proxies and shell history. Use POST /jwt-inspector/decode and send it in the JSON body instead. This form still works and is still supported for existing callers.\n\nDecode and inspect any JWT token — extracts header algorithm, payload claims, expiry status, issued-at time, audience, issuer, and subject without requiring the secret — so agents can debug auth issues, check token expiry, and extract identity claims from tokens in pipelines.","deprecated":true,"parameters":[{"name":"token","in":"query","required":true,"description":"JWT token string (3 dot-separated segments); a 'Bearer ' prefix is stripped automatically","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"valid_structure, header, payload, is_expired, seconds_until_expiry, human_expiry, signature_hex, signature_present, security_flags, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"valid_structure":{"type":"boolean"},"header":{"type":"object"},"payload":{"type":"object"},"is_expired":{"type":["boolean","null"],"description":"null when the token has no exp claim"},"seconds_until_expiry":{"type":["number","null"]},"human_expiry":{"type":["string","null"]},"signature_hex":{"type":"string"},"signature_present":{"type":"boolean"},"security_flags":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"valid_structure":true,"header":{"algorithm":"HS256","token_type":"JWT","key_id":null},"payload":{"issuer":null,"subject":"1234567890","audience":null,"expires_at":null,"expires_at_unix":null,"issued_at":"2018-01-18T01:30:22.000Z","issued_at_unix":1516239022,"not_before":null,"jwt_id":null,"custom_claims":{"name":"John Doe"}},"is_expired":null,"seconds_until_expiry":null,"human_expiry":null,"signature_hex":"49f94ac7044948c78a285d904f87f0a4c7897f7e8f3a4eb2255fda750b2cc397","signature_present":true,"security_flags":["no_expiry"],"score":80,"grade":"B","findings":[{"rule":"no_expiry_claim","label":"No expiry claim","impact":-20,"detail":"JWT has no exp claim — token never expires"}]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postJwtInspectorDecode","summary":"Decode and inspect any JWT token","tags":["jwt-inspector"],"description":"Decode and inspect any JWT token — extracts header algorithm, payload claims, expiry status, issued-at time, audience, issuer, and subject without requiring the secret — so agents can debug auth issues, check token expiry, and extract identity claims from tokens in pipelines.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"JWT token string (3 dot-separated segments); a 'Bearer ' prefix is stripped automatically"}},"required":["token"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"valid_structure, header, payload, is_expired, seconds_until_expiry, human_expiry, signature_hex, signature_present, security_flags, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"valid_structure":{"type":"boolean"},"header":{"type":"object"},"payload":{"type":"object"},"is_expired":{"type":["boolean","null"],"description":"null when the token has no exp claim"},"seconds_until_expiry":{"type":["number","null"]},"human_expiry":{"type":["string","null"]},"signature_hex":{"type":"string"},"signature_present":{"type":"boolean"},"security_flags":{"type":"array"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"valid_structure":true,"header":{"algorithm":"HS256","token_type":"JWT","key_id":null},"payload":{"issuer":null,"subject":"1234567890","audience":null,"expires_at":null,"expires_at_unix":null,"issued_at":"2018-01-18T01:30:22.000Z","issued_at_unix":1516239022,"not_before":null,"jwt_id":null,"custom_claims":{"name":"John Doe"}},"is_expired":null,"seconds_until_expiry":null,"human_expiry":null,"signature_hex":"49f94ac7044948c78a285d904f87f0a4c7897f7e8f3a4eb2255fda750b2cc397","signature_present":true,"security_flags":["no_expiry"],"score":80,"grade":"B","findings":[{"rule":"no_expiry_claim","label":"No expiry claim","impact":-20,"detail":"JWT has no exp claim — token never expires"}]}}}},"402":{"description":"Payment Required"}}}},"/lang-detect/analyze":{"post":{"operationId":"postLangDetectAnalyze","summary":"Detect the language of a text input","tags":["lang-detect"],"description":"Detect the language of any text input using stopword-set matching and Unicode script analysis — returns the detected language, ISO code, a high/medium/low confidence level, and top alternative languages so agents can route multilingual content, trigger translation workflows, and classify text without a paid NLP API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Text to detect the language of (1-10000 characters)"}},"required":["text"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.005000","outputShape":"detected_language, language_code, confidence, script, is_multilingual, alternatives, text_length, word_count, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"detected_language":{"type":"string"},"language_code":{"type":"string"},"confidence":{"type":"string"},"script":{"type":"string"},"is_multilingual":{"type":"boolean"},"alternatives":{"type":"array"},"text_length":{"type":"number"},"word_count":{"type":"number"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"detected_language":"English","language_code":"en","confidence":"high","script":"Latin","is_multilingual":false,"alternatives":[{"language":"Polish","code":"pl","score":0.05},{"language":"Czech","code":"cs","score":0.05},{"language":"Portuguese","code":"pt","score":0.02}],"text_length":214,"word_count":41,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/npm-intel/analyze":{"get":{"operationId":"getNpmIntelAnalyze","summary":"Fetch metadata for any npm package","tags":["npm-intel"],"description":"Fetch metadata for any npm package — download counts, latest version, version count, dependency/devDependency counts, maintainers, repository URL, license, and a health score based on maintenance signals — so agents can evaluate dependencies, audit package ecosystems, and assess supply chain risk. (Returns counts, not the full version/dependency lists.)","parameters":[{"name":"package","in":"query","required":true,"description":"npm package name (e.g. express, @types/node)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"package, description, latest_version, total_versions, weekly_downloads, license, repository, homepage, keywords, maintainers, maintainer_count, dependency_count, dev_dependency_count, created_at, latest_published_at, days_since_last_publish, is_deprecated, deprecation_message, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"package":{"type":"string"},"description":{"type":["string","null"]},"latest_version":{"type":["string","null"]},"total_versions":{"type":"number"},"weekly_downloads":{"type":"number"},"license":{"type":["string","null"]},"repository":{"type":["string","null"]},"homepage":{"type":["string","null"]},"keywords":{"type":"array"},"maintainers":{"type":"array"},"maintainer_count":{"type":"number"},"dependency_count":{"type":"number"},"dev_dependency_count":{"type":"number"},"created_at":{"type":["string","null"]},"latest_published_at":{"type":["string","null"]},"days_since_last_publish":{"type":["number","null"]},"is_deprecated":{"type":"boolean"},"deprecation_message":{"type":["string","null"]},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"package":"express","description":"Fast, unopinionated, minimalist web framework","latest_version":"4.18.2","total_versions":265,"weekly_downloads":34521000,"license":"MIT","repository":"https://github.com/expressjs/express","homepage":"https://expressjs.com","keywords":["web","framework","http"],"maintainers":["dougwilson","wesleytodd"],"maintainer_count":2,"dependency_count":31,"dev_dependency_count":12,"created_at":"2010-05-22T00:00:00Z","latest_published_at":"2023-02-14T00:00:00Z","days_since_last_publish":390,"is_deprecated":false,"deprecation_message":null,"score":72,"grade":"C","findings":[{"rule":"stale_package","deduction":-15,"detail":"Last published 390 days ago"}]}}}},"402":{"description":"Payment Required"}}}},"/sitemap-parser/fetch":{"get":{"operationId":"getSitemapParserFetch","summary":"Fetch and parse any XML sitemap or sitemap index file","tags":["sitemap-parser"],"description":"Fetch and parse any XML sitemap or sitemap index file — returns URLs with their priority, change frequency, and last modified date, follows sitemap indexes one level deep (first 3 child sitemaps), and auto-discovers the sitemap from robots.txt or common paths when given a bare domain — so agents can enumerate site content for crawling, indexing, and SEO analysis.","parameters":[{"name":"url","in":"query","required":true,"description":"Sitemap URL or domain name to parse (e.g. https://example.com/sitemap.xml or example.com)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum number of URLs to return (1-1000, default 100)","schema":{"type":"integer"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"source_url, sitemap_type, total_urls, urls_returned, child_sitemaps_fetched, urls, stats, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"source_url":{"type":["string","null"],"description":"null when no sitemap was found/parseable (graceful 200 with grade F)"},"sitemap_type":{"type":["string","null"]},"total_urls":{"type":"number"},"urls_returned":{"type":"number"},"child_sitemaps_fetched":{"type":"number"},"urls":{"type":"array","items":{"type":"object"}},"stats":{"type":"object"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"source_url":"https://www.sitemaps.org/sitemap.xml","sitemap_type":"urlset","total_urls":847,"urls_returned":100,"child_sitemaps_fetched":0,"urls":[{"url":"https://www.sitemaps.org/protocol.html","last_modified":"2024-03-01T00:00:00Z","change_frequency":"weekly","priority":0.8}],"stats":{"newest_url_date":"2024-03-10T00:00:00Z","oldest_url_date":"2020-01-01T00:00:00Z","avg_priority":0.6,"has_lastmod":true,"has_priority":true,"has_changefreq":true},"score":88,"grade":"B","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/url-safety/check":{"get":{"operationId":"getUrlSafetyCheck","summary":"Check a URL against malware and phishing signals","tags":["url-safety"],"description":"Check a URL against URLhaus malware database and heuristic phishing pattern analysis — returns threat classification, malware family if known, threat confidence, and risk score so agents can screen links before following them or sharing them in automated workflows.","parameters":[{"name":"url","in":"query","required":true,"description":"URL to check for malware and phishing indicators (e.g. https://example.com/page)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"url, in_urlhaus, urlhaus_status, threat_type, malware_families, blacklisted_gsb, blacklisted_surbl, heuristic_flags, threat_classification, confidence, urlhaus_reference, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"in_urlhaus":{"type":"boolean"},"urlhaus_status":{"type":["string","null"]},"threat_type":{"type":["string","null"]},"malware_families":{"type":"array","items":{"type":"string"}},"blacklisted_gsb":{"type":"boolean"},"blacklisted_surbl":{"type":"boolean"},"heuristic_flags":{"type":"array","items":{"type":"string"}},"threat_classification":{"type":"string"},"confidence":{"type":"string"},"urlhaus_reference":{"type":["string","null"],"description":"URLhaus entry link when the URL is listed"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array"}}},"example":{"url":"https://example.com/page","in_urlhaus":false,"urlhaus_status":null,"threat_type":null,"malware_families":[],"blacklisted_gsb":false,"blacklisted_surbl":false,"urlhaus_reference":null,"heuristic_flags":[],"threat_classification":"clean","confidence":"none","score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/bulk-domain/check":{"post":{"operationId":"postBulkDomainCheck","summary":"Check availability of up to 50 domains in one call","tags":["bulk-domain"],"description":"Check availability of many domain names across multiple TLDs in a single call — submit up to 50 name/TLD combinations and get back per-domain registration status, registrar, and expiry concurrently, so agents can scan an entire naming shortlist or brand portfolio in one request instead of dozens. Caveat: when both RDAP and DNS are unreachable, status reads 'available' — re-check surprising availables on premium names.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"},"description":"1-50 domain names to check (alphanumeric + hyphens, 2-63 chars each), e.g. [\"acme\", \"acmehq\"]"},"tlds":{"type":"array","items":{"type":"string"},"description":"TLDs to check, with or without leading dot (default: [\".com\",\".net\",\".org\",\".io\",\".co\"]). Total names × tlds must not exceed 50."}},"required":["names"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.100000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.100000","outputShape":"total_checked, available_count, taken_count, names_available_all_tlds, results, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"total_checked":{"type":"number"},"available_count":{"type":"number"},"taken_count":{"type":"number"},"names_available_all_tlds":{"type":"array","items":{"type":"string"}},"results":{"type":"array","items":{"type":"object"}},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"total_checked":6,"available_count":2,"taken_count":4,"names_available_all_tlds":["acmehq"],"results":[{"domain":"acme.com","name":"acme","tld":"com","available":false,"status":"registered","registrar":"GoDaddy LLC","expires_at":"2025-06-01T00:00:00Z","days_until_expiry":79},{"domain":"acmehq.io","name":"acmehq","tld":"io","available":true,"status":"available","registrar":null,"expires_at":null,"days_until_expiry":null}],"score":65,"grade":"C","findings":[{"rule":"low_availability","deduction":-35,"detail":"Only 2 of 6 combinations available"}]}}}},"402":{"description":"Payment Required"}}}},"/domain-appraise/estimate":{"get":{"operationId":"getDomainAppraiseEstimate","summary":"Estimate a domain's market value tier","tags":["domain-appraise"],"description":"Estimate the market value tier of a domain name using transparent heuristics — length, TLD premium, dictionary-word presence, pronounceability, keyword value, and numeric/hyphen penalties — returns a value tier and 0-100 quality score so agents can triage domain portfolios and prioritize acquisitions without a paid appraisal service.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name to appraise (e.g. pay.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.030000","outputShape":"domain, name, tld, value_score, value_tier, factors, characteristics, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string"},"tld":{"type":"string"},"value_score":{"type":"number"},"value_tier":{"type":"string"},"factors":{"type":"array","items":{"type":"object"}},"characteristics":{"type":"object"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"domain":"pay.com","name":"pay","tld":"com","value_score":100,"value_tier":"premium","factors":[{"factor":"length","impact":35,"detail":"3-character name (ultra premium)"},{"factor":"tld","impact":25,"detail":".com TLD"},{"factor":"dictionary_word","impact":20,"detail":"Exact dictionary word"},{"factor":"keyword_category","impact":10,"detail":"Finance keyword: pay"}],"characteristics":{"length":3,"is_dictionary_word":true,"has_hyphen":false,"has_number":false,"pronounceable":true},"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/domain-report/analyze":{"get":{"operationId":"getDomainReportAnalyze","summary":"One call returns a complete intelligence profile for a domain","tags":["domain-report"],"description":"One call returns a complete intelligence profile for a domain — WHOIS registration, DNS records, SSL certificate, detected tech stack, and blacklist status — aggregated into a single risk-scored report so agents can fully vet a domain without orchestrating five separate lookups.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain name to profile (e.g. example.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.100000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.100000","outputShape":"domain, resolved_ip, overall_score, grade, risk_level, sections, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"resolved_ip":{"type":"string"},"overall_score":{"type":"number"},"grade":{"type":"string"},"risk_level":{"type":"string"},"sections":{"type":"object"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"domain":"example.com","resolved_ip":"93.184.216.34","overall_score":100,"grade":"A","risk_level":"low","sections":{"whois":{"available":true,"registrar":"MarkMonitor Inc.","created_at":"1995-08-14T04:00:00Z","expires_at":"2025-08-13T04:00:00Z","days_until_expiry":425,"status":["client transfer prohibited"]},"dns":{"available":true,"a_records":["93.184.216.34"],"mx_records":["mail.example.com"],"ns_records":["a.iana-servers.net","b.iana-servers.net"],"txt_records":["v=spf1 -all"]},"ssl":{"available":true,"issuer":"DigiCert Inc","valid_from":"2024-01-01T00:00:00Z","valid_to":"2025-01-01T00:00:00Z","days_until_expiry":200,"san_count":3},"tech":{"available":true,"server":"ECS","cdn":"Cloudflare","cms":null,"waf":"Cloudflare WAF"},"blacklist":{"available":true,"listed_count":0,"lists_checked":5,"listed_on":[]}},"findings":[{"rule":"section_ok","deduction":0,"detail":"All five checks completed"}]}}}},"402":{"description":"Payment Required"}}}},"/ip-risk/score":{"get":{"operationId":"getIpRiskScore","summary":"One call returns a complete risk profile for an IP address","tags":["ip-risk"],"description":"One call returns a complete risk profile for an IP address — geolocation, ASN/network owner, blacklist status across multiple DNSBLs, and proxy/VPN/hosting classification — aggregated into a single verdict so agents can make a block/allow decision without calling four separate IP endpoints.","parameters":[{"name":"ip","in":"query","required":true,"description":"IPv4 or IPv6 address to risk-score (private/reserved ranges are rejected; DNSBL blacklist checks are IPv4-only and are skipped for IPv6 with a blacklist_skipped_ipv6 finding)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.100000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.100000","outputShape":"ip, trust_score, risk_score, grade, recommendation, geo, network, blacklist, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"trust_score":{"type":"number","description":"0-100, higher = cleaner/safer"},"risk_score":{"type":"number","description":"deprecated alias of trust_score"},"grade":{"type":"string"},"recommendation":{"type":"string"},"geo":{"type":"object"},"network":{"type":"object"},"blacklist":{"type":"object"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"ip":"8.8.8.8","trust_score":80,"risk_score":80,"grade":"B","recommendation":"allow","geo":{"available":true,"country":"United States","country_code":"US","city":"Ashburn","timezone":"America/New_York","isp":"Google LLC","is_proxy":false,"is_hosting":true,"is_mobile":false},"network":{"available":true,"asn":"AS15169","organization":"Google LLC","classification":"cloud"},"blacklist":{"available":true,"listed_count":0,"lists_checked":8,"listed_on":[]},"findings":[{"rule":"is_cloud","deduction":-20,"detail":"IP belongs to known cloud provider (Google LLC)"}]}}}},"402":{"description":"Payment Required"}}}},"/name-gen/suggest":{"get":{"operationId":"getNameGenSuggest","summary":"Generate brandable product names from a keyword","tags":["name-gen"],"description":"Generate brandable startup/product names from a keyword using prefixes, suffixes, blends, and phonetic patterns, then check .com (or any TLD) availability for each via DNS — returns available names ranked by a brandability heuristic so agents can find a claimable brand without manual brainstorming plus one-by-one availability checks.","parameters":[{"name":"keyword","in":"query","required":true,"description":"Seed keyword to generate names from (2-20 alphanumeric chars, e.g. cloud)","schema":{"type":"string"}},{"name":"tld","in":"query","required":false,"description":"TLD to check availability against (default: com)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max names to generate and check (default: 25, max: 40)","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"keyword, tld, generated_count, available_count, suggestions, top_available, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"keyword":{"type":"string"},"tld":{"type":"string"},"generated_count":{"type":"number"},"available_count":{"type":"number"},"suggestions":{"type":"array","items":{"type":"object"}},"top_available":{"type":"array","items":{"type":"string"}},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"keyword":"cloud","tld":"com","generated_count":25,"available_count":9,"suggestions":[{"name":"cloudly","domain":"cloudly.com","available":true,"brandability":90,"pattern":"suffix"},{"name":"getcloud","domain":"getcloud.com","available":false,"brandability":80,"pattern":"prefix"}],"top_available":["cloudly.com","cloudkit.com","cloudflow.com"],"score":75,"grade":"B","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/tld-price/compare":{"get":{"operationId":"getTldPriceCompare","summary":"Compare registration and renewal pricing across TLDs","tags":["tld-price"],"description":"Reference registration/renewal/transfer pricing from a curated table of ~21 common TLDs — Mode A: price one TLD (typical register/renew/transfer cost + renewal-markup %); Mode B: price a name across all covered TLDs, sorted cheapest-first with cheapest/cheapest_premium picks. Reference prices, not live per-registrar quotes — for budgeting and spotting predatory renewal markups; TLDs outside the table return pricing:null.","parameters":[{"name":"tld","in":"query","required":false,"description":"A TLD with or without leading dot to compare registrar pricing for, e.g. .com (Mode A). Provide exactly one of tld or name.","schema":{"type":"string"}},{"name":"name","in":"query","required":false,"description":"A domain name without TLD to price across many TLDs, e.g. acme (Mode B). Provide exactly one of tld or name.","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.010000","outputShape":"mode, tld, name, pricing, renewal_markup_pct, predatory_renewal, cheapest, cheapest_premium, options, is_reference_pricing, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string"},"tld":{"type":"string"},"name":{"type":"string"},"pricing":{"type":["object","null"],"description":"null for TLDs outside the reference table (unknown_tld finding)"},"renewal_markup_pct":{"type":["number","null"]},"predatory_renewal":{"type":"boolean"},"cheapest":{"type":"object"},"cheapest_premium":{"type":"object"},"options":{"type":"array","items":{"type":"object"}},"is_reference_pricing":{"type":"boolean"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"mode":"tld","tld":"io","pricing":{"register":39.99,"renew":49.99,"transfer":39.99,"currency":"USD"},"renewal_markup_pct":25,"predatory_renewal":false,"is_reference_pricing":true,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/typosquat/scan":{"get":{"operationId":"getTyposquatScan","summary":"Find registered typo and look-alike domain variants","tags":["typosquat"],"description":"Generate common typo and look-alike variations of a domain and check which are already registered — catches character swaps, omissions, additions, homoglyphs, and alternate TLDs so agents can detect typosquatting and brand-impersonation domains targeting a company.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain to scan for typosquat look-alikes (e.g. google.com) — must include a TLD","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max variations to generate and check (default: 30, max: 50)","schema":{"type":"number"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.050000","outputShape":"domain, name, tld, variations_checked, registered_count, available_count, registered_lookalikes, available_variations, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string"},"tld":{"type":"string"},"variations_checked":{"type":"number"},"registered_count":{"type":"number"},"available_count":{"type":"number"},"registered_lookalikes":{"type":"array","items":{"type":"object"}},"available_variations":{"type":"array","items":{"type":"object"}},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"domain":"google.com","name":"google","tld":"com","variations_checked":10,"registered_count":10,"available_count":0,"registered_lookalikes":[{"domain":"g00gle.com","technique":"homoglyph","registered":true},{"domain":"gogle.com","technique":"omission","registered":true},{"domain":"google.net","technique":"alternate_tld","registered":true}],"available_variations":[],"score":35,"grade":"D","findings":[{"rule":"high_typosquat_exposure","deduction":-40,"detail":"10 of 10 look-alike domains are registered"},{"rule":"homoglyph_registered","deduction":-15,"detail":"A homoglyph look-alike domain is registered (highest phishing risk)"},{"rule":"alt_tld_registered","deduction":-10,"detail":"An alternate-TLD look-alike domain is registered"}]}}}},"402":{"description":"Payment Required"}}}},"/domain-due-diligence":{"get":{"operationId":"getDomainDueDiligence","summary":"Combine domain availability, appraisal and TLD pricing","tags":["domain-due-diligence"],"description":"One call combines domain availability, heuristic value appraisal, and TLD pricing into a single acquisition brief — tells an agent whether a name is available, what it's worth, and what it costs across TLDs, concurrently and with graceful partial-failure handling.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain to assess, including TLD (e.g. acme.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.200000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.200000","outputShape":"domain, name, tld, generated_at, sections, sections_ok, sections_failed, verdict, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string"},"tld":{"type":"string"},"generated_at":{"type":"string"},"sections":{"type":"object"},"sections_ok":{"type":"number"},"sections_failed":{"type":"number"},"verdict":{"type":"string","description":"available_strong | available_weak | taken_premium | taken_low | unknown"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"domain":"acme.com","name":"acme","tld":"com","generated_at":"2026-06-16T01:00:00Z","sections":{"availability":{"available":true,"is_available":false,"status":"registered","registrar":"GoDaddy LLC","expires_at":"2025-06-01T00:00:00Z"},"appraisal":{"available":true,"value_tier":"premium","value_score":95},"tld_pricing":{"available":true,"cheapest":{"domain":"acme.xyz","register":1.99},"cheapest_premium":{"domain":"acme.com","register":10.99}}},"sections_ok":3,"sections_failed":0,"verdict":"taken_premium","score":80,"grade":"B","findings":[{"rule":"not_available","deduction":-20,"detail":"acme.com is already registered"}]}}}},"402":{"description":"Payment Required"}}}},"/domain-report/full":{"get":{"operationId":"getDomainReportFull","summary":"One premium call returns a complete six-part domain profile","tags":["domain-report"],"description":"One premium call returns a complete six-part domain profile — DNS records, SSL certificate, WHOIS registration, cloud fingerprint, technology stack, and security headers — each section run concurrently with graceful partial-failure handling, so agents get an entire domain workup in a single request instead of orchestrating six.","parameters":[{"name":"domain","in":"query","required":true,"description":"Domain to profile, including TLD (e.g. example.com)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.250000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.250000","outputShape":"domain, generated_at, sections, sections_ok, sections_failed, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"generated_at":{"type":"string"},"sections":{"type":"object"},"sections_ok":{"type":"number"},"sections_failed":{"type":"number"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"domain":"example.com","generated_at":"2026-06-16T01:00:00Z","sections":{"dns":{"available":true,"a_records":["93.184.216.34"],"mx_records":["mail.example.com"],"ns_records":["a.iana-servers.net"],"txt_records":["v=spf1 -all"]},"ssl":{"available":true,"issuer":"DigiCert Inc","valid_to":"Feb 13 23:59:59 2027 GMT","days_until_expiry":200},"whois":{"available":true,"registrar":"MarkMonitor Inc.","created_at":"1995-08-14T04:00:00Z","expires_at":"2027-08-13T04:00:00Z","days_until_expiry":425},"cloud":{"available":true,"provider":"Cloudflare","cdn":"Cloudflare","dns_provider":"Cloudflare DNS","grade":"A"},"tech":{"available":true,"server":"Nginx","cdn":"Cloudflare","cms":null,"waf":"Cloudflare WAF"},"security_headers":{"available":true,"grade":"B","hsts":true,"csp":false}},"sections_ok":6,"sections_failed":0,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/domain/vendor-risk":{"post":{"operationId":"postDomainVendorRisk","summary":"Composite 0-100 trust/risk score for a domain in one call","tags":["domain"],"description":"Composite 0-100 trust/risk score for a domain in one call — blends domain age, SSL/TLS, DNS health, email auth (SPF/DKIM/DMARC), IP reputation, and certificate transparency into a single \"safe to do business with this domain?\" verdict with per-signal breakdown and actionable flags. Partial results never read as safe.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Bare domain, e.g. acme.com"}},"required":["domain"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.100000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.100000","outputShape":"domain, risk_score, risk_band, signals, flags, signals_unavailable, confidence, run_id, duration_ms, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"risk_score":{"type":"number"},"risk_band":{"type":"string"},"signals":{"type":"object"},"flags":{"type":"array","items":{"type":"string"}},"signals_unavailable":{"type":"array","items":{"type":"string"}},"confidence":{"type":"string"},"run_id":{"type":"string"},"duration_ms":{"type":"number"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"domain":"example.com","risk_score":69,"risk_band":"medium","signals":{"domain_age":{"score":100,"detail":"Registered 1995-08, 29.9 yrs"},"ssl":{"score":95,"detail":"Valid, TLSv1.3, expires in 210d"},"email_auth":{"score":12,"detail":"SPF missing, DMARC missing"}},"flags":["dmarc_missing","spf_missing"],"signals_unavailable":["dns","ip_reputation","cert_transparency"],"confidence":"partial","run_id":"b3f1c2a4-9d8e-4c7a-9f21-6e2d5a1b0c3d","duration_ms":1420,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/domain/vet":{"post":{"operationId":"postDomainVet","summary":"Vet and pick a domain in one call","tags":["domain"],"description":"Vet and pick a domain in one call — give candidate names, get back a ranked verdict on which to use and whether it's safe to build on: availability across TLDs, name quality, typosquat exposure, and a factual brand-collision check against similar existing names. Collapses the pick-a-brand-name funnel into one call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"candidates":{"type":"array","items":{"type":"string"},"description":"Bare domain names to vet, without a TLD (e.g. [\"satsdesk\", \"payloop\"])."},"tlds":{"type":"array","items":{"type":"string"}},"use_case":{"type":"string"},"deep_check_top_n":{"type":"number"}},"required":["candidates"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.200000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.200000","outputShape":"recommended, candidates, flags, signals_unavailable, run_id, duration_ms, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"recommended":{"type":"string"},"candidates":{"type":"array","items":{"type":"object"}},"flags":{"type":"array","items":{"type":"string"}},"signals_unavailable":{"type":"array","items":{"type":"string"}},"run_id":{"type":"string"},"duration_ms":{"type":"number"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"recommended":"satsdesk.com","candidates":[{"name":"satsdesk","preferred_domain":"satsdesk.com","availability":{"all_tlds_available":true,"taken":[],"brand_protected_registrar":false,"score":100,"source":"bulk-domain"},"appraisal":{"score":87,"tier":"strong","detail":"8 chars, pronounceable, no hyphens/numbers","source":"domain-appraise"},"typosquat":{"registered_lookalikes":3,"available_defensive":27,"risk":"low","source":"typosquat"},"brand_collision":{"available":true,"has_close_match":false,"similar_to":[],"confidence":"high","note":"Factual name-similarity signal only. Not a trademark search or legal clearance.","source":"domain-vet"},"verdict":"recommended"}],"flags":[],"signals_unavailable":[],"run_id":"7c1e2f9a-4b6d-4a2e-9f83-1d5c7b0a2e64","duration_ms":3400,"score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/email-report/full":{"get":{"operationId":"getEmailReportFull","summary":"One call combines domain email authentication","tags":["email-report"],"description":"Deprecated: sends the `password` in the URL, where it can be retained by edge logs, proxies and shell history. Use POST /email-report/full and send it in the JSON body instead. This form still works and is still supported for existing callers.\n\nOne call combines domain email authentication (SPF/DKIM/DMARC), email-address intelligence (deliverability, disposable/role detection), and an optional password breach check into a single email-trust report — each section run concurrently with graceful partial-failure handling — so agents can fully vet an email and its domain in one request.","deprecated":true,"parameters":[{"name":"email","in":"query","required":true,"description":"Email address to vet (e.g. user@example.com)","schema":{"type":"string"}},{"name":"password","in":"query","required":false,"description":"Optional password — if supplied, the breach section returns {breached, breach_count, risk_level} from a k-anonymity HIBP check; omitted → breach reports error:\"not_requested\"","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.150000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.150000","outputShape":"email, domain, generated_at, sections, sections_ok, sections_failed, trust_verdict, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"domain":{"type":"string"},"generated_at":{"type":"string"},"sections":{"type":"object"},"sections_ok":{"type":"number"},"sections_failed":{"type":"number"},"trust_verdict":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"email":"user@example.com","domain":"example.com","generated_at":"2026-06-16T01:00:00Z","sections":{"authentication":{"available":true,"spf":"pass","dkim":"present","dmarc":"p=reject"},"intelligence":{"available":true,"deliverability":"deliverable","is_disposable":false,"is_role_based":false,"is_free_provider":false},"breach":{"available":false,"error":"not_requested"}},"sections_ok":2,"sections_failed":0,"trust_verdict":"trusted","score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}},"post":{"operationId":"postEmailReportFull","summary":"One call combines domain email authentication","tags":["email-report"],"description":"One call combines domain email authentication (SPF/DKIM/DMARC), email-address intelligence (deliverability, disposable/role detection), and an optional password breach check into a single email-trust report — each section run concurrently with graceful partial-failure handling — so agents can fully vet an email and its domain in one request.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email address to vet (e.g. user@example.com)"},"password":{"type":"string","description":"Optional password — if supplied, the breach section returns {breached, breach_count, risk_level} from a k-anonymity HIBP check; omitted → breach reports error:\"not_requested\""}},"required":["email"]}}}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.150000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.150000","outputShape":"email, domain, generated_at, sections, sections_ok, sections_failed, trust_verdict, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"domain":{"type":"string"},"generated_at":{"type":"string"},"sections":{"type":"object"},"sections_ok":{"type":"number"},"sections_failed":{"type":"number"},"trust_verdict":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"email":"user@example.com","domain":"example.com","generated_at":"2026-06-16T01:00:00Z","sections":{"authentication":{"available":true,"spf":"pass","dkim":"present","dmarc":"p=reject"},"intelligence":{"available":true,"deliverability":"deliverable","is_disposable":false,"is_role_based":false,"is_free_provider":false},"breach":{"available":false,"error":"not_requested"}},"sections_ok":2,"sections_failed":0,"trust_verdict":"trusted","score":100,"grade":"A","findings":[]}}}},"402":{"description":"Payment Required"}}}},"/ip-report/full":{"get":{"operationId":"getIpReportFull","summary":"One premium call returns a complete five-part IP profile","tags":["ip-report"],"description":"One premium call returns a complete five-part IP profile — geolocation, ASN/network ownership, multi-DNSBL blacklist status, threat reputation, and an aggregate risk verdict — run concurrently with graceful partial-failure handling, so agents get a full IP workup and a block/allow decision in a single request.","parameters":[{"name":"ip","in":"query","required":true,"description":"IPv4 or IPv6 address to profile (private/reserved ranges are rejected; the blacklist section is IPv4-only and reports error:\"ipv4_only\" for IPv6 input)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.200000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.200000","outputShape":"ip, generated_at, sections, sections_ok, sections_failed, overall_recommendation, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"generated_at":{"type":"string"},"sections":{"type":"object"},"sections_ok":{"type":"number"},"sections_failed":{"type":"number"},"overall_recommendation":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"ip":"8.8.8.8","generated_at":"2026-06-16T01:00:00Z","sections":{"geo":{"available":true,"country":"United States","city":"Mountain View","timezone":"America/Los_Angeles","isp":"Google LLC"},"network":{"available":true,"asn":"AS15169","organization":"Google LLC","classification":"cloud"},"blacklist":{"available":true,"listed_count":0,"lists_checked":15,"listed_on":[]},"reputation":{"available":true,"abuse_confidence":0,"otx_pulses":0},"risk":{"available":true,"trust_score":80,"risk_score":80,"recommendation":"allow"}},"sections_ok":5,"sections_failed":0,"overall_recommendation":"allow","score":80,"grade":"B","findings":[{"rule":"is_proxy_or_hosting","deduction":-20,"detail":"Network classified as cloud infrastructure"}]}}}},"402":{"description":"Payment Required"}}}},"/url-safety/full":{"get":{"operationId":"getUrlSafetyFull","summary":"One call vets a URL end to end","tags":["url-safety"],"description":"One call vets a URL end to end — traces its full redirect chain, checks it against the URLhaus malware database plus phishing heuristics, audits its security headers, and inspects its SSL certificate — concurrent with graceful partial-failure handling, so agents get a complete safety verdict before following a link.","parameters":[{"name":"url","in":"query","required":true,"description":"URL to vet, including scheme (e.g. https://example.com/page)","schema":{"type":"string"}}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.150000"},"protocols":[{"x402":{}}]},"x-guidance":{"approvalRequirement":"APPROVAL_REQUIREMENT_NOT_REQUIRED","costObservedUsd":"0.150000","outputShape":"url, generated_at, sections, sections_ok, sections_failed, final_url, safety_verdict, score, grade, findings"},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"generated_at":{"type":"string"},"sections":{"type":"object"},"sections_ok":{"type":"number"},"sections_failed":{"type":"number"},"final_url":{"type":"string"},"safety_verdict":{"type":"string"},"score":{"type":"number"},"grade":{"type":"string"},"findings":{"type":"array","items":{"type":"object"}}}},"example":{"url":"https://example.com/page","generated_at":"2026-06-16T01:00:00Z","sections":{"redirects":{"available":true,"hops":1,"final_url":"https://www.example.com/page","open_redirect":false},"malware":{"available":true,"in_urlhaus":false,"threat_classification":"clean","heuristic_flags":[]},"security_headers":{"available":true,"present":["Strict-Transport-Security"],"missing":["Content-Security-Policy"]},"ssl":{"available":true,"valid":true,"issuer":"DigiCert Inc","days_until_expiry":200}},"sections_ok":4,"sections_failed":0,"final_url":"https://www.example.com/page","safety_verdict":"safe","score":100,"grade":"A","findings":[{"rule":"redirects_elsewhere","deduction":0,"detail":"URL redirects to a different final destination — consider re-checking final_url"}]}}}},"402":{"description":"Payment Required"}}}}}}