# Extract Article Metadata and Clean Markdown (d402)

> Extract Article Metadata and Clean Markdown (d402) is a paid API for AI agents from gateway.d402.xyz, paid per call via x402, $0.01/call, status down (last checked 2026-09-15).

Fetches a public article, news, or blog URL and returns structured metadata (title, author, published date, summary) plus clean body markdown, outbound links, and evidence.

## Facts

- Endpoint: POST https://gateway.d402.xyz/v1/web/extract-article
- Price: $0.01/call
- Payment: x402
- Status: down
- Last checked: 2026-09-15
- Activations on Zero: 0
- Provider: gateway.d402.xyz
- Website: https://gateway.d402.xyz
- Canonical page: https://www.zero.xyz/c/gateway-d402-xyz-extract-article-metadata-and-clean-markdown-d402-d41b080d
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_Ph_9AX1WlguAAqa69k2zM

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 gateway-d402-xyz-extract-article-metadata-and-clean-markdown-d402-d41b080d -d '<json body>'
```

Example prompt: Can you extract the full article text, title, author, and publish date from this news page as clean markdown? https://www.theguardian.com/technology/2025/jan/10/ai-agents-future

## When to prefer this

Choose this endpoint when you need structured article metadata (title, author, date, summary) alongside clean markdown body text from a public article, news, or blog URL. Prefer it over a generic page-to-markdown endpoint when you need the semantic metadata fields extracted and structured, not just raw markdown. Use it over web.render_snapshot when you need readable text rather than a visual render.

## Known failure modes

- URL is behind a paywall or requires login — extraction fails or returns partial content
- URL points to a non-article page (homepage, search results) — metadata fields may be null
- Request timeout exceeded (up to 45000ms) — returns error status
- Invalid or malformed URL — rejected with validation error
- Page is JavaScript-heavy and content cannot be fetched — bodyMarkdown may be empty
- Insufficient USDC payment — transaction rejected before extraction begins

## How this service works

Paid d402 capability alias for web.extract_article@1. Workers return article metadata, body markdown, summary, outbound links, and evidence.

## Output

Returns a task result containing the article URL, site name, title, author, publish date, word count, a plain-text summary, the full article body as clean markdown, canonical URL, outbound links array, a content hash for integrity, a snapshot CID for provenance, and evidence objects. Also includes task ID, status, and settlement/receipt details.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "url"
 ],
 "properties": {
  "url": {
   "type": "string",
   "format": "uri",
   "description": "Public article/news/blog page URL to extract."
  },
  "sync": {
   "type": "boolean",
   "description": "Optional d402 sync flag. Defaults to gateway policy."
  },
  "timeoutMs": {
   "type": "number",
   "maximum": 45000,
   "minimum": 1,
   "description": "Optional per-request timeout, capped by gateway policy."
  }
 },
 "additionalProperties": false
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "taskId",
  "status"
 ],
 "properties": {
  "error": {
   "type": [
    "string",
    "null"
   ]
  },
  "links": {
   "type": "object",
   "properties": {
    "task": {
     "type": "string"
    },
    "result": {
     "type": "string"
    },
    "receipt": {
     "type": "string"
    }
   }
  },
  "result": {
   "type": "object",
   "required": [
    "url",
    "bodyMarkdown",
    "contentHash",
    "snapshotCid",
    "extractorVersion"
   ],
   "properties": {
    "url": {
     "type": "string"
    },
    "site": {
     "type": [
      "string",
      "null"
     ]
    },
    "title": {
     "type": [
      "string",
      "null"
     ]
    },
    "author": {
     "type": [
      "string",
      "null"
     ]
    },
    "summary": {
     "type": [
      "string",
      "null"
     ]
    },
    "evidence": {
     "type": "array",
     "items": {
      "type": "object"
     }
    },
    "fetchedAt": {
     "type": "string"
    },
    "published": {
     "type": [
      "string",
      "null"
     ]
    },
    "wordCount": {
     "type": [
      "number",
      "null"
     ]
    },
    "contentHash": {
     "type": "string"
    },
    "description": {
     "type": [
      "string",
      "null"
     ]
    },
    "serviceName": {
     "type": "string"
    },
    "snapshotCid": {
     "type": "string"
    },
    "bodyMarkdown": {
     "type": "string"
    },
    "canonicalUrl": {
     "type": [
      "string",
      "null"
     ]
    },
    "outboundLinks": {
     "type": "array",
     "items": {
      "type": "object"
     }
    },
    "serviceVersion": {
     "type": "string"
    },
    "extractorVersion": {
     "type": "string"
    }
   }
  },
  "status": {
   "enum": [
    "accepted",
    "rejected",
    "running",
    "error"
   ],
   "type": "string"
  },
  "taskId": {
   "type": "string"
  },
  "settlement": {
   "type": [
    "object",
    "null"
   ],
   "additionalProperties": true
  },
  "x402Settlement": {
   "type": [
    "object",
    "null"
   ],
   "additionalProperties": true
  },
  "validationReceipt": {
   "type": [
    "object",
    "null"
   ],
   "additionalProperties": true
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/gateway-d402-xyz-extract-article-metadata-and-clean-markdown-d402-d41b080d/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from gateway.d402.xyz](https://www.zero.xyz/host/gateway.d402.xyz/llms.txt)
