{"spec":"apis.json/1.0","name":"Straelo Relay","description":"Paid machine-discoverable API tools for agents.","baseUrl":"https://relay.straelo.com","apis":[{"id":"url-clean-content","name":"Clean Content","endpoint":"/url-clean-content","method":"POST","description":"Extract clean, boilerplate-free readable text from one known public HTTP(S) URL for LLM research or RAG ingestion; private, local, authenticated, paywalled, or blocked resources are not supported.\nUSE WHEN: agent already knows the URL and needs clean page text.\nDO NOT USE WHEN: agent needs web search, multi-page research, comparison, structured web workflow, or change detection.\nUSE web-intelligence FOR: those broader live-web operations.","tags":["content","extraction","web","text"],"price_usd":"0.005"},{"id":"email-validator-basic","name":"Email Validator BASIC","endpoint":"/email-validator/basic","method":"POST","description":"Validate email syntax, domain, and MX records for basic automated checks without SMTP mailbox verification; cannot prove a mailbox exists or can receive mail.\nUSE WHEN: agent needs inexpensive structural and mail-domain validation before using an email address.\nDO NOT USE WHEN: agent requires proof that a mailbox exists or can receive mail.","tags":["email","validation","dns","mx"],"price_usd":"0.005"},{"id":"search-read","name":"Search + Read","endpoint":"/search-read","method":"POST","description":"Search the live web and retrieve clean readable content from relevant pages in one paid request.","tags":["search","web","sources","research"],"price_usd":"0.020"},{"id":"research-answer","name":"Research Answer","endpoint":"/research-answer","method":"POST","description":"Answer a question using current web research by synthesizing evidence from multiple sources with cited URLs.","tags":["research","answers","sources","ai"],"price_usd":"0.025"},{"id":"web-intelligence","name":"STRAELO Web Intelligence","endpoint":"/web-intelligence","method":"POST","description":"Execute one live-web operation — search, read, extract, evidence, research, compare, or changes — in a single paid request without orchestrating multiple web APIs.\nUSE WHEN: agent needs a live web search, multi-page read, structured extraction, comparative research, evidence gathering, or web change detection.\nDO NOT USE WHEN: agent already has a single known URL and only needs its clean readable text; use url-clean-content instead.\nParameter semantics: supply `intent` plus only that intent's fields; without `intent`, supply legacy `topic` and `objective` together.","tags":["web","intelligence","research","agents"],"price_usd":"0.030"},{"id":"chain-contract-call","name":"Chain Contract Call","endpoint":"/chain-contract-call","method":"POST","description":"Execute one read-only EVM smart contract call on Ethereum or Base and return the normalized result without managing an RPC provider.\nUSE WHEN: agent needs one read-only smart-contract call on a supported chain.\nDO NOT USE WHEN: agent needs broader transaction, address, or contract investigation with evidence and context.\nUSE blockchain-intelligence FOR: broader deterministic inspection of a transaction, address, or contract.","tags":["evm","contract","rpc","read-only"],"price_usd":"0.005"},{"id":"transaction-intelligence","name":"Transaction Intelligence","endpoint":"/transaction-intelligence","method":"POST","description":"Retrieve a Base or Ethereum transaction and receipt in one paid request, with deterministic execution status, transaction classification, method selector, gas cost, logs count and raw RPC evidence.","tags":["blockchain","transaction","evm","base","ethereum","intelligence"],"price_usd":"0.005"},{"id":"blockchain-intelligence","name":"STRAELO Blockchain Intelligence","endpoint":"/blockchain-intelligence","method":"POST","description":"Inspect exactly one Base or Ethereum transaction, address, or contract with bounded read-only RPC calls and return deterministic context, observed signals, evidence, coverage, and recommended follow-up.\nUSE WHEN: agent needs broader deterministic investigation of a transaction hash, EVM address, or contract address.\nDO NOT USE WHEN: agent only needs a single read-only smart-contract call; use chain-contract-call instead.\nParameter semantics: `chain` is required; exactly one of `transaction_hash`, `address`, or `contract_address` must be provided.","tags":["blockchain","evm","transaction","contract","address"],"price_usd":"0.015"},{"id":"pay-decision-snapshot","name":"Pay Decision Snapshot","endpoint":"/pay-decision-snapshot","method":"POST","description":"Compare one supplied x402 v2 exact Base USDC payment requirement against declared intent and return deterministic consistency, mismatch, change, fingerprint, and coverage evidence without executing a payment.\nUSE WHEN: agent needs deterministic verification of a payment requirement before deciding whether to pay.\nDO NOT USE WHEN: agent expects this tool to execute the payment.\nParameter semantics: supply `intent` (seller, service, resource, plus optional expected fields) and `payment_required` (decoded x402 challenge); optional `previous_snapshot` enables stateless material-change detection against a prior result.","tags":["x402","payment","decision","consistency","usdc"],"price_usd":"0.025"},{"id":"defi-execution-snapshot","name":"STRAELO DeFi Execution Snapshot","endpoint":"/defi-execution-snapshot","method":"POST","description":"Compare read-only Base swap quotes from 1inch and KyberSwap, returning normalized comparable output, consensus, dispersion, quote evidence, and provider limitations without executing a swap.\nUSE WHEN: agent needs comparative swap-quote intelligence before executing a trade.\nDO NOT USE WHEN: agent wants actual swap or transaction execution.\nParameter semantics: `chain` is Base-only; `token_in`/`token_out` are symbols from USDC, USDT, ETH, WETH; `amount_in` is a positive decimal; `slippage_bps` is required (0-10000); optional `baseline_provider` selects oneinch or kyberswap for direct economic comparison.","tags":["defi","swap","quote","base","routing"],"price_usd":"0.020"},{"id":"search-extract","name":"Search + Extract","endpoint":"/search-extract","method":"POST","description":"Search the live web and extract requested structured fields from relevant pages in one request.","tags":["search","extraction","web","structured"],"price_usd":"0.025"},{"id":"search-evidence","name":"Search + Evidence","endpoint":"/search-evidence","method":"POST","description":"Search multiple live web sources and return structured factual claims with supporting evidence and source URLs.","tags":["search","evidence","facts","research"],"price_usd":"0.030"},{"id":"domain-intelligence","name":"STRAELO Domain Intelligence","endpoint":"/domain-intelligence","method":"POST","description":"Inspect consolidated domain health — DNS, HTTP, HTTPS, TLS, redirects, MX, SPF, DMARC, email posture, security posture, and agent readiness — returning structured issues, evidence, actions, and stateless changes.\nUSE WHEN: agent needs a comprehensive single-call domain inspection across DNS, web, email, security, and agent-readiness signals.\nDO NOT USE WHEN: agent only needs DNS records; narrower domain/DNS products are not exposed through MCP.\nParameter semantics: `domain` is required; optional `previous_state` enables stateless change detection against a prior `new_state`.","tags":["domain health","dns","tls","email posture","agent readiness"],"price_usd":"0.008"},{"id":"dns-intelligence","name":"DNS Intelligence","endpoint":"/dns-intelligence","method":"POST","description":"Inspect DNS records, mail configuration, SPF and DMARC for a public domain in one request.","tags":["dns","domain","spf","dmarc"],"price_usd":"0.003"},{"id":"domain-health","name":"Domain Health","endpoint":"/domain-health","method":"POST","description":"Check public domain DNS, HTTP, HTTPS, redirects, TLS certificate health and response latency in one request.","tags":["domain","dns","http","tls"],"price_usd":"0.005"},{"id":"competitor-switch-intelligence","name":"Competitor Switch Intelligence","endpoint":"/competitor-switch-intelligence","method":"POST","description":"Return existing STRAELO competitor-switch/replacement signals and prioritized leads for supported competitors (yotpo, judge.me); unsupported competitors return UNSUPPORTED_COMPETITOR with charged=false.\nUSE WHEN: agent needs competitor replacement/switch signals and prioritized leads for yotpo or judge.me.\nDO NOT USE WHEN: agent needs confirmed customer domains, vendor ADDED/REMOVED history, or technology detection on one domain.\nUSE installed-base-intelligence FOR: confirmed customer domains currently known for a technology/vendor.\nUSE change-intelligence FOR: durable ADDED/REMOVED changes for a vendor within a UTC time window.\nUSE technology-intelligence FOR: technologies detected on a public domain.","tags":["competitor-intelligence","switch","leads","prospecting","yotpo","judge.me"],"price_usd":"0.25"},{"id":"installed-base-intelligence","name":"STRAELO Installed Base Intelligence","endpoint":"/installed-base-intelligence","method":"POST","description":"Return confirmed customer domains currently known for a specified technology/vendor; STRAELO-confirmed coverage, not a complete global installed base.\nUSE WHEN: agent needs confirmed customer domains currently known for a specified technology/vendor.\nDO NOT USE WHEN: domain -> technologies; vendor + time -> ADDED/REMOVED; competitor switch/replacement signals.\nUSE technology-intelligence FOR: technologies detected on a public domain.\nUSE change-intelligence FOR: durable ADDED/REMOVED changes for a vendor within a UTC time window.\nUSE competitor-switch-intelligence FOR: competitor switch/replacement signals.","tags":["installed-base","intelligence","customers","vendor","technology"],"price_usd":"0.10"},{"id":"technology-intelligence","name":"STRAELO Technology Intelligence","endpoint":"/technology-intelligence","method":"POST","description":"Return technologies deterministically detected on one specified public domain; deterministic observations, not an exhaustive proof that no other technology exists.\nUSE WHEN: agent needs technologies currently detected on one specific public domain.\nDO NOT USE WHEN: vendor -> current confirmed customers; vendor + time -> ADDED/REMOVED; competitor replacement/switch signals.\nUSE installed-base-intelligence FOR: confirmed customer domains using a technology/vendor.\nUSE change-intelligence FOR: durable ADDED/REMOVED changes for a vendor within a UTC time window.\nUSE competitor-switch-intelligence FOR: competitor replacement/switch signals.","tags":["technology","intelligence","detection","domain","scanner"],"price_usd":"0.03"},{"id":"change-intelligence","name":"STRAELO Change Intelligence","endpoint":"/change-intelligence","method":"POST","description":"Return durable historical ADDED (ABSENT -> PRESENT) and REMOVED (PRESENT -> ABSENT) customer-domain changes for a vendor in a UTC time window; REMOVED does not prove contract cancellation and ADDED does not prove commercial purchase.\nUSE WHEN: agent needs durable historical ADDED/REMOVED customer-domain changes for a vendor in a UTC time window.\nDO NOT USE WHEN: current confirmed customer base; technologies on one domain; competitor replacement/switch inference.\nUSE installed-base-intelligence FOR: confirmed customer domains currently known for a technology/vendor.\nUSE technology-intelligence FOR: technologies detected on a public domain.\nUSE competitor-switch-intelligence FOR: competitor replacement/switch signals.","tags":["change","intelligence","ad","removal","vendor","technology","domain"],"price_usd":"0.10"}],"mcp":{"url":"https://relay.straelo.com/mcp","tools":[{"name":"url_clean_content","endpoint":"/url-clean-content","description":"Extract clean, boilerplate-free readable text from one known public HTTP(S) URL for LLM research or RAG ingestion; private, local, authenticated, paywalled, or blocked resources are not supported.\nUSE WHEN: agent already knows the URL and needs clean page text.\nDO NOT USE WHEN: agent needs web search, multi-page research, comparison, structured web workflow, or change detection.\nUSE web-intelligence FOR: those broader live-web operations.","input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public HTTP(S) page URL to fetch. Private, local, authenticated, paywalled, or blocked resources are not supported."}},"required":["url"]},"output_schema":{"type":"object","properties":{"url":{"type":"string","description":"Fetched page URL."},"title":{"type":["string","null"],"description":"Page title when available."},"text":{"type":"string","description":"Clean readable page text."},"metadata":{"type":"object","description":"Useful non-sensitive page metadata."}},"required":["url","title","text","metadata"]}},{"name":"email_validator_basic","endpoint":"/email-validator/basic","description":"Validate email syntax, domain, and MX records for basic automated checks without SMTP mailbox verification; cannot prove a mailbox exists or can receive mail.\nUSE WHEN: agent needs inexpensive structural and mail-domain validation before using an email address.\nDO NOT USE WHEN: agent requires proof that a mailbox exists or can receive mail.","input_schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address for syntax, domain and MX validation."}},"required":["email"]},"output_schema":{"type":"object","properties":{"valid":{"type":"boolean"},"domain":{"type":["string","null"]},"mx_found":{"type":["boolean","null"]},"reasons":{"type":"array","items":{"type":"string"}}},"required":["valid","domain","mx_found","reasons"]}},{"name":"web_intelligence","endpoint":"/web-intelligence","description":"Execute one live-web operation — search, read, extract, evidence, research, compare, or changes — in a single paid request without orchestrating multiple web APIs.\nUSE WHEN: agent needs a live web search, multi-page read, structured extraction, comparative research, evidence gathering, or web change detection.\nDO NOT USE WHEN: agent already has a single known URL and only needs its clean readable text; use url-clean-content instead.\nParameter semantics: supply `intent` plus only that intent's fields; without `intent`, supply legacy `topic` and `objective` together.","input_schema":{"type":"object","description":"Select an intent and provide only its fields. Without intent, topic and objective preserve the legacy structured-research request.","properties":{"intent":{"type":"string","enum":["search","read","extract","evidence","research","compare","changes"],"description":"Selected Web Intelligence operation."},"topic":{"type":"string","description":"Legacy structured-research topic, used with objective only when intent is omitted."},"objective":{"type":"string","description":"Legacy structured-research objective, used with topic only when intent is omitted."},"query":{"type":"string","description":"Live-web query for search, extract, evidence, or compare."},"url":{"type":"string","format":"uri","description":"Public HTTP(S) URL for read or changes."},"fields":{"type":"array","items":{"type":"string","enum":["title","url","snippet","text"]},"description":"Unique source fields for extract."},"question":{"type":"string","description":"Natural-language question for research."},"targets":{"type":"array","minItems":2,"maxItems":5,"items":{"type":"string"},"description":"Two to five named targets for compare."},"previous_state":{"type":"object","description":"Optional client-supplied prior read state for stateless changes detection."}},"required":[],"anyOf":[{"required":["topic","objective"]},{"required":["intent"]}]},"output_schema":{"type":"object","properties":{"intent":{"type":"string","description":"Executed selected intent."},"result":{"type":"object","description":"Intent-specific machine-readable result."},"sources":{"type":"array","description":"Source provenance when the intent uses web sources."},"observed_at":{"type":"string","format":"date-time","description":"UTC observation time."},"freshness":{"type":"string","description":"Current-data or client-state comparison context."},"data_quality":{"type":"object","description":"Available source or content coverage."},"missing":{"type":"array","items":{"type":"string"},"description":"Known unavailable information."},"usage":{"type":["object","null"],"description":"Measured provider usage when applicable."},"economics":{"type":["object","null"],"description":"Application-calculated estimated costs when applicable."}},"required":["intent","result","observed_at","freshness","data_quality","missing"]}},{"name":"chain_contract_call","endpoint":"/chain-contract-call","description":"Execute one read-only EVM smart contract call on Ethereum or Base and return the normalized result without managing an RPC provider.\nUSE WHEN: agent needs one read-only smart-contract call on a supported chain.\nDO NOT USE WHEN: agent needs broader transaction, address, or contract investigation with evidence and context.\nUSE blockchain-intelligence FOR: broader deterministic inspection of a transaction, address, or contract.","input_schema":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","base"],"description":"EVM network for the read-only call."},"contract_address":{"type":"string","description":"Target EVM contract address."},"data":{"type":"string","description":"Read-only hexadecimal ABI calldata."}},"required":["chain","contract_address","data"]},"output_schema":{"type":"object","properties":{"chain":{"type":"string","description":"Selected EVM network."},"contract_address":{"type":"string","description":"Called contract address."},"result":{"type":"string","description":"Hexadecimal eth_call result."},"provider":{"type":"string","description":"RPC provider identifier."},"latency_ms":{"type":"integer","description":"Observed provider-call latency in milliseconds."}},"required":["chain","contract_address","result","provider","latency_ms"]}},{"name":"blockchain_intelligence","endpoint":"/blockchain-intelligence","description":"Inspect exactly one Base or Ethereum transaction, address, or contract with bounded read-only RPC calls and return deterministic context, observed signals, evidence, coverage, and recommended follow-up.\nUSE WHEN: agent needs broader deterministic investigation of a transaction hash, EVM address, or contract address.\nDO NOT USE WHEN: agent only needs a single read-only smart-contract call; use chain-contract-call instead.\nParameter semantics: `chain` is required; exactly one of `transaction_hash`, `address`, or `contract_address` must be provided.","input_schema":{"type":"object","description":"Inspect exactly one EVM transaction, address, or contract on Base or Ethereum.","properties":{"chain":{"type":"string","enum":["ethereum","base"],"description":"EVM network containing the target."},"transaction_hash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"One transaction hash to inspect."},"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"One EVM address to inspect."},"contract_address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"One EVM contract address to inspect."},"previous_state":{"type":"object","description":"Optional prior new_state for stateless change detection."}},"required":["chain"],"oneOf":[{"required":["transaction_hash"]},{"required":["address"]},{"required":["contract_address"]}]},"output_schema":{"type":"object","properties":{"target":{"type":"object","description":"Selected target type and value."},"classification":{"type":"string","description":"Observed deterministic target classification, not a safety assessment."},"summary":{"type":"string"},"activity":{"type":"object"},"value_and_fee":{"type":"object"},"contract_context":{"type":"object"},"risk_signals":{"type":"array","items":{"type":"string"},"description":"Observed signals only; no risk score is assigned."},"issues":{"type":"array","items":{"type":"object"}},"evidence":{"type":"array","items":{"type":"object"}},"recommended_actions":{"type":"array","items":{"type":"object"}},"changes":{"type":"array","items":{"type":"object"}},"material_changes":{"type":"array","items":{"type":"string"}},"coverage":{"type":"object","description":"Explicitly records the observed RPC scope and unobserved categories."},"rpc_calls_used":{"type":"integer","maximum":5},"observed_at":{"type":"string","format":"date-time"},"current_state":{"type":"object"},"new_state":{"type":"object"}},"required":["target","classification","summary","activity","value_and_fee","contract_context","risk_signals","issues","evidence","recommended_actions","changes","material_changes","coverage","rpc_calls_used","observed_at","current_state","new_state"]}},{"name":"pay_decision_snapshot","endpoint":"/pay-decision-snapshot","description":"Compare one supplied x402 v2 exact Base USDC payment requirement against declared intent and return deterministic consistency, mismatch, change, fingerprint, and coverage evidence without executing a payment.\nUSE WHEN: agent needs deterministic verification of a payment requirement before deciding whether to pay.\nDO NOT USE WHEN: agent expects this tool to execute the payment.\nParameter semantics: supply `intent` (seller, service, resource, plus optional expected fields) and `payment_required` (decoded x402 challenge); optional `previous_snapshot` enables stateless material-change detection against a prior result.","input_schema":{"type":"object","properties":{"intent":{"type":"object","properties":{"seller":{"type":"string","description":"Caller-supplied seller label included in the fingerprint; identity is not externally verified."},"service":{"type":"string","description":"Expected resource.serviceName."},"resource":{"type":"string","format":"uri","description":"Expected exact absolute HTTP(S) resource URL."},"expected_amount":{"type":"string","description":"Optional expected USDC decimal amount, not atomic units."},"expected_asset":{"type":"string","description":"Optional expected EVM asset address."},"expected_network":{"type":"string","description":"Optional expected CAIP-2 network."},"expected_pay_to":{"type":"string","description":"Optional expected EVM payment destination."},"amount_tolerance":{"type":"string","description":"Optional permitted USDC decimal increase."}},"required":["seller","service","resource"]},"payment_required":{"type":"object","description":"Observed x402 v2 PAYMENT-REQUIRED challenge decoded as JSON."},"previous_snapshot":{"type":"object","description":"Optional prior snapshot for stateless material-change detection."}},"required":["intent","payment_required"]},"output_schema":{"type":"object","properties":{"assessment":{"type":"string","enum":["CONSISTENT","INCONSISTENT","REVIEW_REQUIRED"],"description":"Consistency decision only; never a safety rating."},"reason_codes":{"type":"array","items":{"type":"string"}},"matched":{"type":"object"},"mismatched":{"type":"object"},"changes":{"type":"array","items":{"type":"object"}},"payment_fingerprint":{"type":"string","description":"SHA-256 of canonical material payment fields."},"checks_performed":{"type":"array","items":{"type":"string"}},"checks_skipped":{"type":"array","items":{"type":"string"}},"evidence":{"type":"object"},"coverage":{"type":"object"},"external_calls":{"type":"array","items":{"type":"string"},"description":"Always empty in this offline MVP."},"snapshot":{"type":"object","description":"Reusable stateless comparison state."}},"required":["assessment","reason_codes","matched","mismatched","changes","payment_fingerprint","checks_performed","checks_skipped","evidence","coverage","external_calls","snapshot"]}},{"name":"defi_execution_snapshot","endpoint":"/defi-execution-snapshot","description":"Compare read-only Base swap quotes from 1inch and KyberSwap, returning normalized comparable output, consensus, dispersion, quote evidence, and provider limitations without executing a swap.\nUSE WHEN: agent needs comparative swap-quote intelligence before executing a trade.\nDO NOT USE WHEN: agent wants actual swap or transaction execution.\nParameter semantics: `chain` is Base-only; `token_in`/`token_out` are symbols from USDC, USDT, ETH, WETH; `amount_in` is a positive decimal; `slippage_bps` is required (0-10000); optional `baseline_provider` selects oneinch or kyberswap for direct economic comparison.","input_schema":{"type":"object","properties":{"chain":{"type":"string","enum":["base"],"description":"Base Mainnet only in this quote-only MVP."},"token_in":{"type":"string","enum":["USDC","USDT","ETH","WETH"],"description":"Input Base asset symbol."},"token_out":{"type":"string","enum":["USDC","USDT","ETH","WETH"],"description":"Output Base asset symbol; must differ from token_in."},"amount_in":{"type":"string","description":"Positive decimal input amount, converted exactly to raw token units."},"slippage_bps":{"type":"integer","minimum":0,"maximum":10000,"description":"Slippage tolerance in basis points; it is not treated as a cost."},"baseline_provider":{"type":"string","enum":["oneinch","kyberswap"],"description":"Optional provider used only for a direct economic comparison."}},"required":["chain","token_in","token_out","amount_in","slippage_bps"]},"output_schema":{"type":"object","properties":{"status":{"type":"string","enum":["COMPARISON_AVAILABLE","PARTIAL","UPSTREAM_UNAVAILABLE"]},"best_provider":{"type":["string","null"],"description":"Best comparable provider only when at least two valid quotes are available."},"confidence":{"type":"string","enum":["LOW","MEDIUM"],"description":"Deterministic quote-comparison confidence; two providers never produce HIGH in this MVP."},"quotes":{"type":"array","description":"Normalized provider quote evidence in raw token units.","items":{"type":"object"}},"consensus":{"type":["object","null"],"description":"Comparable-output median and comparison basis when two provider quotes are valid."},"economic_advantage":{"type":["object","null"],"description":"Best quote versus declared baseline or next available quote; never ROI."},"partial":{"type":"boolean","description":"True when one or more providers did not yield a valid quote."},"provider_failures":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"category":{"type":"string"}},"required":["provider","category"]}},"evidence_quality":{"type":"object","description":"Per-provider reported, calculated, estimated, or unavailable field quality."},"usage":{"type":"object","description":"Per-provider call success, latency, and configured cost-estimate availability."},"economics":{"type":"object","description":"Known or unknown estimated provider COGS; unknown is never represented as zero."},"observed_at":{"type":"string","format":"date-time"}},"required":["status","best_provider","confidence","quotes","consensus","economic_advantage","partial","provider_failures","evidence_quality","usage","economics","observed_at"]}},{"name":"domain_intelligence","endpoint":"/domain-intelligence","description":"Inspect consolidated domain health — DNS, HTTP, HTTPS, TLS, redirects, MX, SPF, DMARC, email posture, security posture, and agent readiness — returning structured issues, evidence, actions, and stateless changes.\nUSE WHEN: agent needs a comprehensive single-call domain inspection across DNS, web, email, security, and agent-readiness signals.\nDO NOT USE WHEN: agent only needs DNS records; narrower domain/DNS products are not exposed through MCP.\nParameter semantics: `domain` is required; optional `previous_state` enables stateless change detection against a prior `new_state`.","input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Public domain name for consolidated domain health, DNS, TLS, and email-posture inspection; localhost and IP literals are rejected."},"previous_state":{"type":"object","description":"Optional prior new_state for stateless change detection."}},"required":["domain"]},"output_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Validated public domain."},"dns":{"type":"object","description":"Observed DNS records and diagnostics."},"health":{"type":"object","description":"Observed domain health: DNS, HTTP, HTTPS, redirects, TLS, and latency."},"email_posture":{"type":"object","description":"Observed email posture including MX, SPF, and DMARC."},"security_posture":{"type":"object","description":"Observed HTTPS/TLS security posture; not a safety verdict."},"agent_readiness":{"type":"object","description":"Observed agent discovery/readiness signals."},"issues":{"type":"array"},"actions":{"type":"array"},"evidence":{"type":"array"},"observed_at":{"type":"string","format":"date-time"},"data_quality":{"type":"object"},"current_state":{"type":"object"},"changes":{"type":"array"},"new_state":{"type":"object"}},"required":["domain","dns","health","email_posture","security_posture","agent_readiness","issues","actions","evidence","observed_at","data_quality","current_state","changes","new_state"]}},{"name":"competitor_switch_intelligence","endpoint":"/competitor-switch-intelligence","description":"Return existing STRAELO competitor-switch/replacement signals and prioritized leads for supported competitors (yotpo, judge.me); unsupported competitors return UNSUPPORTED_COMPETITOR with charged=false.\nUSE WHEN: agent needs competitor replacement/switch signals and prioritized leads for yotpo or judge.me.\nDO NOT USE WHEN: agent needs confirmed customer domains, vendor ADDED/REMOVED history, or technology detection on one domain.\nUSE installed-base-intelligence FOR: confirmed customer domains currently known for a technology/vendor.\nUSE change-intelligence FOR: durable ADDED/REMOVED changes for a vendor within a UTC time window.\nUSE technology-intelligence FOR: technologies detected on a public domain.","input_schema":{"type":"object","properties":{"competitor":{"type":"string","description":"Competitor technology to prospect against (yotpo, judge.me).","enum":["yotpo","judgeme"]}},"required":["competitor"]},"output_schema":{"type":"object","properties":{"status":{"type":"string","enum":["OK","UNSUPPORTED_COMPETITOR","NO_TARGETS_FOUND","PIPELINE_ERROR","INVALID_INPUT"]},"competitor":{"type":"string"},"supported":{"type":"boolean"},"charged":{"type":"boolean"},"leads":{"type":"array","description":"Prioritized switch leads when available."},"targets":{"type":"array","description":"Validated target domains scanned."},"reason":{"type":["string","null"]},"error":{"type":["string","null"]},"demand":{"type":["object","null"],"description":"Demand telemetry for unsupported competitors."}},"required":["status","competitor","supported","charged","leads","targets"]}},{"name":"installed_base_intelligence","endpoint":"/installed-base-intelligence","description":"Return confirmed customer domains currently known for a specified technology/vendor; STRAELO-confirmed coverage, not a complete global installed base.\nUSE WHEN: agent needs confirmed customer domains currently known for a specified technology/vendor.\nDO NOT USE WHEN: domain -> technologies; vendor + time -> ADDED/REMOVED; competitor switch/replacement signals.\nUSE technology-intelligence FOR: technologies detected on a public domain.\nUSE change-intelligence FOR: durable ADDED/REMOVED changes for a vendor within a UTC time window.\nUSE competitor-switch-intelligence FOR: competitor switch/replacement signals.","input_schema":{"type":"object","properties":{"vendor":{"type":"string","description":"Technology/vendor to query confirmed customers for (e.g., klaviyo, yotpo, judge.me).","minLength":1,"maxLength":50},"limit":{"type":"integer","minimum":1,"maximum":100,"default":100,"description":"Maximum confirmed customers to return (1-100)."}},"required":["vendor"]},"output_schema":{"type":"object","properties":{"product":{"type":"string","description":"Product identifier."},"vendor":{"type":"string","description":"Normalized vendor/technology key queried."},"confirmed_customer_count":{"type":"integer","description":"Total confirmed PRESENT customers for the vendor."},"returned_count":{"type":"integer","description":"Number of customers returned in this response (bounded by limit)."},"customers":{"type":"array","description":"Confirmed customer relationships, ordered by confirmation freshness.","items":{"type":"object","properties":{"customer_domain":{"type":"string","description":"Confirmed customer domain using the technology/vendor."},"last_confirmed_at":{"type":"string","format":"date-time","description":"UTC timestamp when the PRESENT relationship was last confirmed."},"source":{"type":"string","description":"Evidence source identifier."},"scanner_version":{"type":"string","description":"Scanner version that produced the confirmation."},"response_validity":{"type":"string","description":"Response validity of the confirming observation."},"fingerprint_identifiers":{"type":"array","items":"Fingerprint identifiers that matched during confirmation."},"evidence":{"type":"object","description":"Bounded, commercially safe confirmation evidence."}},"required":["customer_domain","last_confirmed_at","source","scanner_version","response_validity","fingerprint_identifiers","evidence"]}}},"required":["product","vendor","confirmed_customer_count","returned_count","customers"]}},{"name":"technology_intelligence","endpoint":"/technology-intelligence","description":"Return technologies deterministically detected on one specified public domain; deterministic observations, not an exhaustive proof that no other technology exists.\nUSE WHEN: agent needs technologies currently detected on one specific public domain.\nDO NOT USE WHEN: vendor -> current confirmed customers; vendor + time -> ADDED/REMOVED; competitor replacement/switch signals.\nUSE installed-base-intelligence FOR: confirmed customer domains using a technology/vendor.\nUSE change-intelligence FOR: durable ADDED/REMOVED changes for a vendor within a UTC time window.\nUSE competitor-switch-intelligence FOR: competitor replacement/switch signals.","input_schema":{"type":"object","properties":{"domain":{"type":"string","description":"Public domain to scan for detectable technologies; localhost and IP literals are rejected.","maxLength":253}},"required":["domain"]},"output_schema":{"type":"object","properties":{"product":{"type":"string","description":"Product identifier."},"domain":{"type":"string","description":"Normalized public domain scanned."},"technology_count":{"type":"integer","description":"Number of technologies detected as PRESENT."},"technologies":{"type":"array","description":"Deterministically detected technologies ordered by canonical key ascending.","items":{"type":"object","properties":{"technology":{"type":"string","description":"Canonical technology registry key (e.g., yotpo, judgeme, klaviyo)."},"name":{"type":["string","null"],"description":"Human-readable technology/vendor name when available from registry metadata."},"categories":{"type":["array","null"],"description":"Technology categories from registry metadata when available.","items":{"type":"string"}},"evidence":{"type":"object","description":"Bounded detection evidence.","properties":{"state":{"type":"string","description":"Detection state: PRESENT."},"fingerprints":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["id","type"]}}},"required":["state","fingerprints"]}},"required":["technology","evidence"]}},"observed_at":{"type":"string","format":"date-time","description":"UTC timestamp of the scan."},"response_validity":{"type":"string","description":"Scanner response validity classification."}},"required":["product","domain","technology_count","technologies","observed_at","response_validity"]}},{"name":"change_intelligence","endpoint":"/change-intelligence","description":"Return durable historical ADDED (ABSENT -> PRESENT) and REMOVED (PRESENT -> ABSENT) customer-domain changes for a vendor in a UTC time window; REMOVED does not prove contract cancellation and ADDED does not prove commercial purchase.\nUSE WHEN: agent needs durable historical ADDED/REMOVED customer-domain changes for a vendor in a UTC time window.\nDO NOT USE WHEN: current confirmed customer base; technologies on one domain; competitor replacement/switch inference.\nUSE installed-base-intelligence FOR: confirmed customer domains currently known for a technology/vendor.\nUSE technology-intelligence FOR: technologies detected on a public domain.\nUSE competitor-switch-intelligence FOR: competitor replacement/switch signals.","input_schema":{"type":"object","properties":{"vendor":{"type":"string","description":"Technology/vendor to query confirmed changes for (e.g., klaviyo, yotpo, judge.me).","minLength":1,"maxLength":50},"start":{"type":"string","format":"date-time","description":"Inclusive UTC start boundary (ISO-8601, timezone-aware)."},"end":{"type":"string","format":"date-time","description":"Exclusive UTC end boundary (ISO-8601, timezone-aware)."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":100,"description":"Maximum confirmed changes to return (1-100)."}},"required":["vendor","start","end"]},"output_schema":{"type":"object","properties":{"product":{"type":"string","description":"Product identifier."},"vendor":{"type":"string","description":"Normalized vendor/technology key queried."},"start":{"type":"string","format":"date-time","description":"Inclusive UTC start boundary queried."},"end":{"type":"string","format":"date-time","description":"Exclusive UTC end boundary queried."},"change_count":{"type":"integer","description":"Total confirmed changes for the vendor in the window."},"changes":{"type":"array","description":"Confirmed ADDED/REMOVED changes ordered by changed_at DESC, domain ASC.","items":{"type":"object","properties":{"domain":{"type":"string","description":"Customer domain that experienced a confirmed technology change."},"change":{"type":"string","description":"Change type: ADDED (ABSENT->PRESENT) or REMOVED (PRESENT->ABSENT)."},"changed_at":{"type":"string","format":"date-time","description":"UTC timestamp when the durable transition was observed."},"from_state":{"type":"string","description":"State before the transition (ABSENT or PRESENT)."},"to_state":{"type":"string","description":"State after the transition (PRESENT or ABSENT)."},"source":{"type":["string","null"],"description":"Evidence source identifier."},"scanner_version":{"type":["string","null"],"description":"Scanner version that produced the observation."},"response_validity":{"type":["string","null"],"description":"Response validity of the confirming observation."},"fingerprints":{"type":"array","description":"Bounded matched fingerprint evidence (ids and types only).","items":{"type":"object"}}},"required":["domain","change","changed_at","from_state","to_state"]}},"observed_at":{"type":"string","format":"date-time","description":"UTC timestamp of the query response generation."}},"required":["product","vendor","start","end","change_count","changes","observed_at"]}}]},"discovery":{"openapi":"/openapi.json","openapi_yaml":"/openapi.yaml","x402_resources":"/discovery/resources","x402_manifest":"/.well-known/x402","agents":"/agents.json","agents_txt":"/agents.txt","ard":"/.well-known/ard.json"},"updated":"2026-10-19T17:23:21Z"}