{"openapi":"3.1.0","info":{"title":"Tollkit Extract","version":"0.10.1","description":"Pay-per-call product page extraction. No account, no API key: pay in-band with x402 in USDC on Base or Solana.","x-guidance":"Give POST /extract the URL of ONE product page and it returns schema.org/Product JSON — name, brand, sku, price, currency, availability, images, variants. The page is rendered in a real headless browser and the store's own schema.org data is read before anything is inferred, so JavaScript-built pages work and sku/variants come from the source. Every response carries a `provenance` object saying which fields the merchant declared and which the model inferred, so you can tell a published price from a read one. Use POST /extract/batch when you have more than one URL: up to 5 for one flat payment and one round trip, which is the usual case when comparing a product across stores. GET /preview is free and returns a real extraction of a fixed sample page, so you can judge output quality before spending anything. Failed extractions are never charged. A URL that redirects to what looks like a different page is refused free rather than answered with the wrong product; pass allow_redirect to override. Cached answers say so and carry the original render timestamp.","contact":{"email":"hello@tollkit.dev"}},"servers":[{"url":"https://extract.tollkit.dev"}],"paths":{"/attest":{"servers":[{"url":"https://attest.tollkit.dev"}],"post":{"operationId":"attestPage","summary":"Signed, timestamped proof of what a page contained at a moment in time","description":"Prove what a web page said: signed, timestamped evidence of its text and screenshot, with hashes, the serving IP and TLS certificate. Anyone can verify it later, free. $0.25 per page; a page that fails to load is not charged.","tags":["Attestation"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.250000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Absolute https:// URL of the page to attest to. Anything a dispute could turn on: terms of service, a price, a published policy, a competitor's claim, a listing that may be edited later."},"screenshot":{"type":"boolean","default":true,"description":"Capture and hash a screenshot. On by default — an attestation without one is much weaker evidence. Turn it off for a faster, text-only record."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","description":"A signed, timestamped record of what a page contained. The `attestation` object is the evidence; `content` holds the bytes its hashes are over. Store the whole response — this service keeps no copy, by design, so that the record cannot be altered or withdrawn later.","required":["attestation","content"],"properties":{"attestation":{"type":"object","required":["claim","digest","signature","signer"],"properties":{"claim":{"type":"object","description":"Exactly what was signed. Re-serialize this with sorted keys and no whitespace, keccak256 it, and you get `digest`.","properties":{"version":{"type":"integer"},"url":{"type":"string","description":"The URL as submitted."},"finalUrl":{"type":"string","description":"Where the browser ended up."},"redirected":{"type":"boolean"},"httpStatus":{"type":"integer"},"title":{"type":["string","null"]},"capturedAt":{"type":"string","description":"ISO 8601 render time."},"textSha256":{"type":"string"},"textLength":{"type":"integer"},"screenshotSha256":{"type":["string","null"]},"headers":{"type":"object","description":"Lowercased, sorted; set-cookie removed."},"remoteAddress":{"type":["string","null"],"description":"IP that served it."},"tlsIssuer":{"type":["string","null"]},"tlsSubject":{"type":["string","null"]},"tlsValidFrom":{"type":["string","null"]},"tlsValidTo":{"type":["string","null"]},"attestedBy":{"type":"string","description":"Signer address, inside the signed payload."}}},"digest":{"type":"string","description":"keccak256 of the canonical claim."},"signature":{"type":"string","description":"EIP-191 personal_sign over the digest."},"signer":{"type":"string"},"algorithm":{"type":"string"}}},"content":{"type":"object","properties":{"text":{"type":"string"},"textTruncated":{"type":"boolean"},"screenshotBase64":{"type":["string","null"]},"screenshotMimeType":{"type":["string","null"]}}},"verify":{"type":"string","description":"Free, unauthenticated verification endpoint."}}}}}},"402":{"description":"Payment Required"}}}},"/attest/verify":{"servers":[{"url":"https://attest.tollkit.dev"}],"post":{"operationId":"verifyAttestation","summary":"Free. Re-hash an attestation and check its signature. No account, forever.","tags":["Attestation"],"security":[],"responses":{"200":{"description":"Verification result"}}}},"/attest/signer":{"servers":[{"url":"https://attest.tollkit.dev"}],"get":{"operationId":"attestSigner","summary":"Free. The address attestations are signed by. Pin it.","tags":["Attestation"],"security":[],"responses":{"200":{"description":"Signer address and algorithm"}}}},"/extract":{"post":{"operationId":"extractProduct","summary":"Extract structured Product data from one product page URL","description":"Product details from one product page URL: price, currency, stock, name, brand, SKU/GTIN, images and variants as schema.org/Product JSON, with which fields the store itself published. $0.01 per call; a page it cannot read is not charged.","tags":["Extraction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Absolute https:// URL of ONE product page. Not a search or category page, not a login-gated page, and not a private address."},"allow_redirect":{"type":"boolean","default":false,"description":"By default a URL that redirects to what looks like a different page (a discontinued item bouncing to its category listing) is refused free of charge rather than answered with the wrong product."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","description":"schema.org/Product extracted from the rendered page. Fields the page does not state come back null rather than guessed.","required":["product","page"],"properties":{"product":{"type":"object","properties":{"name":{"type":["string","null"]},"description":{"type":["string","null"]},"brand":{"type":["string","null"]},"sku":{"type":["string","null"]},"price":{"type":["number","null"],"description":"Numeric, no symbol or separators."},"currency":{"type":["string","null"],"description":"ISO 4217. Null whenever price is null."},"availability":{"type":"string","enum":["in_stock","out_of_stock","preorder","unknown"]},"images":{"type":"array","items":{"type":"string"},"description":"Up to 5 absolute URLs copied from the page. Never invented."},"variants":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"values":{"type":"array","items":{"type":"string"}}}}},"url":{"type":"string"}}},"page":{"type":"object","properties":{"url":{"type":"string"},"finalUrl":{"type":"string"},"title":{"type":["string","null"]},"status":{"type":"integer"},"fetchedAt":{"type":"string","description":"ISO timestamp of the RENDER, not of this call. Older than now on a cached result."},"render_ms":{"type":"integer"}}},"cached":{"type":"boolean","description":"True when re-served from a recent render. Still a paid call, and the data is as old as cache_age_seconds says."},"cache_age_seconds":{"type":"integer"},"provenance":{"type":"object","description":"Where each field came from. `declared` fields match what the merchant published in schema.org JSON-LD or Open Graph tags — their own number, the one they stand behind. `inferred` fields were read off the page by a model and deserve less trust. Fields that came back null appear in neither list. Use this to decide which values you can act on directly and which are worth a second look.","properties":{"source":{"type":"string","enum":["json-ld","meta","json-ld+meta","none"]},"declared":{"type":"array","items":{"type":"string"}},"inferred":{"type":"array","items":{"type":"string"}}}},"redirect":{"type":"object","description":"Present only when the browser landed somewhere other than the requested URL.","properties":{"requested":{"type":"string"},"final":{"type":"string"}}}}}}}},"402":{"description":"Payment Required"}}}},"/extract/batch":{"post":{"operationId":"extractProducts","summary":"Extract up to 5 product pages in one call and one payment","description":"The same product extraction for up to 5 product pages in one call and one payment, for price comparison across stores. $0.04 flat; if every URL fails you are not charged.","tags":["Extraction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.040000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["urls"],"properties":{"urls":{"type":"array","maxItems":5,"items":{"type":"string","format":"uri"},"description":"Up to 5 absolute https:// product page URLs. Duplicates are removed and not billed twice."},"allow_redirect":{"type":"boolean","default":false}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","description":"One entry per URL, in the order given. BILLING: flat price for the whole batch, so a batch where only some URLs succeed is charged in full. A batch where NO url succeeds returns 502 and is not charged.","required":["requested","succeeded","failed","results"],"properties":{"requested":{"type":"integer"},"succeeded":{"type":"integer"},"failed":{"type":"integer"},"billing":{"type":"string","description":"The billing rule, restated per response."},"results":{"type":"array","items":{"type":"object","required":["url","ok"],"properties":{"url":{"type":"string"},"ok":{"type":"boolean"},"product":{"type":["object","null"],"description":"As POST /extract. Present when ok."},"page":{"type":["object","null"]},"provenance":{"type":["object","null"],"description":"Per-URL: which fields the merchant declared vs the model inferred."},"cached":{"type":"boolean"},"cache_age_seconds":{"type":"integer"},"error":{"type":"string","description":"Present when ok is false."},"message":{"type":"string"}}}}}}}}},"402":{"description":"Payment Required"}}}},"/read":{"servers":[{"url":"https://web.tollkit.dev"}],"post":{"operationId":"readPage","summary":"Read any web page as clean text","description":"Read any web page as clean text, rendered in a real browser so JavaScript pages work: visible text (up to 50,000 characters), title and final URL. $0.002 per page; a page that fails to load or is empty is not charged.","tags":["Web"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Absolute http(s) URL of a public page. JavaScript pages are rendered first."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["url","final_url","http_status","text","text_length","truncated","fetched_at"],"properties":{"url":{"type":"string"},"final_url":{"type":"string","description":"Where the browser ended up after redirects."},"redirected":{"type":"boolean"},"http_status":{"type":"integer"},"title":{"type":["string","null"]},"text":{"type":"string","description":"The page's visible text, rendered in a real browser, navigation and boilerplate stripped."},"text_length":{"type":"integer"},"truncated":{"type":"boolean","description":"True when the page went on past the 50,000-character cap."},"fetched_at":{"type":"string","description":"ISO 8601 render time."}}}}}},"402":{"description":"Payment Required"}}}},"/screenshot":{"servers":[{"url":"https://web.tollkit.dev"}],"post":{"operationId":"screenshotPage","summary":"Screenshot any web page as a JPEG","description":"Screenshot any web page as a 1280x800 JPEG (base64) with its SHA-256, title and final URL, rendered in a real browser. $0.003 per capture; a page that fails to load is not charged.","tags":["Web"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Absolute http(s) URL of a public page to capture at 1280x800."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["url","final_url","http_status","captured_at","image"],"properties":{"url":{"type":"string"},"final_url":{"type":"string"},"redirected":{"type":"boolean"},"http_status":{"type":"integer"},"title":{"type":["string","null"]},"captured_at":{"type":"string","description":"ISO 8601 capture time."},"image":{"type":"object","required":["mime_type","width","height","sha256","base64"],"properties":{"mime_type":{"type":"string","const":"image/jpeg"},"width":{"type":"integer","const":1280},"height":{"type":"integer","const":800},"sha256":{"type":"string","description":"SHA-256 of the image bytes, hex."},"base64":{"type":"string","description":"The JPEG, base64, no data: prefix."}}}}}}}},"402":{"description":"Payment Required"}}}},"/chain/balance":{"servers":[{"url":"https://chain.tollkit.dev"}],"post":{"operationId":"walletBalance","summary":"Wallet balance","description":"Wallet balance on Base, Ethereum or Solana: give an address, get its native ETH or SOL plus USDC (and USDT on Ethereum and Solana), and any other tokens you list (up to 20), with symbols and decimals applied. Read live from the chain. $0.002 per call; a bad address or an RPC failure is not charged.","tags":["Onchain"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$","description":"Wallet (or contract) address to check."},"chain":{"type":"string","enum":["base","ethereum","solana"],"default":"base","description":"Which chain to read: \"base\" (default), \"ethereum\" or \"solana\"."},"tokens":{"type":"array","maxItems":20,"items":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$"},"description":"Extra ERC-20 contracts (or SPL mints on Solana) to include."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["chain","address","native","tokens"],"properties":{"chain":{"type":"string"},"address":{"type":"string"},"is_contract":{"type":"boolean"},"native":{"type":"object","properties":{"symbol":{"type":"string"},"balance":{"type":"string"},"balance_wei":{"type":"string"}}},"tokens":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"type":["string","null"]},"name":{"type":["string","null"]},"decimals":{"type":"integer"},"balance":{"type":"string"},"balance_raw":{"type":"string"},"error":{"type":"string","description":"not_erc20 when the address isn't a token."}}}},"block_number":{"type":"integer"},"slot":{"type":"integer","description":"Solana only."},"checked_at":{"type":"string"},"explorer_url":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/chain/token":{"servers":[{"url":"https://chain.tollkit.dev"}],"post":{"operationId":"tokenInfo","summary":"Token info","description":"Token info on Base, Ethereum or Solana: give an ERC-20 contract or SPL mint address, get its name, symbol, decimals and total supply (plus mint and freeze authority on Solana), read live from the chain. $0.002 per call; an address that isn't a token is not charged.","tags":["Onchain"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$","description":"ERC-20 contract, or SPL mint on Solana."},"chain":{"type":"string","enum":["base","ethereum","solana"],"default":"base","description":"Which chain to read: \"base\" (default), \"ethereum\" or \"solana\"."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["chain","address","decimals","total_supply"],"properties":{"chain":{"type":"string"},"address":{"type":"string"},"name":{"type":["string","null"]},"symbol":{"type":["string","null"]},"decimals":{"type":"integer"},"total_supply":{"type":"string"},"total_supply_raw":{"type":"string"},"checked_at":{"type":"string"},"explorer_url":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/chain/tx":{"servers":[{"url":"https://chain.tollkit.dev"}],"post":{"operationId":"transactionLookup","summary":"Transaction lookup","description":"Transaction lookup on Base, Ethereum or Solana: give a tx hash or signature, get its status, time, sender, fee and every token movement it made, with symbols and amounts (ERC-20 transfers; on Solana, SOL and token balance changes). $0.002 per call; a hash that isn't found is not charged.","tags":["Onchain"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["hash"],"properties":{"hash":{"type":"string","pattern":"^(0x[0-9a-fA-F]{64}|[1-9A-HJ-NP-Za-km-z]{64,88})$","description":"Transaction hash, or base58 signature on Solana."},"chain":{"type":"string","enum":["base","ethereum","solana"],"default":"base","description":"Which chain to read: \"base\" (default), \"ethereum\" or \"solana\"."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["chain","hash","status"],"properties":{"chain":{"type":"string"},"hash":{"type":"string"},"status":{"type":"string","enum":["success","reverted","pending","failed"]},"block_number":{"type":["integer","null"]},"timestamp":{"type":["string","null"]},"from":{"type":"string"},"to":{"type":["string","null"]},"contract_created":{"type":["string","null"]},"value_eth":{"type":"string"},"value_wei":{"type":"string"},"fee_eth":{"type":["string","null"]},"gas_used":{"type":["string","null"]},"method_id":{"type":["string","null"]},"token_transfers":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"symbol":{"type":["string","null"]},"from":{"type":"string"},"to":{"type":"string"},"amount":{"type":["string","null"]},"amount_raw":{"type":"string"}}}},"token_transfers_total":{"type":"integer"},"explorer_url":{"type":"string"},"token_changes":{"type":"array","description":"Solana only: per-owner token balance changes.","items":{"type":"object","properties":{"owner":{"type":"string"},"mint":{"type":"string"},"symbol":{"type":["string","null"]},"change":{"type":"string"}}}}}}}}},"402":{"description":"Payment Required"}}}},"/chain/price":{"servers":[{"url":"https://chain.tollkit.dev"}],"post":{"operationId":"tokenPrice","summary":"Token price","description":"Token price in USD from on-chain pools, on Base, Ethereum or Solana: give a token, get its current price from its deepest Uniswap v3 pool (Orca Whirlpool on Solana) against USDC or WETH/SOL, with the pool and its depth, and a flag when liquidity is thin. Read live from the chain, not a price API. $0.002 per call; a token with no pool is not charged.","tags":["Onchain"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$","description":"ERC-20 contract or SPL mint to price."},"chain":{"type":"string","enum":["base","ethereum","solana"],"default":"base","description":"Which chain to read: \"base\" (default), \"ethereum\" or \"solana\"."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["chain","token","price_usd","source","low_liquidity","priced_at"],"properties":{"chain":{"type":"string"},"token":{"type":"string"},"symbol":{"type":["string","null"]},"name":{"type":["string","null"]},"price_usd":{"type":"number"},"source":{"type":"object","properties":{"dex":{"type":"string"},"pool":{"type":"string"},"fee_tier":{"type":"integer"},"quote_token":{"type":"string"}}},"pool_depth_usd":{"type":"integer","description":"USD value of the quote token the pool holds: how much buying it could absorb."},"low_liquidity":{"type":"boolean","description":"True under $10,000 of depth; treat the price as indicative."},"pools_checked":{"type":"integer"},"priced_at":{"type":"string"},"note":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/sec/company":{"servers":[{"url":"https://data.tollkit.dev"}],"post":{"operationId":"secCompany","summary":"SEC company profile and filings","description":"SEC company lookup: give a US stock ticker or CIK, get the company's legal name, exchange, industry, state, fiscal year end and its latest SEC filings (10-K, 10-Q, 8-K, Form 4...) with direct links, optionally filtered by form. Straight from SEC EDGAR. $0.002 per call; an unknown ticker is not charged.","tags":["Finance"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ticker":{"type":"string","description":"US stock ticker, e.g. AAPL. Give this or cik."},"cik":{"type":"integer","description":"SEC Central Index Key, e.g. 320193."},"form":{"type":"string","description":"Only this form type, e.g. 10-K, 10-Q, 8-K, 4."},"limit":{"type":"integer","minimum":1,"maximum":40,"default":10}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["cik","name","recent_filings","source"],"properties":{"cik":{"type":"integer"},"name":{"type":"string"},"tickers":{"type":"array","items":{"type":"string"}},"exchanges":{"type":"array","items":{"type":"string"}},"industry":{"type":["string","null"]},"state_of_incorporation":{"type":["string","null"]},"fiscal_year_end":{"type":["string","null"],"description":"MM-DD"},"business_address":{"type":["string","null"]},"recent_filings":{"type":"array","items":{"type":"object","properties":{"form":{"type":"string"},"filed":{"type":"string"},"report_date":{"type":["string","null"]},"accession":{"type":"string"},"url":{"type":"string"}}}},"source":{"type":"string"},"edgar_url":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/sec/financials":{"servers":[{"url":"https://data.tollkit.dev"}],"post":{"operationId":"secFinancials","summary":"Company financials from SEC filings","description":"Company financials from SEC filings: give a US stock ticker or CIK, get revenue, operating income, net income, diluted EPS, assets, liabilities, equity, cash, operating cash flow and shares outstanding for the last 4 fiscal years plus the latest quarter, exactly as filed in XBRL, each with its filing and accession number. From SEC EDGAR. $0.005 per call; a company with no financial data is not charged.","tags":["Finance"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ticker":{"type":"string","description":"US stock ticker. Give this or cik."},"cik":{"type":"integer","description":"SEC Central Index Key."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["cik","name","metrics","source"],"properties":{"cik":{"type":"integer"},"name":{"type":"string"},"metrics":{"type":"object","description":"Keys: revenue, operating_income, net_income, eps_diluted, total_assets, total_liabilities, stockholders_equity, cash, operating_cash_flow, shares_outstanding.","additionalProperties":{"type":["object","null"],"properties":{"concept":{"type":"string"},"unit":{"type":"string"},"annual":{"type":"array","items":{"type":"object","properties":{"period_start":{"type":["string","null"]},"period_end":{"type":"string"},"value":{"type":"number"},"form":{"type":"string"},"filed":{"type":"string"},"accession":{"type":"string"}}}},"latest_quarter":{"type":["object","null"],"properties":{"period_start":{"type":["string","null"]},"period_end":{"type":"string"},"value":{"type":"number"},"form":{"type":"string"},"filed":{"type":"string"},"accession":{"type":"string"}}}}}},"note":{"type":"string"},"source":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/ip":{"servers":[{"url":"https://data.tollkit.dev"}],"post":{"operationId":"ipLookup","summary":"IP address lookup","description":"IP geolocation: give an IPv4 or IPv6 address, get its country, region, city, continent and approximate latitude/longitude. City-level, from the DB-IP City Lite database (IP Geolocation by DB-IP, CC BY 4.0). $0.002 per lookup; private or reserved addresses are not charged.","tags":["Network"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["ip"],"properties":{"ip":{"type":"string","description":"IPv4 or IPv6 address."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["ip","country","attribution"],"properties":{"ip":{"type":"string"},"country":{"type":["object","null"],"properties":{"code":{"type":["string","null"]},"name":{"type":["string","null"]},"in_eu":{"type":"boolean"}}},"region":{"type":["string","null"]},"city":{"type":["string","null"]},"continent":{"type":["object","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"precision":{"type":"string"},"database":{"type":"string"},"attribution":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/weather":{"servers":[{"url":"https://data.tollkit.dev"}],"post":{"operationId":"weatherForecast","summary":"US weather forecast and alerts","description":"US weather: give a latitude and longitude, get the National Weather Service forecast for the next 7 days (day and night periods: temperature, rain chance, wind, summary) and any active weather alerts for that spot. United States only. $0.002 per call; a location outside NWS coverage is not charged.","tags":["Weather"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["lat","lon"],"properties":{"lat":{"type":"number","description":"Latitude, e.g. 38.98"},"lon":{"type":"number","description":"Longitude, e.g. -76.49"},"periods":{"type":"integer","minimum":1,"maximum":14,"default":14,"description":"How many 12-hour periods to return."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["location","forecast","alerts","source"],"properties":{"location":{"type":"object","properties":{"city":{"type":["string","null"]},"state":{"type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"},"time_zone":{"type":["string","null"]}}},"forecast":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"},"temperature":{"type":"number"},"temperature_unit":{"type":"string"},"precipitation_chance":{"type":["number","null"]},"wind":{"type":"string"},"wind_direction":{"type":"string"},"summary":{"type":"string"},"detail":{"type":"string"}}}},"alerts":{"type":"array","items":{"type":"object","properties":{"event":{"type":"string"},"severity":{"type":"string"},"headline":{"type":["string","null"]},"expires":{"type":"string"}}}},"forecast_updated":{"type":["string","null"]},"source":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/fx":{"servers":[{"url":"https://data.tollkit.dev"}],"post":{"operationId":"exchangeRate","summary":"Currency exchange rate","description":"Currency conversion at European Central Bank reference rates: give two currency codes (30 supported, e.g. USD, EUR, GBP, JPY) and an amount, get the rate and converted amount for the latest business day or any day in the last 90. NOTE: these ECB reference rates are published free of charge at ecb.europa.eu; they are for information only, not for transactions. $0.002 per call; an unsupported currency is not charged.","tags":["Finance"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["from","to"],"properties":{"from":{"type":"string","pattern":"^[A-Za-z]{3}$"},"to":{"type":"string","pattern":"^[A-Za-z]{3}$"},"amount":{"type":"number","minimum":0,"default":1},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"YYYY-MM-DD within the last 90 days; weekends use the previous business day."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["from","to","rate","converted","rate_date","notice"],"properties":{"from":{"type":"string"},"to":{"type":"string"},"amount":{"type":"number"},"rate":{"type":"number"},"converted":{"type":"number"},"rate_date":{"type":"string"},"requested_date":{"type":["string","null"]},"source":{"type":"string"},"notice":{"type":"string","description":"Required by the ECB: these rates are free at ecb.europa.eu and are for information only."}}}}}},"402":{"description":"Payment Required"}}}},"/data/company":{"servers":[{"url":"https://data.tollkit.dev"}],"post":{"operationId":"companySnapshot","summary":"Company snapshot","description":"Company snapshot from SEC EDGAR in one call: give a US stock ticker or CIK, get the company profile, its most recent filings (10-K, 10-Q, 8-K) with links, and key financials (revenue, net income, EPS, assets, cash, cash flow) for the last two fiscal years and latest quarter. For research, due diligence and investing agents. $0.006 per call; an unknown company is not charged.","tags":["Public data"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.006000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ticker":{"type":"string","description":"US stock ticker, e.g. \"AAPL\". Give this or cik."},"cik":{"type":"integer","description":"SEC CIK number."},"filings":{"type":"integer","minimum":1,"maximum":40,"default":8,"description":"How many recent filings to list."},"form":{"type":"string","description":"Only this form type, e.g. \"10-K\"."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["cik","name","recent_filings","financials"],"properties":{"cik":{"type":"integer"},"name":{"type":"string"},"tickers":{"type":"array","items":{"type":"string"}},"industry":{"type":["string","null"]},"fiscal_year_end":{"type":["string","null"]},"recent_filings":{"type":"array","items":{"type":"object","properties":{"form":{"type":"string"},"filed":{"type":"string"},"report_date":{"type":["string","null"]},"accession":{"type":"string"},"url":{"type":"string"}}}},"financials":{"type":["object","null"],"description":"Keys: revenue, operating_income, net_income, eps_diluted, total_assets, total_liabilities, stockholders_equity, cash, operating_cash_flow, shares_outstanding. Each: unit, latest_annual, prior_annual, latest_quarter.","additionalProperties":{"type":["object","null"],"properties":{"unit":{"type":"string"},"latest_annual":{"type":"object","properties":{"period_start":{"type":["string","null"]},"period_end":{"type":"string"},"value":{"type":"number"},"form":{"type":"string"},"filed":{"type":"string"},"accession":{"type":"string"}}},"prior_annual":{"type":"object","properties":{"period_start":{"type":["string","null"]},"period_end":{"type":"string"},"value":{"type":"number"},"form":{"type":"string"},"filed":{"type":"string"},"accession":{"type":"string"}}},"latest_quarter":{"type":"object","properties":{"period_start":{"type":["string","null"]},"period_end":{"type":"string"},"value":{"type":"number"},"form":{"type":"string"},"filed":{"type":"string"},"accession":{"type":"string"}}}}}},"financials_note":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/chain/check":{"servers":[{"url":"https://chain.tollkit.dev"}],"post":{"operationId":"tokenCheck","summary":"Token check","description":"Token check before you buy, send or accept a token, on Base, Ethereum or Solana: give a token address, get what it is (name, symbol, supply), its USD price and pool depth, and plain warnings read from the chain: thin or no liquidity, and on Solana an active mint or freeze authority. Facts, not a rating. $0.004 per call; an address that isn't a token is not charged.","tags":["Onchain"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$","description":"ERC-20 contract or SPL mint."},"chain":{"type":"string","enum":["base","ethereum","solana"],"default":"base","description":"Which chain to read: \"base\" (default), \"ethereum\" or \"solana\"."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["chain","token","warnings"],"properties":{"chain":{"type":"string"},"token":{"type":"string"},"name":{"type":["string","null"]},"symbol":{"type":["string","null"]},"decimals":{"type":"integer"},"total_supply":{"type":"string"},"mint_authority":{"type":["string","null"]},"freeze_authority":{"type":["string","null"]},"price_usd":{"type":["number","null"]},"pool_depth_usd":{"type":["integer","null"]},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}},"note":{"type":"string"},"checked_at":{"type":"string"},"explorer_url":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/web/brief":{"servers":[{"url":"https://web.tollkit.dev"}],"post":{"operationId":"pageBrief","summary":"Page brief","description":"Read and summarize any web page in one call: give a URL, the page is rendered in a real browser (JavaScript pages work) and summarized by an LLM to the length you ask for, with its title and final URL. For research, news, docs and link previews. $0.007 per page; a page that fails to load or is empty is not charged.","tags":["Web"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.007000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Absolute https URL of the page."},"max_words":{"type":"integer","minimum":10,"maximum":250,"default":60}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["url","summary"],"properties":{"url":{"type":"string"},"final_url":{"type":"string"},"title":{"type":["string","null"]},"summary":{"type":"string"},"text_length":{"type":"integer"},"summarized_chars":{"type":"integer"},"input_truncated":{"type":"boolean","description":"True when the page was longer than the part summarized."},"model":{"type":"string"},"fetched_at":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/data/diligence":{"servers":[{"url":"https://data.tollkit.dev"}],"post":{"operationId":"companyDueDiligence","summary":"Company due diligence","description":"Company due diligence in one call, from SEC EDGAR: give a US stock ticker, get the company profile, revenue and profit growth, margins, leverage and cash ratios, key financials, its key filings with links, and plain-English summaries of its latest 8-K material-event filings. For research, investing and screening agents. $0.03 per call; an unknown company is not charged.","tags":["Public data"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ticker":{"type":"string","description":"US stock ticker. Give this or cik."},"cik":{"type":"integer"}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["cik","name","ratios","recent_material_events"],"properties":{"cik":{"type":"integer"},"name":{"type":"string"},"industry":{"type":["string","null"]},"ratios":{"type":["object","null"],"description":"revenue_growth_pct, net_income_growth_pct, operating_margin_pct, net_margin_pct, liabilities_to_assets_pct, cash_to_liabilities_pct, operating_cash_flow_to_net_income"},"financials":{"type":["object","null"]},"recent_material_events":{"type":"array","items":{"type":"object","properties":{"form":{"type":"string"},"filed":{"type":"string"},"url":{"type":"string"},"summary":{"type":["string","null"]}}}},"key_filings":{"type":"array"},"source":{"type":"string"},"prepared_at":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/chain/portfolio":{"servers":[{"url":"https://chain.tollkit.dev"}],"post":{"operationId":"walletPortfolio","summary":"Wallet portfolio value","description":"Wallet portfolio in USD on Base, Ethereum or Solana: give an address (and any extra tokens), get every holding priced from on-chain pools, its USD value, the wallet's total, and warnings when a position is thin or bigger than the pool behind its price. $0.008 per call; a bad address is not charged.","tags":["Onchain"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.008000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$","description":"Wallet address."},"chain":{"type":"string","enum":["base","ethereum","solana"],"default":"base","description":"Which chain to read: \"base\" (default), \"ethereum\" or \"solana\"."},"tokens":{"type":"array","maxItems":20,"items":{"type":"string","pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$"},"description":"Extra token contracts or SPL mints to include."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["chain","address","total_value_usd","holdings"],"properties":{"chain":{"type":"string"},"address":{"type":"string"},"total_value_usd":{"type":"number"},"holdings":{"type":"array","items":{"type":"object","properties":{"asset":{"type":"string"},"symbol":{"type":["string","null"]},"amount":{"type":"number"},"price_usd":{"type":["number","null"]},"value_usd":{"type":["number","null"]},"pool_depth_usd":{"type":["integer","null"]},"warning":{"type":["string","null"]}}}},"unpriced_holdings":{"type":"integer"},"checked_at":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/summarize":{"servers":[{"url":"https://web.tollkit.dev"}],"post":{"operationId":"summarizeText","summary":"Summarize supplied text","description":"Summarize text you send (up to 8,000 characters) in the number of words you ask for. $0.005 per call.","tags":["Text"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"Text to summarize. Refused above 8,000 characters rather than truncated."},"max_words":{"type":"integer","default":60,"description":"Clamped to 250."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","required":["summary"],"properties":{"summary":{"type":"string"},"model":{"type":"string"},"input_tokens":{"type":"integer"},"output_tokens":{"type":"integer"},"served_at":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/check":{"get":{"operationId":"checkService","summary":"Weigh Station, free. Check any x402 endpoint before paying: live price, recipient, network, and how it compares with its Bazaar listing.","tags":["Weigh Station"],"security":[],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"},"description":"The x402 endpoint to check."},{"name":"method","in":"query","required":false,"schema":{"type":"string","enum":["GET","POST"]}}],"responses":{"200":{"description":"Observed facts and named signals. Nothing is paid."},"400":{"description":"Missing or blocked URL."}}}},"/weigh/prepare":{"post":{"operationId":"weighPrepare","summary":"Weigh Station monitoring, step 1 (free): check your endpoint and get the message to sign with its pay_to wallet.","tags":["Weigh Station"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","webhookUrl"],"properties":{"url":{"type":"string","format":"uri"},"webhookUrl":{"type":"string","format":"uri"},"method":{"type":"string","enum":["GET","POST"]}}}}}},"responses":{"200":{"description":"owner, issued and message to sign"},"400":{"description":"Not an x402 endpoint, no EVM pay_to, or bad webhook URL."}}}},"/weigh/status":{"get":{"operationId":"weighStatus","summary":"Public monitoring record for an endpoint: active, state, last check, 30-day uptime.","tags":["Weigh Station"],"security":[],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"}}],"responses":{"200":{"description":"Monitoring record. No webhook or secret."}}}},"/find":{"get":{"operationId":"findService","summary":"Weigh Station, free. Search Coinbase's x402 index for a task and check each result live without paying.","tags":["Weigh Station"],"security":[],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"What you need done, in plain words."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":8}}],"responses":{"200":{"description":"Checked results, ordered by live quote then distinct payers. No paid placement."}}}},"/preview":{"get":{"operationId":"previewExtract","summary":"Free. A real extraction of one fixed sample page.","tags":["Extraction"],"security":[],"responses":{"200":{"description":"The same shape POST /extract returns, free.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","description":"schema.org/Product extracted from the rendered page. Fields the page does not state come back null rather than guessed.","required":["product","page"],"properties":{"product":{"type":"object","properties":{"name":{"type":["string","null"]},"description":{"type":["string","null"]},"brand":{"type":["string","null"]},"sku":{"type":["string","null"]},"price":{"type":["number","null"],"description":"Numeric, no symbol or separators."},"currency":{"type":["string","null"],"description":"ISO 4217. Null whenever price is null."},"availability":{"type":"string","enum":["in_stock","out_of_stock","preorder","unknown"]},"images":{"type":"array","items":{"type":"string"},"description":"Up to 5 absolute URLs copied from the page. Never invented."},"variants":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"values":{"type":"array","items":{"type":"string"}}}}},"url":{"type":"string"}}},"page":{"type":"object","properties":{"url":{"type":"string"},"finalUrl":{"type":"string"},"title":{"type":["string","null"]},"status":{"type":"integer"},"fetchedAt":{"type":"string","description":"ISO timestamp of the RENDER, not of this call. Older than now on a cached result."},"render_ms":{"type":"integer"}}},"cached":{"type":"boolean","description":"True when re-served from a recent render. Still a paid call, and the data is as old as cache_age_seconds says."},"cache_age_seconds":{"type":"integer"},"provenance":{"type":"object","description":"Where each field came from. `declared` fields match what the merchant published in schema.org JSON-LD or Open Graph tags — their own number, the one they stand behind. `inferred` fields were read off the page by a model and deserve less trust. Fields that came back null appear in neither list. Use this to decide which values you can act on directly and which are worth a second look.","properties":{"source":{"type":"string","enum":["json-ld","meta","json-ld+meta","none"]},"declared":{"type":"array","items":{"type":"string"}},"inferred":{"type":"array","items":{"type":"string"}}}},"redirect":{"type":"object","description":"Present only when the browser landed somewhere other than the requested URL.","properties":{"requested":{"type":"string"},"final":{"type":"string"}}}}}}}}}}},"/health":{"get":{"operationId":"health","summary":"Free. Liveness, uptime, advertised prices and guarantees.","tags":["Meta"],"security":[],"responses":{"200":{"description":"Service status"}}}}}}