# Animica Batch URL Content Extractor

> Animica Batch URL Content Extractor is a paid API for AI agents from animica.dev, paid per call via x402, $0.002317/call, status unknown (last checked 2026-10-12).

Fetches up to 10 URLs concurrently and returns clean, readable text (title + body) for each, with detailed failure reasons for any URLs that could not be read, in a single pay-per-call API.

## Facts

- Endpoint: POST https://animica.dev/x402/contents?utm_source=zero.xyz
- Price: $0.002317/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-12
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/animica-batch-url-content-extractor-e5155718
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_noOD2iDIZGJoL0IdW3sz9

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability animica-batch-url-content-extractor-e5155718 -d '<json body>'
```

Example prompt: Grab the readable text from these 5 URLs for me — https://example.com/article1, https://example.com/article2, https://news.site/story, https://blog.io/post, https://docs.io/page — and cap each one at 4000 characters so I can summarize them.

## When to prefer this

Choose this endpoint when you already have a list of URLs (from search results, sitemaps, RSS feeds, or user-provided lists) and need to retrieve clean readable text from multiple pages in a single call without managing concurrency, browser infrastructure, or per-URL billing. It is especially suited for agentic pipelines where partial success is acceptable and you need to know exactly which URLs failed and why. Prefer it over single-URL fetchers when you have 2–10 links to process at once. Not appropriate when you need to discover URLs yourself (use a search endpoint first) or when you need structured data extraction beyond plain text.

## Known failure modes

- 403 Forbidden — server rejected the request; returned in failed[] with reason
- Timeout — page took too long to load under the concurrent deadline; returned in failed[]
- Paywall detected — content not extractable due to access restriction; returned in failed[]
- No extractable text — page has no readable body content (e.g. pure JS app or media page); returned in failed[]
- Private/non-routable address — URL resolves to a private IP range; returned in failed[]
- All URLs fail — if every URL is in failed[], the call is not charged
- Invalid URL format — malformed or non-http(s) URLs rejected at input validation
- Exceeding 10 URLs — input array limited to 10 entries per call

## How this service works

Give it up to 10 URLs and get back the readable text of each — titles, clean body text, navigation and scripts removed — in a single call and a single payment. The half of every retrieval pipeline an agent already has links for: search results, a sitemap, an RSS feed, a user's reading list. Pages are fetched concurrently under a deadline. Every URL you send is accounted for: the ones that could not be read come back in failed[] WITH the reason (403, timeout, paywall, no extractable text, private address), because a bad input and a broken fetcher need opposite responses from you. If not one URL could be read, you are NOT charged.

## Output

A JSON object with a `pages` array (one entry per successfully read URL, each containing the page title, clean extracted body text, character count, truncation flag, and content type) and a `failed` array listing every URL that could not be read along with the specific reason (e.g. 403, timeout, paywall, no extractable text, private address). Also includes total fetch time in milliseconds, a fetch timestamp, counts of pages read and URLs requested. If zero URLs succeed, no charge is applied.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "urls": {
   "type": "array",
   "description": "1..10 absolute http(s) URLs"
  },
  "max_chars": {
   "type": "integer",
   "description": "truncate each page to this many characters (default 6000)"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "pages": [
   {
    "url": "https://x402.org/",
    "text": "x402 \n\n Close Search \n\n x402 \n\n x402 is an open, neutral standard for internet-native payments. It absolves the Internet’s original sin by natively making payments possible between clients and servers, creating win-win economies that empower agentic payments at scale. x402 exists to build a more free and fair internet.\n\n Read x402 Foundation Announcement Last 30 Days\n\n 75.41M\n\n Transactions\n\n $24.24M\n\n Volume\n\n 94.06K\n\n Buyers\n\n 22K\n\n Sellers\n\n → Accept payments with a single line of code\n\n app.",
    "chars": 4121,
    "title": "x402",
    "truncated": true,
    "content_type": "text/html; charset=utf-8"
   },
   {
    "url": "https://docs.x402.org/introduction",
    "text": "Welcome to x402 - x402 \n Documentation Index\n Fetch the complete documentation index at: /llms.txt \n Use this file to discover all available pages before exploring further.\n\n Skip to main content \n x402 is the open payment standard that enables services to charge for access to their APIs and content directly over HTTP. It is built around the HTTP 402 Payment Required status code and allows clients to programmatically pay for resources without accounts, sessions, or credential management. \n With ",
    "chars": 3090,
    "title": "Welcome to x402 - x402",
    "truncated": true,
    "content_type": "text/html; charset=utf-8"
   }
  ],
  "failed": [],
  "took_ms": 507,
  "fetched_at": "2026-08-21T23:44:13.495Z",
  "pages_read": 2,
  "urls_requested": 2
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/animica-batch-url-content-extractor-e5155718/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from animica.dev](https://www.zero.xyz/host/animica.dev/llms.txt)
