{"uid":"cap_8Wgb38_qARv3Qa7x1C4c7","slug":"netintel-exa-contents-batch-url-reader-b70063e5","name":"NetIntel Exa Contents — Batch URL Reader","description":"Clean page text for up to 3 URLs in one call via Exa's index + live crawl — works on JS-rendered and bot-walled pages that direct fetch can't read. Returns title, author, published_date and text per URL, with per-URL status. Pairs with /exa/search (search → contents). No API key, pay per call on Base or Solana.","url":"https://netintel.dev/exa/contents","method":"GET","headers":{},"bodySchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input"],"properties":{"input":{"type":"object","required":["type","method"],"properties":{"type":{"type":"string","const":"http"},"method":{"enum":["GET"],"type":"string"},"queryParams":{"type":"object","required":["urls"],"properties":{"urls":{"type":"array","items":{"type":"string"},"description":"1-3 absolute http(s) URLs. Aliases: url (single string), links, targets"},"livecrawl":{"type":"string","description":"fallback (default) | always | never | preferred. Alias: live"},"max_characters":{"type":"number","description":"Per-page character cap, 200-20000 (default 4000). Aliases: maxCharacters, max_chars, limit"}}}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"text":{"type":["string","null"]},"error":{"type":["string","null"]},"title":{"type":["string","null"]},"author":{"type":["string","null"]},"status":{"type":"string"},"truncated":{"type":"boolean"},"char_count":{"type":"number"},"published_date":{"type":["string","null"]}}}},"findings":{"type":"array"},"provider":{"type":"string"},"requested":{"type":"number"},"succeeded":{"type":"number"}}}}}}},"responseSchema":{"type":"json","example":{"results":[{"url":"https://www.x402.org/","text":"x402 is an open standard for internet-native payments…","error":null,"title":"x402 — internet-native payments","author":null,"status":"success","truncated":false,"char_count":1872,"published_date":null}],"findings":[],"provider":"exa","requested":1,"succeeded":1}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.005","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.005/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.005","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.005","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_Elx1hUiHr2YpsbqrzeDN5","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.005","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Fetches clean page text, title, author, and publish date for up to 3 URLs in one call, bypassing JS rendering and bot walls via Exa's index and live crawl.","exampleAgentPrompt":"Can you fetch the full text of these three articles for me — https://example.com/article1, https://example.com/article2, and https://example.com/article3 — including their titles and publish dates? Some of them might be JS-rendered so use live crawl if needed.","exampleUseCases":[{"title":"Research summary from multiple sources","prompt":"Grab the full text from these three research blog posts so I can summarize them: https://blog.anthropic.com/claude-3, https://openai.com/blog/gpt-4, and https://deepmind.google/blog/gemini — get me the title, author, and published date for each too."},{"title":"Competitor article monitoring","prompt":"Pull the readable text from these two competitor press releases — https://competitor.com/news/launch and https://otherbrand.com/press/update — I need the clean article body, not the navigation or ads, and tell me when each was published."},{"title":"Bot-blocked page extraction","prompt":"I need you to read this JavaScript-rendered product page at https://shop.example.com/product/xyz — direct fetching fails because of their bot protection, so use Exa's live crawl and give me the full text content with title."}],"resultDescription":"Returns a results array with one entry per URL, each containing: url, title, author, published_date, text (cleaned body), status (success/error), char_count, truncated flag, and an error field if the fetch failed. Also includes top-level fields: provider (exa), requested count, succeeded count, and a findings array.","failureModes":["URL unreachable or returns non-200 — per-URL status set to error with error message","All 3 URLs fail — succeeded=0, results still returned with error fields","livecrawl=never and page is JS-rendered — text may be empty or partial","max_characters too low — text truncated with truncated=true","More than 3 URLs submitted — rejected or only first 3 processed","Malformed URL in array — that entry returns error status"],"whenToPreferThis":"Choose this endpoint when you need to read the actual text content of specific known URLs — especially JS-rendered pages, paywalled content, or bot-protected sites that a simple HTTP GET cannot access. It is preferable to a direct fetch when pages require JavaScript execution or block scrapers. Use it over /exa/search when you already know the exact URLs and just need their content. Ideal for batch reading 2–3 URLs in a single paid call rather than making separate requests.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-15T00:31:35.610Z","isFirstParty":false}