{"components":{"schemas":{"AppliedFix":{"description":"One deterministic correction actually applied to the extracted value.","properties":{"detail":{"description":"Human-readable detail of what changed.","type":"string"},"path":{"description":"JSON Pointer to the field that was corrected (e.g. `/user/age`; `\"\"` = the whole value).","type":"string"},"rule":{"description":"Which bounded correction rule fired (e.g. `type_coercion`, `additional_property_stripped`,\n`enum_case_insensitive_match`, `required_default_filled`, `clamped_to_minimum`,\n`clamped_to_maximum`, `array_truncated_to_max_items`).","type":"string"}},"required":["path","rule","detail"],"type":"object"},"BlocklistHit":{"properties":{"cidr":{"type":"string"},"ip":{"type":"string"},"source":{"type":"string"}},"required":["ip","source","cidr"],"type":"object"},"BlocklistMatch":{"properties":{"cidr":{"description":"The specific CIDR entry from that source that contains the queried IP.","type":"string"},"source":{"description":"Which source matched, e.g. `\"firehol-level1\"`.","type":"string"}},"required":["source","cidr"],"type":"object"},"Candidate":{"properties":{"city":{"type":["string","null"]},"name":{"type":"string"},"registration_number":{"type":"string"},"status":{"type":"string"}},"required":["name","registration_number","status"],"type":"object"},"CatalogCategoryEntry":{"properties":{"category":{"type":"string"},"description":{"type":"string"},"host":{"type":"string"},"name":{"type":"string"},"port":{"format":"uint16","maximum":65535,"minimum":0,"type":"integer"},"registered_at":{"format":"int64","type":"integer"}},"required":["name","host","port","category","description","registered_at"],"type":"object"},"CatalogSearchResult":{"properties":{"category":{"type":"string"},"description":{"type":"string"},"host":{"type":"string"},"method":{"type":"string"},"port":{"format":"uint16","maximum":65535,"minimum":0,"type":"integer"},"price_usdc":{"description":"Decimal USDC string (e.g. `\"0.01\"`), or `\"\"` if this tool is free -- structural pricing,\nnot just prose in `description`.","type":"string"},"route":{"type":"string"},"score":{"description":"Similarity score (semantic embedding cosine similarity when available, else keyword\noverlap in `[0, 1]`) -- higher is a better match. Not comparable across two different\nsearches (the scoring method may differ per-call depending on embedding availability).","format":"float","type":"number"},"service_name":{"type":"string"},"tool_name":{"type":"string"}},"required":["service_name","category","tool_name","description","route","method","host","port","score","price_usdc"],"type":"object"},"Company":{"properties":{"activity_code":{"description":"Main activity code (NAF/APE for France).","type":["string","null"]},"address":{"type":["string","null"]},"closed_at":{"description":"Date of closure (YYYY-MM-DD), when closed.","type":["string","null"]},"country":{"description":"ISO country code of the legal seat.","type":"string"},"created_at":{"description":"Date of creation (YYYY-MM-DD).","type":["string","null"]},"employees":{"description":"Employee size bracket, e.g. `50-99`.","type":["string","null"]},"head_office_id":{"description":"SIRET of the head office (France).","type":["string","null"]},"legal_form":{"description":"Legal form (`SAS`, `SARL`, ...) or its register code.","type":["string","null"]},"legal_name":{"type":"string"},"lei":{"type":["string","null"]},"registration_number":{"description":"Number in the company register (SIREN for France).","type":["string","null"]},"size_category":{"description":"Size category: `PME`, `ETI`, `GE`.","type":["string","null"]},"status":{"description":"`active`, `closed` or `unknown`.","type":"string"},"trade_name":{"description":"Commercial name or acronym, when different.","type":["string","null"]},"vat_number":{"type":["string","null"]}},"required":["legal_name","status","country"],"type":"object"},"Contact":{"properties":{"confidence":{"description":"`high` (published as a link or in structured data), `medium` or `low`.","type":"string"},"found_in":{"description":"How it appears there: `mailto`, `text`, `jsonld`, `tel`, `form`, `link`, `probe` (a common\naddress that exists), `security.txt`.","type":"string"},"kind":{"description":"`email`, `phone`, `form` (a contact form), `page` (a contact, support or help-centre page),\n`messaging` (WhatsApp, Telegram, Signal, Messenger), `security` (a vulnerability-reporting\ncontact) or `social` (a profile link).","type":"string"},"label":{"description":"The label published next to it (link text or heading), when there is one.","type":["string","null"]},"mx_valid":{"description":"For an e-mail address: whether its domain has mail servers (`false` = it cannot receive mail).","type":["boolean","null"]},"role":{"description":"`sales`, `support`, `press`, `jobs`, `legal`, `privacy`, `security`, `billing` or `general`.","type":"string"},"source_url":{"description":"The page where it was found.","type":"string"},"value":{"description":"The address, number or link, exactly as published.","type":"string"}},"required":["kind","value","role","source_url","found_in","confidence"],"type":"object"},"ContractInfo":{"properties":{"blacklist":{"description":"Whether the contract can block addresses.","type":["boolean","null"]},"hidden_owner":{"description":"Whether the real owner is hidden.","type":["boolean","null"]},"mintable":{"description":"Whether new tokens can be minted.","type":["boolean","null"]},"owner":{"description":"Owner address, absent when ownership is renounced.","type":["string","null"]},"owner_can_reclaim":{"description":"Whether a previous owner can take ownership back.","type":["boolean","null"]},"ownership_renounced":{"type":"boolean"},"pausable":{"description":"Whether transfers can be paused.","type":["boolean","null"]},"proxy":{"description":"Whether it is an upgradeable proxy (the logic can be replaced).","type":["boolean","null"]},"self_destruct":{"description":"Whether the contract can self-destruct.","type":["boolean","null"]},"source_verified":{"description":"Whether the source code is published and verified.","type":["boolean","null"]},"taxes_modifiable":{"description":"Whether the owner can change the taxes after launch.","type":["boolean","null"]}},"required":["ownership_renounced"],"type":"object"},"Director":{"properties":{"born":{"description":"Month and year of birth (`1975-01`) for a person, as published in the register.","type":["string","null"]},"kind":{"description":"`person` or `company`.","type":"string"},"name":{"description":"Full name of the person or the legal entity.","type":"string"},"nationality":{"type":["string","null"]},"registration_number":{"description":"Registration number of a legal-entity director.","type":["string","null"]},"role":{"description":"Role as published (`Président de SAS`, `Directeur Général`, `Commissaire aux comptes titulaire`...).","type":"string"}},"required":["name","role","kind"],"type":"object"},"DnsSecurity":{"properties":{"caa":{"description":"CAA records: the certificate authorities allowed to issue for the domain.","items":{"type":"string"},"type":"array"},"dnssec":{"description":"Whether the answer for the domain is validated by DNSSEC.","type":"boolean"},"name_servers":{"description":"Authoritative name servers (at most 8).","items":{"type":"string"},"type":"array"}},"required":["dnssec","name_servers","caa"],"type":"object"},"DomainInfo":{"properties":{"domain_age_years":{"description":"Years since registration, one decimal.","format":"double","type":["number","null"]},"email_provider":{"description":"Mail platform deduced from the MX records (`google-workspace`, `microsoft-365`, ...).","type":["string","null"]},"expires_at":{"description":"Expiration date, `YYYY-MM-DD`.","type":["string","null"]},"mail_services":{"description":"Sending services declared in the SPF record (`sendgrid`, `mailchimp`, ...).","items":{"type":"string"},"type":"array"},"nameservers":{"items":{"type":"string"},"type":"array"},"registered_at":{"description":"Registration date, `YYYY-MM-DD`.","type":["string","null"]},"registrable_domain":{"description":"The registrable domain the lookups were made for.","type":"string"},"registrant_org":{"description":"The registrant, only when it is an organization published in RDAP.","type":["string","null"]},"registrar":{"type":["string","null"]},"statuses":{"description":"RDAP status flags (e.g. `client transfer prohibited`), at most 4.","items":{"type":"string"},"type":"array"}},"required":["registrable_domain","nameservers","statuses","mail_services"],"type":"object"},"DomainMail":{"properties":{"dmarc":{"description":"DMARC policy: `reject`, `quarantine`, `none` or `absent`.","type":["string","null"]},"mx":{"description":"Mail servers (MX) of the website's domain, highest priority first (at most 5).","items":{"type":"string"},"type":"array"},"provider":{"description":"Mail platform deduced from the MX records (`google-workspace`, `microsoft-365`, ...).","type":["string","null"]},"spf":{"description":"SPF policy: `strict` (-all), `soft` (~all), `neutral` (?all), `open` (+all) or `none`.","type":["string","null"]}},"required":["mx"],"type":"object"},"Financial":{"properties":{"net_result":{"description":"Net result, in euros.","format":"int64","type":["integer","null"]},"revenue":{"description":"Revenue, in euros.","format":"int64","type":["integer","null"]},"year":{"format":"uint32","minimum":0,"type":"integer"}},"required":["year"],"type":"object"},"Finding":{"properties":{"code":{"description":"Stable machine-readable code, e.g. `tls.expired`, `mail.dmarc_absent`, `http.hsts_missing`.","type":"string"},"message":{"description":"What was observed and why it matters, in one sentence.","type":"string"},"severity":{"description":"`critical`, `high`, `medium`, `low` or `info`.","type":"string"}},"required":["severity","code","message"],"type":"object"},"Flag":{"properties":{"code":{"description":"Stable code, e.g. `sanctioned`, `phishing`, `theft`, `mixer`, `blacklist_doubt`.","type":"string"},"message":{"type":"string"},"severity":{"description":"`critical`, `high` or `medium`.","type":"string"}},"required":["severity","code","message"],"type":"object"},"HoldersInfo":{"properties":{"count":{"format":"uint64","minimum":0,"type":["integer","null"]},"creator_percent":{"description":"Share of the supply held by the creator, in percent.","format":"double","type":["number","null"]},"owner_percent":{"description":"Share of the supply held by the owner, in percent.","format":"double","type":["number","null"]},"top10_wallets_percent":{"description":"Share held by the ten largest wallets that are not contracts, in percent.","format":"double","type":["number","null"]}},"type":"object"},"HttpSecurity":{"properties":{"discloses_version":{"description":"Whether the `Server` / `X-Powered-By` headers disclose a software version.","type":"boolean"},"headers_missing":{"description":"The ones that are missing.","items":{"type":"string"},"type":"array"},"headers_present":{"description":"Security headers found on the HTTPS response (`strict-transport-security`,\n`content-security-policy`, `x-content-type-options`, `x-frame-options`, `referrer-policy`,\n`permissions-policy`).","items":{"type":"string"},"type":"array"},"http_redirects_to_https":{"description":"`true` when plain HTTP on port 80 redirects to HTTPS, `false` when it serves content or\nredirects elsewhere, absent when port 80 does not answer.","type":["boolean","null"]},"https_status":{"description":"Status of `GET https://<domain>/`.","format":"uint16","maximum":65535,"minimum":0,"type":["integer","null"]}},"required":["headers_present","headers_missing","discloses_version"],"type":"object"},"LeiParent":{"properties":{"country":{"type":["string","null"]},"legal_name":{"type":"string"},"lei":{"type":"string"}},"required":["lei","legal_name"],"type":"object"},"LeiRecord":{"properties":{"direct_parent":{"anyOf":[{"$ref":"#/components/schemas/LeiParent"},{"type":"null"}]},"entity_status":{"description":"Entity status in the LEI register (`ACTIVE`, `INACTIVE`).","type":"string"},"lei":{"type":"string"},"next_renewal":{"type":["string","null"]},"registration_status":{"description":"Registration status of the LEI (`ISSUED`, `LAPSED`, ...).","type":"string"},"ultimate_parent":{"anyOf":[{"$ref":"#/components/schemas/LeiParent"},{"type":"null"}]}},"required":["lei","entity_status","registration_status"],"type":"object"},"LiquidityInfo":{"properties":{"locked_percent":{"description":"Share of the liquidity-token supply that is locked, in percent.","format":"double","type":["number","null"]},"pool_age_days":{"description":"Age in days of the oldest trading pool.","format":"double","type":["number","null"]},"pools":{"format":"uint32","minimum":0,"type":"integer"},"top_pool":{"description":"Largest pool: exchange name.","type":["string","null"]},"total_usd":{"description":"Liquidity in USD summed over the trading pools.","format":"double","type":"number"}},"required":["total_usd","pools"],"type":"object"},"ListStatus":{"properties":{"entries":{"format":"uint32","minimum":0,"type":"integer"},"fetched_at":{"description":"When this service last downloaded the list (UTC).","type":"string"},"list":{"type":"string"},"published":{"description":"Publication date announced by the list itself, when it states one.","type":["string","null"]}},"required":["list","entries","fetched_at"],"type":"object"},"MailSecurity":{"properties":{"dmarc":{"description":"DMARC policy: `reject`, `quarantine`, `none` or `absent`.","type":["string","null"]},"mta_sts":{"description":"Whether an MTA-STS policy is published (`_mta-sts` TXT record).","type":"boolean"},"mx":{"description":"Mail servers (MX) of the website's domain, highest priority first (at most 5).","items":{"type":"string"},"type":"array"},"provider":{"description":"Mail platform deduced from the MX records (`google-workspace`, `microsoft-365`, ...).","type":["string","null"]},"spf":{"description":"SPF policy: `strict` (-all), `soft` (~all), `neutral` (?all), `open` (+all) or `none`.","type":["string","null"]}},"required":["mx","mta_sts"],"type":"object"},"MarketInfo":{"properties":{"buys_24h":{"format":"uint64","minimum":0,"type":"integer"},"fully_diluted_value_usd":{"format":"double","type":["number","null"]},"price_change_24h_percent":{"format":"double","type":["number","null"]},"price_usd":{"format":"double","type":["number","null"]},"sells_24h":{"format":"uint64","minimum":0,"type":"integer"},"volume_24h_usd":{"format":"double","type":"number"}},"required":["volume_24h_usd","buys_24h","sells_24h"],"type":"object"},"ProxyView":{"description":"A `SourceProxy` joined with its `CheckedProxy` result, if it has been checked at least once --\nwhat every read tool actually filters/returns.","properties":{"anonymity":{"type":"string"},"checked_alive":{"description":"`None` if this service has never checked this proxy yet.","type":["boolean","null"]},"checked_at":{"format":"int64","type":["integer","null"]},"checked_consecutive_successes":{"description":"See `CheckedProxy::consecutive_successes`'s own doc comment. `0` if never checked.","format":"uint32","minimum":0,"type":"integer"},"checked_ema_latency_ms":{"description":"See `CheckedProxy::ema_latency_ms`'s own doc comment.","format":"double","type":["number","null"]},"checked_latency_ms":{"format":"uint64","minimum":0,"type":["integer","null"]},"checked_protocol":{"type":["string","null"]},"city":{"type":"string"},"country":{"type":"string"},"id":{"type":"string"},"ip":{"type":"string"},"port":{"format":"uint16","maximum":65535,"minimum":0,"type":"integer"},"protocols":{"items":{"type":"string"},"type":"array"}},"required":["id","ip","port","protocols","country","city","anonymity","checked_consecutive_successes"],"type":"object"},"RemainingIssue":{"description":"One schema violation that could NOT be corrected -- never silently dropped or guessed.","properties":{"keyword":{"description":"The JSON Schema keyword that failed (e.g. `pattern`, `format`, `minItems`, `oneOf`).","type":"string"},"message":{"description":"The underlying validator's own error message.","type":"string"},"path":{"description":"JSON Pointer to the field that still fails validation.","type":"string"}},"required":["path","keyword","message"],"type":"object"},"SanctionMatch":{"properties":{"aliases":{"description":"Other names the entry is listed under (at most 5).","items":{"type":"string"},"type":"array"},"birth_year_consistent":{"description":"`true`/`false` when a `birth_year` was given and the entry publishes birth years.","type":["boolean","null"]},"birth_years":{"description":"Published years of birth.","items":{"format":"uint16","maximum":65535,"minimum":0,"type":"integer"},"type":"array"},"countries":{"description":"Nationalities or countries, when published.","items":{"type":"string"},"type":"array"},"entry_id":{"description":"The entry's identifier in that list.","type":"string"},"kind":{"description":"`person`, `entity`, `vessel` or `aircraft`.","type":"string"},"list":{"description":"`OFAC SDN`, `EU consolidated` or `UN Security Council`.","type":"string"},"listed_name":{"description":"The listed primary name.","type":"string"},"listed_on":{"description":"Date of listing, when published.","type":["string","null"]},"match_type":{"description":"`exact`, `close` or `possible`.","type":"string"},"matched_alias":{"description":"The name or alias that matched, when it is not the primary name.","type":["string","null"]},"programs":{"description":"Sanctions programmes or regimes.","items":{"type":"string"},"type":"array"},"remarks":{"description":"Published remarks (truncated).","type":["string","null"]},"score":{"description":"0 to 1: 1 means the same words (any order); lower means a partial or approximate match.","format":"double","type":"number"}},"required":["list","entry_id","kind","listed_name","score","match_type","aliases","programs","countries","birth_years"],"type":"object"},"SearchResult":{"properties":{"description":{"type":"string"},"host":{"type":"string"},"method":{"type":"string"},"port":{"format":"uint16","maximum":65535,"minimum":0,"type":"integer"},"price_usdc":{"description":"Decimal USDC string (e.g. `\"0.01\"`), or `\"\"` if this tool is free -- structural pricing,\nnot just prose in `description`.","type":"string"},"route":{"type":"string"},"score":{"description":"Similarity score (semantic embedding cosine similarity when available, else keyword\noverlap in `[0, 1]`) -- higher is a better match. Not comparable across two different\nsearches (the scoring method may differ per-call depending on embedding availability).","format":"float","type":"number"},"service_name":{"type":"string"},"tool_name":{"type":"string"}},"required":["service_name","tool_name","description","route","method","host","port","score","price_usdc"],"type":"object"},"SearchResultItem":{"properties":{"snippet":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"}},"required":["title","url","snippet"],"type":"object"},"TaskStatusKind":{"description":"`\"pending\"` (enqueued, no result yet), `\"finished\"` (a worker wrote a result -- see `ok`/\n`result`), or `\"unknown\"` (this id was never valid, or both it and its result have expired --\nsee [`nimpoleon_tasks::TaskState`]'s own doc comment for why this is 3 states, not 2).","enum":["pending","finished","unknown"],"type":"string"},"TlsSecurity":{"properties":{"days_remaining":{"description":"Days left before expiry (negative once expired).","format":"int64","type":["integer","null"]},"error":{"description":"Why the handshake or validation failed, when it did.","type":["string","null"]},"expires_at":{"description":"Certificate end of validity (UTC).","type":["string","null"]},"issuer":{"type":["string","null"]},"protocol":{"description":"`TLS1.3` or `TLS1.2`.","type":["string","null"]},"reachable":{"description":"Whether HTTPS answered on port 443.","type":"boolean"},"san_count":{"description":"Number of host names the certificate covers.","format":"uint32","minimum":0,"type":"integer"},"valid":{"description":"Whether the certificate chain validates for this host name.","type":"boolean"}},"required":["reachable","valid","san_count"],"type":"object"},"TradingInfo":{"properties":{"buy_tax_percent":{"description":"Buy tax in percent.","format":"double","type":["number","null"]},"cannot_sell_all":{"description":"Whether a holder cannot sell their whole balance.","type":["boolean","null"]},"honeypot":{"description":"Whether the token cannot be sold after being bought.","type":["boolean","null"]},"sell_tax_percent":{"description":"Sell tax in percent.","format":"double","type":["number","null"]}},"type":"object"},"VatCheck":{"properties":{"checked_at":{"description":"When the number was validated (UTC).","type":"string"},"number":{"description":"The number as checked, with country prefix.","type":"string"},"registered_address":{"type":["string","null"]},"registered_name":{"description":"Name registered for the VAT number, when the member state discloses it.","type":["string","null"]},"status":{"description":"`valid`, `invalid` or `unavailable` (the EU service did not answer: try again later).","type":"string"}},"required":["number","status","checked_at"],"type":"object"}}},"info":{"contact":{"email":"0xx33dd@proton.me"},"description":"A fleet of independent, x402-payable microservices callable by AI agents.","title":"🌀 17711 Smart Services","version":"1.0.0","x-guidance":"A fleet of independent, x402-payable microservices callable by AI agents."},"openapi":"3.0.3","paths":{"/registry/address-risk-service/v1/address-risk/check_address":{"post":{"description":"Screens a wallet or contract address before an agent sends it funds or interacts with it. Send the `address` and, optionally, the `chain` (base by default; ethereum, bsc, polygon, arbitrum, optimism and avalanche are supported). The answer is a verdict (`clear`, `caution`, `risky` or `dangerous`), a 0-100 safety score, whether the address is a wallet or a contract, and the flags raised, each with a severity and a stable code: sanctions lists, theft and attack, phishing, blackmail, cybercrime, financial crime, money laundering, dark-web transactions, mixers, fake KYC, honeypot-related and fake-token addresses, malicious contract creation, gas abuse and blacklist suspicion, with the reporting sources when known. The rules are fixed, so the same address gives the same answer: no language model is involved. A clear result means nothing was reported, not that the address is guaranteed safe, and it is never returned when the threat-report source is unavailable (the call then fails and is not charged). Costs $0.005 per call. Results are stored briefly and reused: the response says when the data was read (`retrieved_at`), how old it is (`age_seconds`) and whether it came from a stored result (`from_cache`); send `max_age_seconds` to choose the oldest result you accept, or 0 to force a fresh check. A call usually takes under 2 seconds. No free trial: every call is paid via x402 at $0.005 USDC per call.","operationId":"address_risk_check_address","requestBody":{"content":{"application/json":{"example":{"address":"string","chain":"string","max_age_seconds":0},"schema":{"properties":{"address":{"description":"The wallet or contract address to screen (`0x` followed by 40 hex characters).","type":"string"},"chain":{"default":null,"description":"The chain: `base` (default), `ethereum`, `bsc`, `polygon`, `arbitrum`, `optimism` or `avalanche`.","type":["string","null"]},"max_age_seconds":{"default":null,"description":"The oldest result you accept, in seconds. Omit it for the default (up to 10 minutes old);\n`0` forces a fresh check. The response always says how old it is.","format":"uint64","minimum":0,"type":["integer","null"]}},"required":["address"],"title":"CheckAddressRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"address":"string","age_seconds":0,"chain":"string","disclaimer":"string","flags":[{"code":"string","message":"string","severity":"string"}],"from_cache":false,"kind":"string","reported_by":"string","retrieved_at":"string","safety_score":0,"verdict":"string"},"schema":{"properties":{"address":{"type":"string"},"age_seconds":{"description":"How old this result is, in seconds (0 for a fresh check).","format":"uint64","minimum":0,"type":"integer"},"chain":{"type":"string"},"disclaimer":{"type":"string"},"flags":{"description":"Every flag raised, most severe first. Empty when the verdict is `clear`.","items":{"$ref":"#/components/schemas/Flag"},"type":"array"},"from_cache":{"description":"`true` when served from a stored result.","type":"boolean"},"kind":{"description":"`contract` or `wallet`.","type":"string"},"reported_by":{"description":"Who reported the address, when the source says (e.g. `SlowMist,BlockSec`).","type":["string","null"]},"retrieved_at":{"description":"When the data was read (UTC).","type":"string"},"safety_score":{"description":"0 to 100, higher is safer; derived from the flags.","format":"uint32","minimum":0,"type":"integer"},"verdict":{"description":"`clear` (no known flag), `caution`, `risky` or `dangerous`. `clear` means no report was found,\nnot that the address is guaranteed safe.","type":"string"}},"required":["address","chain","kind","verdict","safety_score","flags","disclaimer","retrieved_at","age_seconds","from_cache"],"title":"CheckAddressResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Wallet address risk check: sanctioned address and phishing check for a crypto wallet or contract before you send funds, with theft, scam, mixer and blacklist flags ($0.005, x402)","x-payment-info":{"price":{"amount":"0.005000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.005"}},"/registry/catalog/v1/catalog/category":{"get":{"description":"Browse-by-category: every physically-registered instance tagged with the exact category `q`, unranked, paginated via `limit`/`offset`. Complements `catalog_search`'s ranked free-text search -- useful to browse the whole catalog a category at a time as it grows, without ever needing to list everything at once. Only reads the raw registration list (via `service-registry`'s own internal tool); does not poll each instance's own tool catalog, so it stays cheap regardless of registry size.","operationId":"catalog_category","parameters":[{"in":"query","name":"limit","required":false,"schema":{"default":50,"description":"Max number of entries to return in this page.","format":"uint","minimum":0,"type":"integer"}},{"in":"query","name":"offset","required":false,"schema":{"default":0,"description":"How many matching entries to skip before this page starts.","format":"uint","minimum":0,"type":"integer"}},{"in":"query","name":"q","required":true,"schema":{"description":"Exact category name to list registrations for.","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"entries":[{"category":"string","description":"string","host":"string","name":"string","port":0,"registered_at":0}],"limit":0,"offset":0,"total_count":0},"schema":{"properties":{"entries":{"description":"This page's entries, in no particular order (no ranking -- this is a listing, not a\nsearch).","items":{"$ref":"#/components/schemas/CatalogCategoryEntry"},"type":"array"},"limit":{"format":"uint","minimum":0,"type":"integer"},"offset":{"format":"uint","minimum":0,"type":"integer"},"total_count":{"description":"Total number of registrations matching `q`, BEFORE `limit`/`offset` are applied -- lets a\ncaller know whether more pages remain.","format":"uint","minimum":0,"type":"integer"}},"required":["entries","total_count","limit","offset"],"title":"CatalogCategoryResponse","type":"object"}}},"description":"Successful response"},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"security":[],"summary":"Lists every registration in one category, paginated (public GET)"}},"/registry/catalog/v1/catalog/find_services_by_capability":{"post":{"description":"Finds which registered service/tool can handle a given task, ranked by semantic similarity between a free-text `query` and every physically-registered instance's own live tool descriptions (read from each instance's own `/openapi.json`) -- falls back to keyword overlap when no local embedding model is available. This is the read side of fleet-wide service discovery; the instance list itself is owned by `service-registry` (see `service_registry_register_instance`).","operationId":"catalog_find_services_by_capability","requestBody":{"content":{"application/json":{"example":{"query":"string","top_k":0},"schema":{"properties":{"query":{"description":"Free-text description of the task to find a service for.","type":"string"},"top_k":{"default":5,"description":"Max number of results to return.","format":"uint","minimum":0,"type":"integer"}},"required":["query"],"title":"SearchRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"results":[{"description":"string","host":"string","method":"string","port":0,"price_usdc":"string","route":"string","score":0,"service_name":"string","tool_name":"string"}]},"schema":{"properties":{"results":{"description":"Ranked best-match-first, truncated to the request's own `top_k`.","items":{"$ref":"#/components/schemas/SearchResult"},"type":"array"}},"required":["results"],"title":"SearchResponse","type":"object"}}},"description":"Successful response"},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"security":[],"summary":"Ranks registered services/tools by relevance to a free-text query"}},"/registry/catalog/v1/catalog/search":{"get":{"description":"Public, curl/browser-friendly sibling of `catalog_find_services_by_capability`: same semantic-similarity ranking (falling back to keyword overlap when no local embedding model is available), reachable via a plain `?q=` query string instead of a JSON body, with an optional `category` filter. Not exposed as an MCP tool -- agents should use `catalog_find_services_by_capability` instead, to avoid two near-identical discovery tools.","operationId":"catalog_search","parameters":[{"in":"query","name":"category","required":false,"schema":{"default":null,"description":"Restrict results to registrations tagged with this exact category. Omitted/empty = no\nfilter, search across every category.","type":["string","null"]}},{"in":"query","name":"limit","required":false,"schema":{"default":5,"description":"Max number of results to return.","format":"uint","minimum":0,"type":"integer"}},{"in":"query","name":"q","required":true,"schema":{"description":"Free-text description of the task to find a service for.","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"results":[{"category":"string","description":"string","host":"string","method":"string","port":0,"price_usdc":"string","route":"string","score":0,"service_name":"string","tool_name":"string"}]},"schema":{"properties":{"results":{"description":"Ranked best-match-first, truncated to the request's own `limit`.","items":{"$ref":"#/components/schemas/CatalogSearchResult"},"type":"array"}},"required":["results"],"title":"CatalogSearchResponse","type":"object"}}},"description":"Successful response"},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"security":[],"summary":"Ranks registered services/tools by relevance to a free-text query (public GET)"}},"/registry/company-check-service/v1/company-check/verify_company":{"post":{"description":"Verifies that a company exists and is in good standing, from official public registers. Send a `company_name`, a `registration_number` (French SIREN or SIRET), an EU `vat_number` (with country prefix) or a `lei`; add `country` to narrow a search. The answer gives the legal name, trade name, status (active or closed), legal form, registration number, address, creation and closure dates, activity code, employee bracket and size category; the validation of its EU VAT number against the European VIES service (valid, invalid, or unavailable) with the name and address registered for it; its LEI record with registration status and direct and ultimate parent companies; for French companies the directors and officers with their role (president, managing director, board members), the statutory auditors, and the revenue and net result of the latest published years. Flags point out what matters: closed company, invalid VAT number, VAT name mismatch, lapsed LEI, ambiguous name (other candidates are listed). Outside France only the LEI register and EU VAT validation are available, and the answer says so. Only public register data is returned. No language model is involved. A company that is not found is not charged. Costs $0.009 per call. Results are stored and reused: the response says when the registers were queried (`retrieved_at`), how old the answer is (`age_seconds`) and whether it came from a stored result (`from_cache`); send `max_age_seconds` to choose the oldest answer you accept, or 0 to force a fresh check. A call usually takes 1 to 5 seconds. No free trial: every call is paid via x402 at $0.009 USDC per call.","operationId":"company_check_verify_company","requestBody":{"content":{"application/json":{"example":{"company_name":"string","country":"string","lei":"string","max_age_seconds":0,"registration_number":"string","vat_number":"string"},"schema":{"properties":{"company_name":{"default":null,"description":"The company's name (`OVH`, `Mistral AI`). Give at least one of `company_name`,\n`registration_number`, `vat_number` or `lei`.","type":["string","null"]},"country":{"default":null,"description":"ISO 3166-1 alpha-2 country code (`FR`, `DE`) to narrow a name or number search.","type":["string","null"]},"lei":{"default":null,"description":"A Legal Entity Identifier (20 characters).","type":["string","null"]},"max_age_seconds":{"default":null,"description":"The oldest answer you accept, in seconds. Omit it for the default (answers up to 6 hours\nold); `0` forces a fresh check, including a new VAT validation.","format":"uint64","minimum":0,"type":["integer","null"]},"registration_number":{"default":null,"description":"A company registration number: a French SIREN (9 digits) or SIRET (14 digits), or a number\nfrom another register (then give `country`).","type":["string","null"]},"vat_number":{"default":null,"description":"An EU VAT number with its country prefix (`FR22424761419`, `DE811907980`).","type":["string","null"]}},"title":"VerifyCompanyRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"age_seconds":0,"company":{"activity_code":"string","address":"string","closed_at":"string","country":"string","created_at":"string","employees":"string","head_office_id":"string","legal_form":"string","legal_name":"string","lei":"string","registration_number":"string","size_category":"string","status":"string","trade_name":"string","vat_number":"string"},"confidence":"string","coverage_note":"string","directors":[{"born":"string","kind":"string","name":"string","nationality":"string","registration_number":"string","role":"string"}],"financials":[{"net_result":0,"revenue":0,"year":0}],"flags":[{"code":"string","message":"string","severity":"string"}],"from_cache":false,"lei":{"direct_parent":{"country":"string","legal_name":"string","lei":"string"},"entity_status":"string","lei":"string","next_renewal":"string","registration_status":"string","ultimate_parent":{"country":"string","legal_name":"string","lei":"string"}},"matched_by":"string","other_candidates":[{"city":"string","name":"string","registration_number":"string","status":"string"}],"retrieved_at":"string","sources":["string"],"vat":{"checked_at":"string","number":"string","registered_address":"string","registered_name":"string","status":"string"}},"schema":{"properties":{"age_seconds":{"description":"How old this answer is, in seconds (0 for a fresh check).","format":"uint64","minimum":0,"type":"integer"},"company":{"$ref":"#/components/schemas/Company"},"confidence":{"description":"`high` (identified by a number), `medium` (a clear name match) or `low` (several similar names).","type":"string"},"coverage_note":{"description":"What this answer does not cover for the company's country.","type":"string"},"directors":{"description":"Officers and statutory auditors published in the register (France only).","items":{"$ref":"#/components/schemas/Director"},"type":"array"},"financials":{"description":"Revenue and net result of the latest published years (France only).","items":{"$ref":"#/components/schemas/Financial"},"type":"array"},"flags":{"description":"Things to know: closed company, invalid VAT number, name mismatch, lapsed LEI.","items":{"$ref":"#/components/schemas/Flag"},"type":"array"},"from_cache":{"description":"`true` when this answer was served from a stored result.","type":"boolean"},"lei":{"anyOf":[{"$ref":"#/components/schemas/LeiRecord"},{"type":"null"}]},"matched_by":{"description":"How the company was identified: `lei`, `vat_number`, `registration_number` or `name`.","type":"string"},"other_candidates":{"description":"Other companies that matched a name search (to disambiguate).","items":{"$ref":"#/components/schemas/Candidate"},"type":"array"},"retrieved_at":{"description":"When the registers were queried (UTC).","type":"string"},"sources":{"description":"The registers consulted.","items":{"type":"string"},"type":"array"},"vat":{"anyOf":[{"$ref":"#/components/schemas/VatCheck"},{"type":"null"}],"description":"VAT number validation, when a VAT number is known."}},"required":["matched_by","confidence","company","directors","financials","other_candidates","flags","sources","coverage_note","retrieved_at","age_seconds","from_cache"],"title":"VerifyCompanyResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Company check (KYB) and business verification: VAT validation (VIES), LEI lookup, registry status and company directors ($0.009, x402)","x-payment-info":{"price":{"amount":"0.009000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.009"}},"/registry/company-profile-service/v1/company-profile/get_profile":{"post":{"description":"Builds a structured profile of a company from its own public website. Send a `domain` (stripe.com or a full URL) or just a `company_name`, and an optional `language` for the free-text answer (the website itself can be in any language). The home page and the about, contact, pricing and legal pages its own links point to are read through a proxy; public e-mail addresses, phone numbers and social links are collected mechanically from the page code and structured data; a language model writes the profile (name, description, offering, target customers, pricing summary, headquarters, founding year); a second, stronger pass runs only when the first answer is incomplete. The answer is validated against a fixed schema and repaired where a safe fix exists. Nothing in the contact and social fields is invented: every e-mail address and profile link must appear in the pages read, otherwise it is removed and listed in `unverified_removed`. `domain_info` adds public registration data (registrar, registration and expiry dates, domain age, name servers, public registrant organization) and mail platform facts. Only the public website and public registries are used, not a private database, so a field the site does not state is null. Page text is treated as data, never as instructions. A call that fails (site unreachable, no usable answer) is not charged. Costs $0.009 per call; there is no free trial. Results are stored and reused: the response says when the website was read (`retrieved_at`), how old the answer is (`age_seconds`) and whether it came from a stored result (`from_cache`); send `max_age_seconds` to choose the oldest answer you accept, or 0 to force a fresh read. A call usually takes 5 to 30 seconds (about a second when a stored result is reused). No free trial: every call is paid via x402 at $0.009 USDC per call.","operationId":"company_profile_get_profile","requestBody":{"content":{"application/json":{"example":{"company_name":"string","domain":"string","language":"string","max_age_seconds":0},"schema":{"properties":{"company_name":{"default":null,"description":"The company's name, when you do not know its website (e.g. `Mistral AI`): the official site\nis looked up first. `domain` wins when both are given.","type":["string","null"]},"domain":{"default":null,"description":"The company's website: a domain such as `stripe.com` or a full URL (`https://stripe.com/`).\nGive this or `company_name`.","type":["string","null"]},"language":{"default":null,"description":"Language of the free-text values of the answer (`en` by default; `fr`, `de`, `es`, `pt-BR`...).\nThe pages may be in any language; the JSON keys are always English.","type":["string","null"]},"max_age_seconds":{"default":null,"description":"The oldest result you accept, in seconds. Omit it for the default (profiles up to 24 hours old);\n`0` forces a fresh read of the website. The response always says how old it is.","format":"uint64","minimum":0,"type":["integer","null"]}},"title":"GetCompanyProfileRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"age_seconds":0,"applied_fixes":[null],"domain":"string","domain_info":{"domain_age_years":0,"email_provider":"string","expires_at":"string","mail_services":["string"],"nameservers":["string"],"registered_at":"string","registrable_domain":"string","registrant_org":"string","registrar":"string","statuses":["string"]},"from_cache":false,"output_language":"string","pages_from_cache":0,"pages_read":["string"],"passes":0,"profile":null,"remaining_issues":[null],"resolved_from_name":false,"retrieved_at":"string","source_language":"string","stale_pages":0,"unverified_removed":["string"],"valid":false},"schema":{"properties":{"age_seconds":{"description":"How old this answer is, in seconds (0 for a fresh read).","format":"uint64","minimum":0,"type":"integer"},"applied_fixes":{"description":"Every automatic correction applied to the model's answer.","items":true,"type":"array"},"domain":{"description":"The host that was profiled, lowercased, without scheme or path.","type":"string"},"domain_info":{"$ref":"#/components/schemas/DomainInfo","description":"Public registration and DNS facts about the domain: registrar, registration and expiry dates,\nage, name servers, public registrant organization, mail platform and sending services.\nFields that could not be looked up are absent or empty."},"from_cache":{"description":"`true` when this answer was served from a stored result rather than a fresh read.","type":"boolean"},"output_language":{"description":"Language of the profile's free-text values.","type":"string"},"pages_from_cache":{"description":"How many of the pages used came from a stored copy (fresh enough for `max_age_seconds`).","format":"uint32","minimum":0,"type":"integer"},"pages_read":{"description":"The pages that were actually read to build the profile.","items":{"type":"string"},"type":"array"},"passes":{"description":"Number of model passes used (2 only when the first answer was incomplete).","format":"uint8","maximum":255,"minimum":0,"type":"integer"},"profile":{"description":"The profile: `name`, `description`, `offering`, `target_customers`, `pricing_summary`,\n`headquarters`, `founded`, `contact` (`emails`, `phones`) and `social` (`linkedin`, `twitter`,\n`github`, `facebook`, `instagram`, `youtube`). A value the pages do not state is `null`."},"remaining_issues":{"description":"Every schema violation that could not be corrected.","items":true,"type":"array"},"resolved_from_name":{"description":"`true` when the website was found from `company_name`.","type":"boolean"},"retrieved_at":{"description":"When the website was read to build this profile (UTC).","type":"string"},"source_language":{"description":"Language of the website (ISO 639-1 code).","type":"string"},"stale_pages":{"description":"How many pages could not be refreshed and were answered from an older stored copy.","format":"uint32","minimum":0,"type":"integer"},"unverified_removed":{"description":"E-mail addresses and social links the model produced that do NOT appear in the pages read;\nthey were removed from `profile` so nothing in it is invented.","items":{"type":"string"},"type":"array"},"valid":{"description":"Whether the profile satisfies the profile schema after automatic correction.","type":["boolean","null"]}},"required":["domain","resolved_from_name","pages_read","profile","domain_info","source_language","output_language","passes","applied_fixes","remaining_issues","unverified_removed","retrieved_at","age_seconds","from_cache","pages_from_cache","stale_pages"],"title":"GetCompanyProfileResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Company profile and enrichment from a domain or a name: offering, public contacts, social links and WHOIS domain data as valid JSON ($0.009, x402)","x-payment-info":{"price":{"amount":"0.009000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.009"}},"/registry/contact-finder-service/v1/contact-finder/get_contacts":{"post":{"description":"Finds a website's public business contacts. Send a `domain` (stripe.com or a full URL) or just a `company_name`. The home page and the contact, support, legal, press, careers and about pages its own links point to (links in English, French, German, Spanish, Italian, Portuguese and Dutch) are read through a proxy, together with the security.txt file. Each contact is returned with its kind (email, phone, contact form, messaging link, security contact, social profile), its role (sales, support, press, jobs, billing, legal, privacy, security, general), the page it was found on, how it appears there (mailto link, structured data, plain text) and a confidence level. For every e-mail address the response says whether its domain has mail servers, and `domain_mail` reports the site's mail platform, SPF and DMARC policies. Only contacts literally published on the pages read are returned: no guessed address, and no named individual (personal-looking addresses are only counted in `omitted_non_role_addresses`). No language model is involved. A search that finds no contact at all, or a site that cannot be read, is not charged. Costs $0.009 per call. Results are stored and reused: the response says when the website was read (`retrieved_at`), how old the answer is (`age_seconds`) and whether it came from a stored result (`from_cache`); send `max_age_seconds` to choose the oldest answer you accept, or 0 to force a fresh read. A call usually takes 3 to 20 seconds (about a second when a stored result is reused). No free trial: every call is paid via x402 at $0.009 USDC per call.","operationId":"contact_finder_get_contacts","requestBody":{"content":{"application/json":{"example":{"company_name":"string","domain":"string","max_age_seconds":0},"schema":{"properties":{"company_name":{"default":null,"description":"The company's name, when you do not know its website (e.g. `Mistral AI`): the official site\nis looked up first. `domain` wins when both are given.","type":["string","null"]},"domain":{"default":null,"description":"The company's website: a domain such as `stripe.com` or a full URL (`https://stripe.com/`).\nGive this or `company_name`.","type":["string","null"]},"max_age_seconds":{"default":null,"description":"The oldest result you accept, in seconds. Omit it for the default (results up to 12 hours old);\n`0` forces a fresh read of the website. The response always says how old it is.","format":"uint64","minimum":0,"type":["integer","null"]}},"title":"GetContactsRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"age_seconds":0,"contacts":[{"confidence":"string","found_in":"string","kind":"string","label":"string","mx_valid":false,"role":"string","source_url":"string","value":"string"}],"domain":"string","domain_mail":{"dmarc":"string","mx":["string"],"provider":"string","spf":"string"},"from_cache":false,"has_contact_form":false,"omitted_non_role_addresses":0,"pages_from_cache":0,"pages_read":["string"],"resolved_from_name":false,"retrieved_at":"string","security_contact":"string","source_language":"string","stale_pages":0},"schema":{"properties":{"age_seconds":{"description":"How old this answer is, in seconds (0 for a fresh read).","format":"uint64","minimum":0,"type":"integer"},"contacts":{"description":"Public business contacts: role mailboxes, phones, contact forms, messaging links, security\ncontact and social profiles -- only what is literally published on the pages read.","items":{"$ref":"#/components/schemas/Contact"},"type":"array"},"domain":{"description":"The host that was searched, lowercased, without scheme or path.","type":"string"},"domain_mail":{"$ref":"#/components/schemas/DomainMail","description":"Mail health of the website's own domain: mail servers, platform, SPF and DMARC policies."},"from_cache":{"description":"`true` when this answer was served from a stored result rather than a fresh read.","type":"boolean"},"has_contact_form":{"description":"Whether a contact form was found.","type":"boolean"},"omitted_non_role_addresses":{"description":"E-mail addresses that look personal (a named individual) or have no recognizable role: they\nare not returned, only counted.","format":"uint32","minimum":0,"type":"integer"},"pages_from_cache":{"description":"How many of the pages used came from a stored copy (fresh enough for `max_age_seconds`).","format":"uint32","minimum":0,"type":"integer"},"pages_read":{"description":"The pages that were actually read.","items":{"type":"string"},"type":"array"},"resolved_from_name":{"description":"`true` when the website was found from `company_name`.","type":"boolean"},"retrieved_at":{"description":"When the website was read to build this list (UTC).","type":"string"},"security_contact":{"description":"The first security contact published (security.txt), when there is one.","type":["string","null"]},"source_language":{"description":"Language of the website (ISO 639-1 code).","type":"string"},"stale_pages":{"description":"How many pages could not be refreshed and were answered from an older stored copy.","format":"uint32","minimum":0,"type":"integer"}},"required":["domain","resolved_from_name","pages_read","source_language","contacts","domain_mail","has_contact_form","omitted_non_role_addresses","retrieved_at","age_seconds","from_cache","pages_from_cache","stale_pages"],"title":"GetContactsResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Contact finder: public business emails, phone numbers, contact forms and support pages of a domain, with role and source ($0.009, x402)","x-payment-info":{"price":{"amount":"0.009000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.009"}},"/registry/domain-security-service/v1/domain-security/get_report":{"post":{"description":"Security posture report of a domain. Send a `domain` (stripe.com, www.stripe.com or a URL). The service resolves it, then checks: the TLS certificate (validity for the host name, issuer, expiry date and days left, protocol version), whether plain HTTP redirects to HTTPS, the HTTP security headers (HSTS, CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy) and software-version disclosure, the mail-spoofing defences (SPF and DMARC policies, MTA-STS, mail platform), DNSSEC, name servers, CAA records, and whether the host's IPv4 addresses are on public IP blocklists. The answer lists findings with severity (critical, high, medium, low, info) and a stable code, plus a 0-100 score and an A-F grade. Only public addresses are probed, with a single request per check: this is an assessment, not an intrusion scan. No language model is involved. A domain that does not resolve is not charged. Costs $0.009 per call. Reports are stored and reused: the response says when the domain was assessed (`retrieved_at`), how old the report is (`age_seconds`) and whether it came from a stored result (`from_cache`); send `max_age_seconds` to choose the oldest report you accept, or 0 to force a fresh assessment. A call usually takes 1 to 6 seconds. No free trial: every call is paid via x402 at $0.009 USDC per call.","operationId":"domain_security_get_report","requestBody":{"content":{"application/json":{"example":{"domain":"string","max_age_seconds":0},"schema":{"properties":{"domain":{"description":"The domain to assess: `stripe.com`, `www.stripe.com` or a full URL (only the host is used).","type":"string"},"max_age_seconds":{"default":null,"description":"The oldest report you accept, in seconds. Omit it for the default (reports up to 1 hour old);\n`0` forces a fresh assessment. The response always says how old it is.","format":"uint64","minimum":0,"type":["integer","null"]}},"required":["domain"],"title":"GetReportRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"age_seconds":0,"blocklisted":[{"cidr":"string","ip":"string","source":"string"}],"dns":{"caa":["string"],"dnssec":false,"name_servers":["string"]},"domain":"string","findings":[{"code":"string","message":"string","severity":"string"}],"from_cache":false,"grade":"string","http":{"discloses_version":false,"headers_missing":["string"],"headers_present":["string"],"http_redirects_to_https":false,"https_status":0},"ip_addresses":["string"],"mail":{"dmarc":"string","mta_sts":false,"mx":["string"],"provider":"string","spf":"string"},"retrieved_at":"string","score":0,"tls":{"days_remaining":0,"error":"string","expires_at":"string","issuer":"string","protocol":"string","reachable":false,"san_count":0,"valid":false}},"schema":{"properties":{"age_seconds":{"description":"How old this report is, in seconds (0 for a fresh assessment).","format":"uint64","minimum":0,"type":"integer"},"blocklisted":{"description":"Addresses found on a public IP blocklist (IPv4 only).","items":{"$ref":"#/components/schemas/BlocklistHit"},"type":"array"},"dns":{"$ref":"#/components/schemas/DnsSecurity"},"domain":{"description":"The host that was assessed, lowercased, without scheme or path.","type":"string"},"findings":{"description":"Everything worth acting on, most severe first.","items":{"$ref":"#/components/schemas/Finding"},"type":"array"},"from_cache":{"description":"`true` when this report was served from a stored result.","type":"boolean"},"grade":{"description":"`A` (90+), `B` (80+), `C` (65+), `D` (50+), `F`.","type":"string"},"http":{"$ref":"#/components/schemas/HttpSecurity"},"ip_addresses":{"description":"Public IPv4/IPv6 addresses of the host (at most 8).","items":{"type":"string"},"type":"array"},"mail":{"$ref":"#/components/schemas/MailSecurity"},"retrieved_at":{"description":"When the assessment was made (UTC).","type":"string"},"score":{"description":"0 to 100, higher is better; derived from the findings.","format":"uint32","minimum":0,"type":"integer"},"tls":{"$ref":"#/components/schemas/TlsSecurity"}},"required":["domain","ip_addresses","blocklisted","dns","mail","tls","http","findings","score","grade","retrieved_at","age_seconds","from_cache"],"title":"GetReportResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Domain security check: SSL certificate check, DMARC SPF check, DNSSEC, security headers and blocklist status with a score ($0.009, x402)","x-payment-info":{"price":{"amount":"0.009000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.009"}},"/registry/emoji-match-service/v1/emoji-match/suggest_emojis":{"post":{"description":"Reads a piece of text and returns 1 to 5 emoji matching its lexicon/ meaning, most relevant first. Classical lexical/stemming matching (no ML model, no network call) against a curated multilingual emoji keyword dataset -- works BEST in English and French (the two languages this dataset was curated for first); best-effort support for 16 other languages (Spanish, Italian, German, Dutch, Portuguese, Danish, Norwegian, Swedish, Russian, Greek, Turkish, Arabic, Hungarian, Finnish, Romanian, Tamil) whose keyword coverage is a smaller, unreviewed-by-a- native-speaker curated set -- results for those may be sparser or less accurate. No language field on the request: the input is stemmed and scored against every supported language, and the response's own `matched_language` field reports which one actually won. Free for the first few calls (see the platform's free-quota policy), then requires a small x402 payment. No free trial: every call is paid via x402 at $0.002 USDC per call.","operationId":"emoji_match_suggest_emojis","requestBody":{"content":{"application/json":{"example":{"text":"string"},"schema":{"properties":{"text":{"description":"The text to analyze. Works best in English or French; best-effort for 16 other languages\n(see the tool's own description). Truncated to a reasonable length before analysis if\nvery long -- the response reflects the truncated text, not the full input.","type":"string"}},"required":["text"],"title":"SuggestEmojisRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"emojis":["string"],"matched_language":"string"},"schema":{"properties":{"emojis":{"description":"1 to 5 emoji matching the text's lexicon/meaning, most relevant first.","items":{"type":"string"},"type":"array"},"matched_language":{"description":"Which language (ISO 639-1 code, e.g. \"en\"/\"fr\") the best match was found in -- the input\nis stemmed and scored against every supported language, and this reports which one\nactually produced the result, useful to gauge match confidence for an unfamiliar language.","type":"string"}},"required":["emojis","matched_language"],"title":"SuggestEmojisResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Emoji suggestion API: text in 18 languages in, the 1 to 5 best matching emoji out, deterministic and fast ($0.002, x402)","x-payment-info":{"price":{"amount":"0.002000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.002"}},"/registry/extract-correct-service/v1/extract-correct/parse_json":{"post":{"description":"Reads free-form or messy text -- already-valid JSON, JSON wrapped in prose or a markdown code fence, or malformed JSON (trailing commas, single-quoted strings, unquoted keys, a truncated array/object) -- and returns the extracted structured JSON value. 100% local, deterministic extraction and repair (a classical JSON-repair algorithm plus a hand-written balanced-bracket scanner) -- no LLM call, no network dependency of any kind, same output for the same input every time. If a JSON Schema is supplied via `schema`, the extracted value is also validated against it and auto-corrected where a bounded, deterministic fix rule applies -- type coercion between string/number/boolean, filling a missing required property that has a schema-declared default, stripping properties `additionalProperties: false` disallows, case-insensitive enum matching, and clamping out-of-range numbers/arrays to their schema minimum/maximum/maxItems -- never a fuzzy or invented guess: an enum with no exact case-insensitive match, a `pattern`/`format` mismatch, or a `minItems` violation with too few real items is left as-is and reported in `remaining_issues`, never silently guessed or dropped. The response's `extraction_method`, `applied_fixes`, and `remaining_issues` fields make every transformation this tool made -- or couldn't make -- fully transparent. Useful for JSON extraction, JSON repair, cleanup, schema validation, structured-data normalization, and auto-correction of near-miss payloads (e.g. copy-pasted config, an upstream API's loosely-formatted response, a form submission). Free for the first few calls (see the platform's free-quota policy), then a small x402 payment. No free trial: every call is paid via x402 at $0.006 USDC per call.","operationId":"extract_correct_parse_json","requestBody":{"content":{"application/json":{"example":{"schema":null,"text":"string"},"schema":{"properties":{"schema":{"default":null,"description":"Optional JSON Schema to validate the extracted value against and auto-correct where a\nbounded, deterministic fix rule applies. Omitted = extraction only, no validation."},"text":{"description":"Free-form or messy text to extract structured JSON from -- already-valid JSON, JSON\nwrapped in prose or a markdown code fence, or malformed JSON (trailing commas,\nsingle-quoted strings, unquoted keys, a truncated array/object).","type":"string"}},"required":["text"],"title":"ParseJsonRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"applied_fixes":[{"detail":"string","path":"string","rule":"string"}],"data":null,"extraction_method":"string","remaining_issues":[{"keyword":"string","message":"string","path":"string"}],"valid":false},"schema":{"properties":{"applied_fixes":{"description":"Every correction actually applied, in the order applied.","items":{"$ref":"#/components/schemas/AppliedFix"},"type":"array"},"data":{"description":"The extracted (and, if a schema was supplied, corrected) JSON value."},"extraction_method":{"description":"How `data` was obtained: `\"direct\"` (already valid JSON), `\"repaired\"` (malformed JSON\nfixed in place), or `\"extracted_and_repaired\"` (isolated from surrounding text, then\nfixed).","type":"string"},"remaining_issues":{"description":"Every schema violation that remains after correction -- non-empty only when `schema` was\nsupplied and at least one issue couldn't be fixed by a bounded v1 rule.","items":{"$ref":"#/components/schemas/RemainingIssue"},"type":"array"},"valid":{"description":"Whether `data` satisfies `schema` after correction. `None` when no `schema` was supplied\n-- never conflated with \"assumed valid\".","type":["boolean","null"]}},"required":["data","extraction_method","applied_fixes","remaining_issues"],"title":"ParseJsonResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"JSON repair API: extract valid JSON from messy text or model output and fix it against a JSON Schema ($0.006, x402)","x-payment-info":{"price":{"amount":"0.006000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.006"}},"/registry/ip-blocklist/v1/ip-blocklist/check":{"get":{"description":"Checks a single IPv4 address against this service's own merged index of FireHOL level1/level2, Spamhaus DROP, Tor exit nodes, Feodo Tracker, and Talos Intelligence -- built from periodic background fetches, never a live per-call lookup against the upstream lists. Returns EVERY source that matches, not just the first, so a caller can weigh an IP flagged by several independent sources more heavily than one flagged by a single list. Free for the first few calls, then a real x402 payment (a `402` response carrying a `PAYMENT-REQUIRED` challenge) is required to continue. No free trial: every call is paid via x402 at $0.010 USDC per call.","operationId":"ip_blocklist_check_ip","parameters":[{"in":"query","name":"ip","required":true,"schema":{"description":"The IPv4 address to check, e.g. `\"1.2.3.4\"`.","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"banned":false,"ip":"string","matches":[{"cidr":"string","source":"string"}]},"schema":{"properties":{"banned":{"description":"`true` if `matches` is non-empty -- a convenience flag, equivalent to `!matches.is_empty()`.","type":"boolean"},"ip":{"type":"string"},"matches":{"description":"Every source that contains this IP, not just the first one found -- an IP flagged by\nseveral sources is a stronger signal than one flagged by a single list.","items":{"$ref":"#/components/schemas/BlocklistMatch"},"type":"array"}},"required":["ip","banned","matches"],"title":"CheckIpResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"IP reputation check: is this IPv4 address on a public threat blocklist (Tor exit nodes, botnets, spam networks) ($0.010, x402)","x-payment-info":{"price":{"amount":"0.010000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.010"}},"/registry/proxy-pool/v1/proxy-pool/get_best_proxy":{"get":{"description":"Picks randomly among the 5 fastest currently-alive proxies (ranked by a smoothed moving-average latency across several checks, not a single lucky sample) matching an optional country/protocol/anonymity filter -- never the exact same proxy as the immediately preceding call, so repeated calls (from the same or a different caller) spread traffic across the pool instead of concentrating it on a single proxy. Errors `not_found` if no verified-alive proxy matches. Free for the first few calls, then a real x402 payment (a `402` response carrying a `PAYMENT-REQUIRED` challenge) is required to continue. No free trial: every call is paid via x402 at $0.010 USDC per call.","operationId":"proxy_pool_get_best_proxy","parameters":[{"in":"query","name":"anonymity","required":false,"schema":{"default":null,"description":"e.g. `\"elite\"`/`\"anonymous\"`/`\"transparent\"`. Omitted/empty = no filter.","type":["string","null"]}},{"in":"query","name":"city","required":false,"schema":{"default":null,"description":"City name as declared by the source, e.g. `\"Paris\"`. Omitted/empty = no filter.","type":["string","null"]}},{"in":"query","name":"country","required":false,"schema":{"default":null,"description":"2-letter country code, e.g. `\"FR\"`. Omitted/empty = no filter.","type":["string","null"]}},{"in":"query","name":"protocol","required":false,"schema":{"default":null,"description":"One of the proxy's own declared protocols, e.g. `\"socks5\"`. Omitted/empty = no filter.","type":["string","null"]}}],"responses":{"200":{"content":{"application/json":{"example":{"proxy":{"anonymity":"string","checked_alive":false,"checked_at":0,"checked_consecutive_successes":0,"checked_ema_latency_ms":0,"checked_latency_ms":0,"checked_protocol":"string","city":"string","country":"string","id":"string","ip":"string","port":0,"protocols":["string"]}},"schema":{"properties":{"proxy":{"$ref":"#/components/schemas/ProxyView"}},"required":["proxy"],"title":"GetBestProxyResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Free proxy API: get one fast, verified-alive proxy (HTTP, SOCKS) filtered by country, protocol and anonymity, for scraping ($0.010, x402)","x-payment-info":{"price":{"amount":"0.010000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.010"}},"/registry/sanctions-check-service/v1/sanctions-check/screen_name":{"post":{"description":"Screens a person, company, vessel or aircraft name against the OFAC Specially Designated Nationals list, the European Union consolidated financial sanctions list and the United Nations Security Council consolidated list. Send the `name`; optionally restrict it with `type` (person, entity, vessel, aircraft) and give a person's `birth_year` to rank listed namesakes with another birth year lower. Matching ignores word order (`Putin, Vladimir` = `Vladimir Putin`), accents and capitalisation, tolerates one-letter spelling variants in longer words, and also searches every published alias. The answer is a verdict (`match`, `possible_match` or `no_match`) and up to ten matches, each with its list, entry id, listed name, the alias that matched, a 0-1 score, programmes, countries, listing date, published birth years and remarks. The response also states which lists were screened with their size, publication date and download time, and which could not be loaded. The lists are downloaded again every six hours. Fixed rules, no language model. A `no_match` does not clear a party and a match needs human review: this is a screening aid, not legal advice. If the lists are not loaded the call fails and is not charged. Costs $0.01 per call and takes well under a second. No free trial: every call is paid via x402 at $0.01 USDC per call.","operationId":"sanctions_check_screen_name","requestBody":{"content":{"application/json":{"example":{"birth_year":0,"name":"string","type":"string"},"schema":{"properties":{"birth_year":{"default":null,"description":"A person's year of birth. Listed people whose published birth years do not include it are\nranked lower and marked `birth_year_consistent: false`.","format":"uint16","maximum":65535,"minimum":0,"type":["integer","null"]},"name":{"description":"The name to screen: a person (`Vladimir Putin`, `Putin, Vladimir`) or a company, vessel or\norganisation. Word order, accents, capitalisation and small spelling variants do not matter.","type":"string"},"type":{"default":null,"description":"Restrict the screening to `person`, `entity`, `vessel` or `aircraft`. Omit it to screen everything.","type":["string","null"]}},"required":["name"],"title":"ScreenNameRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"disclaimer":"string","lists_missing":["string"],"lists_screened":[{"entries":0,"fetched_at":"string","list":"string","published":"string"}],"matches":[{"aliases":["string"],"birth_year_consistent":false,"birth_years":[0],"countries":["string"],"entry_id":"string","kind":"string","list":"string","listed_name":"string","listed_on":"string","match_type":"string","matched_alias":"string","programs":["string"],"remarks":"string","score":0}],"name":"string","screened_at":"string","verdict":"string"},"schema":{"properties":{"disclaimer":{"type":"string"},"lists_missing":{"description":"Lists that could not be loaded: the screening did not cover them.","items":{"type":"string"},"type":"array"},"lists_screened":{"description":"The lists that were screened, with their size and freshness.","items":{"$ref":"#/components/schemas/ListStatus"},"type":"array"},"matches":{"description":"The best matches, highest score first (at most 10).","items":{"$ref":"#/components/schemas/SanctionMatch"},"type":"array"},"name":{"description":"The name as screened.","type":"string"},"screened_at":{"description":"When the screening ran (UTC).","type":"string"},"verdict":{"description":"`match` (an exact or close match), `possible_match` (a partial match to review) or `no_match`.","type":"string"}},"required":["name","verdict","matches","lists_screened","lists_missing","disclaimer","screened_at"],"title":"ScreenNameResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Sanctions check: OFAC list check and sanctions screening of a person or company name against OFAC SDN, EU and UN lists (AML KYC) ($0.01, x402)","x-payment-info":{"price":{"amount":"0.010000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.01"}},"/registry/token-verdict-service/v1/token-verdict/get_verdict":{"post":{"description":"Safety verdict for a token before an agent buys it. Send the token contract `address` and, optionally, the `chain` (base by default; ethereum, bsc, polygon, arbitrum, optimism and avalanche are supported). The answer is a verdict (`safe`, `caution`, `danger`, or `unknown` when the security data is unavailable, which is never a green light), a 0-100 safety score and the findings that drove it, each with a severity and a stable code. It checks: honeypot behaviour and buy and sell taxes; whether the contract admin can mint, pause transfers, block addresses, change taxes, reclaim control or hide behind a proxy; whether the source code is verified; liquidity in USD across pools, how much of it is locked and how old the pools are; holder count and concentration (creator, admin, ten largest wallets); price, fully diluted value, 24-hour volume and trades. The rules are fixed and published in the findings, so the same token gives the same verdict: no language model is involved. This is an automated risk screen, not financial advice. A token that is not found is not charged. Costs $0.01 per call. Results are stored briefly and reused: the response says when the data was read (`retrieved_at`), how old it is (`age_seconds`) and whether it came from a stored result (`from_cache`); send `max_age_seconds` to choose the oldest verdict you accept, or 0 to force a fresh check. A call usually takes 1 to 3 seconds. No free trial: every call is paid via x402 at $0.01 USDC per call.","operationId":"token_verdict_get_verdict","requestBody":{"content":{"application/json":{"example":{"address":"string","chain":"string","max_age_seconds":0},"schema":{"properties":{"address":{"description":"The token contract address (`0x` followed by 40 hex characters).","type":"string"},"chain":{"default":null,"description":"The chain: `base` (default), `ethereum`, `bsc`, `polygon`, `arbitrum`, `optimism` or `avalanche`.","type":["string","null"]},"max_age_seconds":{"default":null,"description":"The oldest verdict you accept, in seconds. Omit it for the default (verdicts up to 5 minutes\nold); `0` forces a fresh check. The response always says how old it is.","format":"uint64","minimum":0,"type":["integer","null"]}},"required":["address"],"title":"GetVerdictRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"address":"string","age_seconds":0,"chain":"string","contract":{"blacklist":false,"hidden_owner":false,"mintable":false,"owner":"string","owner_can_reclaim":false,"ownership_renounced":false,"pausable":false,"proxy":false,"self_destruct":false,"source_verified":false,"taxes_modifiable":false},"disclaimer":"string","findings":[{"code":"string","message":"string","severity":"string"}],"from_cache":false,"holders":{"count":0,"creator_percent":0,"owner_percent":0,"top10_wallets_percent":0},"liquidity":{"locked_percent":0,"pool_age_days":0,"pools":0,"top_pool":"string","total_usd":0},"market":{"buys_24h":0,"fully_diluted_value_usd":0,"price_change_24h_percent":0,"price_usd":0,"sells_24h":0,"volume_24h_usd":0},"name":"string","retrieved_at":"string","safety_score":0,"sources":["string"],"symbol":"string","trading":{"buy_tax_percent":0,"cannot_sell_all":false,"honeypot":false,"sell_tax_percent":0},"verdict":"string"},"schema":{"properties":{"address":{"type":"string"},"age_seconds":{"description":"How old this verdict is, in seconds (0 for a fresh check).","format":"uint64","minimum":0,"type":"integer"},"chain":{"type":"string"},"contract":{"$ref":"#/components/schemas/ContractInfo"},"disclaimer":{"description":"Always states that this is an automated risk screen, not advice.","type":"string"},"findings":{"description":"Everything that drove the verdict, most severe first.","items":{"$ref":"#/components/schemas/Finding"},"type":"array"},"from_cache":{"description":"`true` when served from a stored result.","type":"boolean"},"holders":{"$ref":"#/components/schemas/HoldersInfo"},"liquidity":{"$ref":"#/components/schemas/LiquidityInfo"},"market":{"$ref":"#/components/schemas/MarketInfo"},"name":{"type":["string","null"]},"retrieved_at":{"description":"When the data was read (UTC).","type":"string"},"safety_score":{"description":"0 to 100, higher is safer; derived from the findings.","format":"uint32","minimum":0,"type":"integer"},"sources":{"description":"The data sources consulted.","items":{"type":"string"},"type":"array"},"symbol":{"type":["string","null"]},"trading":{"$ref":"#/components/schemas/TradingInfo"},"verdict":{"description":"`safe`, `caution`, `danger` or `unknown` (the security source did not answer: not a green light).","type":"string"}},"required":["address","chain","verdict","safety_score","findings","contract","trading","liquidity","market","holders","sources","disclaimer","retrieved_at","age_seconds","from_cache"],"title":"GetVerdictResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Token verdict and security check: is this token safe? Honeypot, rug pull and scam detection with taxes, liquidity and admin powers ($0.01, x402)","x-payment-info":{"price":{"amount":"0.010000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.01"}},"/registry/url-extract-service/v1/url-extract/get_company_profile":{"post":{"description":"Builds a structured profile of a company from its own public website. Send a `domain` (stripe.com or a full URL) or just a `company_name`, and an optional `language` for the free-text answer (the website itself can be in any language). The home page and the about, contact, pricing and legal pages its own links point to are read through a proxy; public e-mail addresses, phone numbers and social links are collected mechanically from the page code and structured data; a language model writes the profile (name, description, offering, target customers, pricing summary, headquarters, founding year); a second, stronger pass runs only when the first answer is incomplete. The answer is validated against a fixed schema and repaired where a safe fix exists. Nothing in the contact and social fields is invented: every e-mail address and profile link must appear in the pages read, otherwise it is removed and listed in `unverified_removed`. `domain_info` adds public registration data (registrar, registration and expiry dates, domain age, name servers, public registrant organization) and mail platform facts. Only the public website and public registries are used, not a private database, so a field the site does not state is null. Page text is treated as data, never as instructions. A call that fails (site unreachable, no usable answer) is not charged. Costs $0.009 per call; there is no free trial. A call usually takes 5 to 30 seconds. No free trial: every call is paid via x402 at $0.009 USDC per call.","operationId":"url_extract_get_company_profile","requestBody":{"content":{"application/json":{"example":{"company_name":"string","domain":"string","language":"string"},"schema":{"properties":{"company_name":{"default":null,"description":"The company's name, when you do not know its website (e.g. `Mistral AI`): the official site\nis looked up first. `domain` wins when both are given.","type":["string","null"]},"domain":{"default":null,"description":"The company's website: a domain such as `stripe.com` or a full URL (`https://stripe.com/`).\nGive this or `company_name`.","type":["string","null"]},"language":{"default":null,"description":"Language of the free-text values of the answer (`en` by default; `fr`, `de`, `es`, `pt-BR`...).\nThe pages may be in any language; the JSON keys are always English.","type":["string","null"]}},"title":"GetCompanyProfileRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"applied_fixes":[null],"domain":"string","domain_info":{"domain_age_years":0,"email_provider":"string","expires_at":"string","mail_services":["string"],"nameservers":["string"],"registered_at":"string","registrable_domain":"string","registrant_org":"string","registrar":"string","statuses":["string"]},"output_language":"string","pages_read":["string"],"passes":0,"profile":null,"remaining_issues":[null],"resolved_from_name":false,"source_language":"string","unverified_removed":["string"],"valid":false},"schema":{"properties":{"applied_fixes":{"description":"Every automatic correction applied to the model's answer.","items":true,"type":"array"},"domain":{"description":"The host that was profiled, lowercased, without scheme or path.","type":"string"},"domain_info":{"$ref":"#/components/schemas/DomainInfo","description":"Public registration and DNS facts about the domain: registrar, registration and expiry dates,\nage, name servers, public registrant organization, mail platform and sending services.\nFields that could not be looked up are absent or empty."},"output_language":{"description":"Language of the profile's free-text values.","type":"string"},"pages_read":{"description":"The pages that were actually read to build the profile.","items":{"type":"string"},"type":"array"},"passes":{"description":"Number of model passes used (2 only when the first answer was incomplete).","format":"uint8","maximum":255,"minimum":0,"type":"integer"},"profile":{"description":"The profile: `name`, `description`, `offering`, `target_customers`, `pricing_summary`,\n`headquarters`, `founded`, `contact` (`emails`, `phones`) and `social` (`linkedin`, `twitter`,\n`github`, `facebook`, `instagram`, `youtube`). A value the pages do not state is `null`."},"remaining_issues":{"description":"Every schema violation that could not be corrected.","items":true,"type":"array"},"resolved_from_name":{"description":"`true` when the website was found from `company_name`.","type":"boolean"},"source_language":{"description":"Language of the website (ISO 639-1 code).","type":"string"},"unverified_removed":{"description":"E-mail addresses and social links the model produced that do NOT appear in the pages read;\nthey were removed from `profile` so nothing in it is invented.","items":{"type":"string"},"type":"array"},"valid":{"description":"Whether the profile satisfies the profile schema after automatic correction.","type":["boolean","null"]}},"required":["domain","resolved_from_name","pages_read","profile","domain_info","source_language","output_language","passes","applied_fixes","remaining_issues","unverified_removed"],"title":"GetCompanyProfileResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"[Deprecated - use company_profile_get_profile] Company profile from a domain or a name as valid JSON ($0.009, x402)","x-payment-info":{"price":{"amount":"0.009000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.009"}},"/registry/url-extract-service/v1/url-extract/get_structured_data":{"post":{"description":"URL extract with a question (ask a web page a question, get JSON back). Send a url, a plain-language question and, optionally, a JSON Schema. The page is fetched through a proxy and reduced to its main readable content, a language model extracts the answer, and the answer is validated against your schema and repaired where a safe deterministic fix exists (type coercion, missing defaults, out-of-range numbers, unknown properties). The response carries data, valid, every automatic fix applied and every violation that could not be fixed. Also known as: URL extract, page question answering, web page to JSON, schema-guided extraction. Page text is treated as data, never as instructions. A call that fails is not charged. Costs $0.02 per call; there is no free trial. A call usually takes 5 to 40 seconds. No free trial: every call is paid via x402 at $0.02 USDC per call.","operationId":"url_extract_get_structured_data","requestBody":{"content":{"application/json":{"example":{"max_age_seconds":0,"question":"string","schema":null,"url":"string"},"schema":{"properties":{"max_age_seconds":{"default":null,"description":"The oldest answer you accept, in seconds. Omit it for the default (an identical question about\nthe same page up to 1 hour old); `0` forces a fresh read of the page and a fresh answer. The\nresponse always says how old it is.","format":"uint64","minimum":0,"type":["integer","null"]},"question":{"description":"What to extract or answer, in plain language, e.g. \"list the pricing plans with their name\nand monthly price in USD\".","type":"string"},"schema":{"default":null,"description":"Optional JSON Schema the answer must satisfy. When given, the answer is validated against it\nand automatically corrected where a safe fix exists (type coercion, missing defaults,\nout-of-range numbers, unknown properties); anything that cannot be fixed is reported in\n`remaining_issues`. Omitted = a free-form JSON answer, returned as-is."},"url":{"description":"Address of the web page to read (`http` or `https`).","type":"string"}},"required":["url","question"],"title":"GetStructuredDataRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"age_seconds":0,"applied_fixes":[null],"data":null,"final_url":"string","from_cache":false,"page_from_cache":false,"page_truncated":false,"remaining_issues":[null],"retrieved_at":"string","stale_page":false,"title":"string","url":"string","valid":false},"schema":{"properties":{"age_seconds":{"description":"How old this answer is, in seconds (0 for a fresh read).","format":"uint64","minimum":0,"type":"integer"},"applied_fixes":{"description":"Every automatic correction applied to the model's answer, in order.","items":true,"type":"array"},"data":{"description":"The structured answer (an object or an array), corrected against `schema` when one was given."},"final_url":{"description":"The URL actually read, after redirects.","type":"string"},"from_cache":{"description":"`true` when this answer was served from a stored result rather than computed now.","type":"boolean"},"page_from_cache":{"description":"`true` when the page text came from a stored copy (fresh enough for `max_age_seconds`).","type":"boolean"},"page_truncated":{"description":"`true` when the page was longer than the amount of text the answer is based on.","type":"boolean"},"remaining_issues":{"description":"Every schema violation that could not be corrected.","items":true,"type":"array"},"retrieved_at":{"description":"When the page was read to build this answer (UTC).","type":"string"},"stale_page":{"description":"`true` when the page could not be refreshed and an older stored copy was used.","type":"boolean"},"title":{"description":"The page title, when one could be extracted.","type":["string","null"]},"url":{"description":"The URL that was requested.","type":"string"},"valid":{"description":"Whether `data` satisfies `schema` after correction; absent when no schema was given.","type":["boolean","null"]}},"required":["url","final_url","data","applied_fixes","remaining_issues","page_truncated","retrieved_at","age_seconds","from_cache","page_from_cache","stale_page"],"title":"GetStructuredDataResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"URL extract with a question: ask any web page a question and get structured data as JSON that matches your schema ($0.02, x402)","x-payment-info":{"price":{"amount":"0.020000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.02"}},"/registry/websearch/v1/websearch/get_task_status":{"post":{"description":"Reads back the result of a task previously enqueued by `websearch_search_web_async` -- pure read, no search performed. `status` is one of `pending` (still queued/running), `finished` (see `ok`/`result`), or `unknown` (the id is invalid or has expired).","operationId":"websearch_get_task_status","requestBody":{"content":{"application/json":{"example":{"task_id":"string"},"schema":{"properties":{"task_id":{"description":"The `task_id` a `*_async` tool returned.","type":"string"}},"required":["task_id"],"title":"GetTaskStatusRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"ok":false,"result":null,"status":"pending"},"schema":{"properties":{"ok":{"type":["boolean","null"]},"result":true,"status":{"$ref":"#/components/schemas/TaskStatusKind"}},"required":["status"],"title":"GetTaskStatusResponse","type":"object"}}},"description":"Successful response"},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"security":[],"summary":"Polls for the result of a task enqueued by a *_async tool"}},"/registry/websearch/v1/websearch/search_web":{"post":{"description":"Performs a real internet search, ALWAYS fetched through a proxy sourced from `proxy-pool` -- the proxy itself is a FREE PUBLIC proxy; the small fee this tool charges (and the smaller fee it itself pays `proxy-pool`) is for the selection/verification SERVICE, not for the proxy. Never a direct/unproxied request, by design. Reuses a proxy this service has itself recently proven to work, when one is available, before paying `proxy-pool` for a fresh pick. Retries up to 8 times, each attempt through a different proxy, since a single dead/blocked free proxy is common, and always resolves to real results -- a zero-result parse is itself treated as a failure and retried, never returned as a silent empty response. **Response time varies noticeably as a result**: a cached or already-proven-good proxy answers quickly, while a cold search that needs several retries against slow free proxies can take up to roughly two minutes -- a deliberate trade-off for reliability over a fast failure, not an inconsistency. A repeat of the exact same query is served from a short-lived in-process cache instead of paying for and re-fetching again. Returns up to 10 results (title/url/snippet, with redirect links decoded back to the real destination URL). Free for the first few calls, then a real x402 payment (a `402` response carrying a `PAYMENT-REQUIRED` challenge) is required to continue. No free trial: every call is paid via x402 at $0.005 USDC per call.","operationId":"websearch_search_web","requestBody":{"content":{"application/json":{"example":{"query":"string"},"schema":{"properties":{"query":{"description":"The search query text, e.g. `\"rust async runtime comparison\"`.","type":"string"}},"required":["query"],"title":"SearchWebRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"results":[{"snippet":"string","title":"string","url":"string"}]},"schema":{"properties":{"results":{"items":{"$ref":"#/components/schemas/SearchResultItem"},"type":"array"}},"required":["results"],"title":"SearchWebResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"Web search API for agents: search the web and get result titles, URLs and snippets as JSON ($0.005, x402)","x-payment-info":{"price":{"amount":"0.005000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.005"}},"/registry/websearch/v1/websearch/search_web_async":{"post":{"description":"Fire-and-forget sibling of `websearch_search_web`: enqueues the SAME search onto this service's task queue and returns a `task_id` immediately, without waiting for the search itself (which can legitimately take up to ~2 minutes worst-case against slow free proxies). Requires at least one instance of this service running with `PLATFORM_MODE=worker` to ever process the enqueued job. Poll `websearch_get_task_status` with the returned `task_id` for the eventual result, or set `callback_url` to have it POSTed there instead. Priced identically to `websearch_search_web` -- free for the first few calls, then a small x402 payment, same quota. No free trial: every call is paid via x402 at $0.005 USDC per call.","operationId":"websearch_search_web_async","requestBody":{"content":{"application/json":{"example":{"callback_url":"string","query":"string"},"schema":{"properties":{"callback_url":{"default":null,"description":"When set, the worker that processes this task POSTs the eventual result (a `TaskResult`\nJSON body) here, best-effort -- polling `websearch_get_task_status` always works too,\nregardless of whether this is set.","type":["string","null"]},"query":{"description":"The search query text, e.g. `\"rust async runtime comparison\"`.","type":"string"}},"required":["query"],"title":"SearchWebAsyncRequest","type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"example":{"task_id":"string"},"schema":{"description":"The fixed response shape of every `*_async` tool -- deliberately NOT generic over the\nunderlying sync tool's own response type, since no work has actually happened yet at this\npoint.","properties":{"task_id":{"type":"string"}},"required":["task_id"],"title":"AsyncTaskResponse","type":"object"}}},"description":"Successful response"},"402":{"content":{"application/json":{"schema":{"description":"x402 v2 PaymentRequired challenge","properties":{"accepts":{"items":{"properties":{"amount":{"description":"Token atomic units, NOT decimal USD -- see x-payment-info.price.amount for the decimal form.","type":"string"},"asset":{"type":"string"},"extra":{"type":"object"},"maxTimeoutSeconds":{"type":"integer"},"network":{"type":"string"},"payTo":{"type":"string"},"scheme":{"type":"string"}},"type":"object"},"type":"array"},"error":{"type":"string"},"resource":{"properties":{"description":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"x402Version":{"type":"integer"}},"required":["x402Version","accepts"],"type":"object"}}},"description":"Payment required -- a free-call quota exists (default 5 calls, see PLATFORM_FREEMIUM_FREE_CALLS) before this status applies; beyond it, pay via the real x402 protocol (PAYMENT-REQUIRED response header, decode and retry with a signed PAYMENT-SIGNATURE header)."},"default":{"content":{"application/json":{"schema":{"description":"ErrorEnvelope","type":"object"}}},"description":"Standardized error envelope, on every non-2xx response from this fleet: {\"error\": {\"code\": <dotted string, e.g. \"request.bad_request\">, \"index\": <integer>, \"status\": <HTTP status code>, \"message\": <client-safe description>, \"debug\": <object, present only for an authorized caller>}}."}},"summary":"[Deprecated - use websearch_search_web] Enqueues a websearch_search_web job and returns a task id immediately ($0.005, x402)","x-payment-info":{"price":{"amount":"0.005000","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]},"x-price-usdc":"0.005"}}}}