# Oblique Markets Batch URL Extraction (x401-gated)

> Oblique Markets Batch URL Extraction (x401-gated) is a paid API for AI agents from api.oblique.markets, paid per call via x402, $0.02/call, status unknown (last checked 2026-09-13).

Extracts structured JSON from up to 10 public URLs in parallel using isolated compute, with proof-of-payment gating, idempotent retries, and schema-validated output

## Facts

- Endpoint: POST https://api.oblique.markets/api/v1/paid/x401-batch-extract
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-13
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/oblique-markets-batch-url-extraction-x401-gated-a1d1e4d2
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_jSQeokgxuk-mdiDxMw06e

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 oblique-markets-batch-url-extraction-x401-gated-a1d1e4d2 -d '<json body>'
```

Example prompt: Scrape these 8 product pages for me and return the title, price, and availability for each as structured JSON — I'll provide the schema and I have payment proof ready.

## When to prefer this

Choose this endpoint when you need to extract structured, schema-validated JSON from multiple (up to 10) public web pages in a single atomic call with idempotent retry semantics and proof-of-payment gating. It is superior to single-URL extraction endpoints when batch throughput and reconciled delivery matter. Prefer it over general-purpose scrapers when you need compute isolation (via Daytona or Modal) and reproducible, schema-aligned output rather than raw HTML or markdown.

## Known failure modes

- Invalid or expired x401 payment proof returns 401/402 authentication error
- URLs that are paywalled or require login may return empty or partial extraction
- Schema mismatch between extracted content and provided JSON Schema causes per-item validation failure
- Exceeding 10 URLs per call returns a 400 bad request
- Transient network errors on target URLs are retried; persistent failures yield a per-item error object
- Malformed JSON Schema input causes request rejection

## How this service works

Proof-gated batch JSON extraction for up to 10 public URLs in isolated Daytona or Modal compute with reconciled delivery and idempotent retries

## Output

A reconciled batch response containing one schema-validated JSON object per submitted URL, aligned to the caller-supplied JSON Schema, delivered after isolated compute execution with retry guarantees. Each item result maps to its input URL.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "items": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "url",
     "schema"
    ],
    "properties": {
     "url": {
      "type": "string",
      "description": "HTTPS page to extract"
     },
     "schema": {
      "type": "object",
      "description": "JSON Schema for the extracted JSON value"
     }
    }
   }
  },
  "x401_proof": {
   "type": "object",
   "required": [
    "route",
    "sub",
    "aud",
    "exp",
    "nonce"
   ],
   "properties": {
    "aud": {
     "type": "string",
     "description": "api.oblique.markets"
    },
    "exp": {
     "type": "integer",
     "description": "Unix expiry in seconds"
    },
    "sub": {
     "type": "string",
     "description": "Payment subject (buyer wallet or agent identity)"
    },
    "nonce": {
     "type": "string"
    },
    "route": {
     "type": "string"
    },
    "request_hash": {
     "type": "string"
    }
   }
  },
  "idempotency_key": {
   "type": "string"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "status": "fulfilled",
  "results": [
   {
    "url": "https://example.com",
    "data": {
     "title": "Example Domain"
    },
    "index": 0,
    "status": "completed",
    "artifact_hash": "sha256:2bb80d537b1da3e38bd30361aa855686..."
   },
   {
    "url": "https://invalid.example",
    "index": 1,
    "status": "failed",
    "failure_code": "upstream_http",
    "artifact_hash": null
   }
  ],
  "runtime_ms": 1842,
  "failed_count": 1,
  "proof_status": "verified",
  "artifact_hash": "sha256:9f86d081884c7d659a2feaa0c55ad015...",
  "completed_count": 1,
  "submitted_count": 2,
  "payment_reference": {
   "status": "settled",
   "network": "eip155:8453",
   "transaction": "0xabc123...",
   "amount_atomic": "20000"
  },
  "fulfillment_timestamp": "2026-08-22T12:00:00.000Z"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/oblique-markets-batch-url-extraction-x401-gated-a1d1e4d2/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.oblique.markets](https://www.zero.xyz/host/api.oblique.markets/llms.txt)
