# GET /metadata: $0.002 per call

A web page's metadata in one cheap call: title, description, canonical URL, language, site name, preview image, OpenGraph and Twitter card tags, author and dates, icons, RSS/Atom feeds and JSON-LD (schema.org) types. For link previews, SEO checks and crawlers. robots.txt respected. ?url=https://example.com

- **Price:** $0.002 in USDC, the same on Base, Solana, Polygon, Arbitrum. Failed calls are never charged.
- **Free trial:** yes, 20 free calls a day from Claude, Cursor or any MCP client ([set-up](/mcp/setup)).
- **Tier:** live
- **Answers cached for:** 1 hour(s)
- **Data sources:** The page itself
- **Lane:** Web search and crawling ([OpenAPI](/openapi/web-search.json))
- **Live health:** [status page](/status)

## Free sample

See an answer for the demo input first, free (no payment, 10 a minute): [https://aayatai.com/sample/metadata](/sample/metadata). It is a stored real answer when we have one, otherwise an example marked `"kind": "illustrative"`.

```bash
curl "https://aayatai.com/sample/metadata"
```

## 1. See the price (free)

Call it without paying: you get `402 Payment Required` and a `PAYMENT-REQUIRED` header with the exact price and where to pay.

```bash
curl -i "https://aayatai.com/metadata?url=https%3A%2F%2Fexample.org%2F"
```

## 2. Pay and call (TypeScript)

```bash
npm install @x402/fetch @x402/evm viem
```

```ts
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";

// A wallet used only by your agent, holding a little USDC on Base.
const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);
const pay = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});

const res = await pay("https://aayatai.com/metadata?url=https%3A%2F%2Fexample.org%2F");
console.log(await res.json());
```

## 3. Or as an MCP tool

```ts
// MCP server: https://aayatai.com/mcp (Streamable HTTP). With the x402 MCP client (see /start):
const result = await client.callTool("metadata", {"url":"https://example.org/"});
```

## Inputs

- `url` **(required)** (string): The page address.

Bad inputs are rejected with HTTP 400 before any payment is asked for.

## Example answer

```json
{
  "url": "https://example.org/",
  "status": 200,
  "title": "Example Org",
  "description": "We make examples.",
  "canonical": "https://example.org/",
  "language": "en",
  "siteName": "Example",
  "image": "https://example.org/og.png",
  "type": "website",
  "author": null,
  "publishedAt": null,
  "modifiedAt": null,
  "openGraph": {
    "og:title": "Example Org",
    "og:image": "https://example.org/og.png"
  },
  "twitter": {
    "twitter:card": "summary_large_image"
  },
  "icons": [
    "https://example.org/favicon.ico"
  ],
  "feeds": [
    {
      "url": "https://example.org/feed.xml",
      "type": "application/rss+xml",
      "title": "Blog"
    }
  ],
  "jsonLdTypes": [
    "Organization"
  ],
  "robots": null,
  "generator": null
}
```

## Related

- [GET /search/open](/services/search-open) ($0.002): Cheapest search: Wikipedia articles, Hacker News stories, DuckDuckGo instant answers and Stack Overflow questions in one call, merged, de-duplicated and ranked,
- [GET /search](/services/search) ($0.003): Live search, open-sources tier: fresh results from Wikipedia, Hacker News, DuckDuckGo instant answers and Stack Overflow, merged, de-duplicated and ranked (titl
- [GET /search/answer](/services/search-answer) ($0.03): Search, read and summarise in one call (open-sources tier): finds pages via Wikipedia, Hacker News, DuckDuckGo and Stack Overflow, reads the top ones (robots.tx
- [GET /feed](/services/feed) ($0.003): Latest posts from any site or feed as clean JSON: pass a feed URL or just the site's address and we find its RSS, Atom or JSON Feed (from the page's links or co
- [POST /page/changes](/services/page-changes) ($0.002): Watch any public page for changes: we fetch it now (robots.txt respected), fingerprint its text and return a token.
- [POST /page/changes/summary](/services/page-changes-summary) ($0.008): Page change detection with an AI summary: like /page/changes (send back the token from your last check), plus a two-sentence summary of what changed and whether
- [GET /product](/services/product) ($0.003): Product and price from any public product page, as clean JSON: name, brand, price, currency, availability, condition, SKU/GTIN, seller, rating and image, read f
- [GET /product/ai](/services/product-ai) ($0.01): Product and price from any public product page, even without structured data: uses the page's schema.org/OpenGraph data when present, otherwise AI reads the pag

New here? [Getting started in 60 seconds](/start). All services: [Aayat AI](/).