{
  "openapi": "3.1.0",
  "info": {
    "title": "mdapi",
    "description": "Web pages -> LLM-ready Markdown or structured JSON. Pay per call with x402 (USDC on Base). No signup, no API key.",
    "version": "1.0.0",
    "contact": {
      "email": "constant-7997@agentmail.to"
    }
  },
  "servers": [
    {
      "url": "https://md.fastdb.in"
    }
  ],
  "paths": {
    "/md": {
      "post": {
        "operationId": "url-to-markdown",
        "summary": "Scrape any web page: URL to Markdown / HTML to Markdown for LLM context",
        "description": "Give it a URL, get back LLM-ready Markdown with the nav, cookie banners, ads, scripts, and footers stripped out. Readability article extraction keeps tables and code blocks. Optional render:true executes JavaScript in a headless browser for SPAs (React/Next/Vue) that a plain fetch returns empty.",
        "security": [],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.005"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Public http(s) URL of the page to fetch and convert.",
                    "example": "https://example.com/article"
                  },
                  "html": {
                    "type": "string",
                    "description": "Raw HTML to convert instead of fetching a URL. Supply url or html."
                  },
                  "mode": {
                    "type": "string",
                    "enum": [
                      "article",
                      "full"
                    ],
                    "default": "article",
                    "description": "article extracts the main content; full converts the whole document."
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Scrape any web page: URL to Markdown / HTML to Markdown for LLM context",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "markdown": {},
                    "title": {},
                    "byline": {},
                    "excerpt": {},
                    "mode": {},
                    "words": {},
                    "url": {},
                    "rendered": {},
                    "ms": {}
                  },
                  "example": {
                    "markdown": "# Title\n\nBody...",
                    "title": "Title",
                    "byline": "Author name or null",
                    "mode": "article",
                    "words": 7139,
                    "rendered": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — missing/invalid url or html."
          },
          "402": {
            "description": "Payment required. Body carries x402 payment requirements; retry with an X-PAYMENT header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/extract": {
      "post": {
        "operationId": "extract-web-data",
        "summary": "Scrape a web page to structured JSON: title, byline, text, links, images, OpenGraph meta",
        "description": "Web data extraction for AI agents, RAG ingestion, and LLM pipelines: title, byline, publish time, plain text, and every link and image on the page, absolutized and deduped.",
        "security": [],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.005"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Public http(s) URL of the page to fetch and convert.",
                    "example": "https://example.com/article"
                  },
                  "html": {
                    "type": "string",
                    "description": "Raw HTML to convert instead of fetching a URL. Supply url or html."
                  },
                  "mode": {
                    "type": "string",
                    "enum": [
                      "article",
                      "full"
                    ],
                    "default": "article",
                    "description": "article extracts the main content; full converts the whole document."
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Scrape a web page to structured JSON: title, byline, text, links, images, OpenGraph meta",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "title": {},
                    "byline": {},
                    "excerpt": {},
                    "siteName": {},
                    "publishedTime": {},
                    "lang": {},
                    "text": {},
                    "words": {},
                    "links": {},
                    "images": {},
                    "meta": {}
                  },
                  "example": {
                    "title": "Title",
                    "siteName": "Example",
                    "publishedTime": "2026-01-01T00:00:00Z",
                    "words": 2037,
                    "links": [
                      {
                        "href": "https://example.com/abs",
                        "text": "link text"
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — missing/invalid url or html."
          },
          "402": {
            "description": "Payment required. Body carries x402 payment requirements; retry with an X-PAYMENT header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/pulse/price": {
      "post": {
        "operationId": "crypto-price",
        "summary": "Real-time crypto prices (USD)",
        "description": "Spot USD prices for any of the majors by symbol, any CoinGecko id, or any token by chain:address. Aggregated with a confidence score, ~15s freshness.",
        "security": [],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "coins": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 25,
                    "description": "Symbols (BTC, ETH, SOL, USDC, USDT, DAI, BNB, XRP, ...), \"coingecko:<id>\", or \"<chain>:<tokenAddress>\".",
                    "example": [
                      "ETH",
                      "BTC"
                    ]
                  }
                },
                "required": [
                  "coins"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Real-time crypto prices (USD)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "prices": {},
                    "at": {},
                    "source": {},
                    "ms": {}
                  },
                  "example": {
                    "prices": {
                      "ETH": {
                        "usd": 1818.32,
                        "symbol": "ETH",
                        "confidence": 0.99,
                        "key": "coingecko:ethereum"
                      },
                      "BTC": {
                        "usd": 63164.1,
                        "symbol": "BTC",
                        "confidence": 0.99,
                        "key": "coingecko:bitcoin"
                      }
                    },
                    "at": "2026-07-17T15:00:00.000Z",
                    "source": "defillama"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — unknown coin, chain, or protocol."
          },
          "402": {
            "description": "Payment required. Body carries x402 payment requirements; retry with an X-PAYMENT header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/pulse/gas": {
      "post": {
        "operationId": "gas-price",
        "summary": "Live gas across 5 chains",
        "description": "Current gas price, next-block base fee, and slow/standard/fast priority fees straight from chain RPC — plus the USD cost of a transfer so agents can compare chains without unit math. Ethereum, Base, Arbitrum, Optimism, Polygon.",
        "security": [],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "chains": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "ethereum",
                        "base",
                        "arbitrum",
                        "optimism",
                        "polygon"
                      ]
                    },
                    "description": "Chains to quote. Omit for all supported chains.",
                    "example": [
                      "base",
                      "ethereum"
                    ]
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Live gas across 5 chains",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "gas": {},
                    "chains": {},
                    "at": {},
                    "ms": {}
                  },
                  "example": {
                    "gas": {
                      "base": {
                        "chain": "base",
                        "blockNumber": 48755195,
                        "gasPriceGwei": 0.006,
                        "baseFeeGwei": 0.005,
                        "priorityFee": {
                          "slowGwei": 0.0001,
                          "standardGwei": 0.0011,
                          "fastGwei": 0.019
                        },
                        "nativeSymbol": "ETH",
                        "nativeUsd": 1818.32,
                        "transferCostUsd": 0.0002291
                      }
                    },
                    "chains": [
                      "base"
                    ],
                    "at": "2026-07-17T15:00:00.000Z"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — unknown coin, chain, or protocol."
          },
          "402": {
            "description": "Payment required. Body carries x402 payment requirements; retry with an X-PAYMENT header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/pulse/tvl": {
      "post": {
        "operationId": "defi-tvl",
        "summary": "DeFi protocol TVL (USD)",
        "description": "Current total value locked for any DeFi protocol by its DefiLlama slug.",
        "security": [],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "protocols": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 10,
                    "description": "DefiLlama protocol slugs.",
                    "example": [
                      "uniswap",
                      "aave"
                    ]
                  }
                },
                "required": [
                  "protocols"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "DeFi protocol TVL (USD)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "tvl": {},
                    "at": {},
                    "source": {},
                    "ms": {}
                  },
                  "example": {
                    "tvl": {
                      "uniswap": {
                        "usd": 3067634352.49
                      },
                      "aave": {
                        "usd": 24500000000
                      }
                    },
                    "at": "2026-07-17T15:00:00.000Z",
                    "source": "defillama"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — unknown coin, chain, or protocol."
          },
          "402": {
            "description": "Payment required. Body carries x402 payment requirements; retry with an X-PAYMENT header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/pulse/odds": {
      "post": {
        "operationId": "polymarket-odds",
        "summary": "Polymarket prediction market odds: live prices for any market by search or slug",
        "description": "Live Polymarket odds normalized for agents: search any topic (\"fed rate cut\", \"world cup\") or fetch one market by slug. Returns outcomes, prices, bid/ask spread, 24h volume, liquidity, and resolution date. ~15s freshness.",
        "security": [],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string",
                    "maxLength": 200,
                    "description": "Free-text search across Polymarket markets.",
                    "example": "argentina world cup"
                  },
                  "slug": {
                    "type": "string",
                    "description": "Exact Polymarket market slug (alternative to query)."
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 50,
                    "default": 10
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Polymarket prediction market odds: live prices for any market by search or slug",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "markets": {},
                    "query": {},
                    "source": {},
                    "ms": {}
                  },
                  "example": {
                    "markets": [
                      {
                        "question": "Will Argentina win the 2026 FIFA World Cup?",
                        "slug": "will-argentina-win-the-2026-fifa-world-cup",
                        "outcomes": [
                          "Yes",
                          "No"
                        ],
                        "prices": [
                          0.4055,
                          0.5945
                        ],
                        "bestBid": 0.404,
                        "bestAsk": 0.407,
                        "spread": 0.003,
                        "oneDayPriceChange": 0.021,
                        "volume24h": 3276661,
                        "liquidity": 812000,
                        "endDate": "2026-07-20T00:00:00Z",
                        "active": true,
                        "url": "https://polymarket.com/market/will-argentina-win-the-2026-fifa-world-cup"
                      }
                    ],
                    "query": "argentina world cup",
                    "source": "polymarket"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — unknown coin, chain, or protocol."
          },
          "402": {
            "description": "Payment required. Body carries x402 payment requirements; retry with an X-PAYMENT header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/pulse/movers": {
      "post": {
        "operationId": "polymarket-movers",
        "summary": "Polymarket biggest movers: prediction markets with the largest 24h odds swings",
        "description": "The prediction markets that moved most in the last 24 hours, filtered to liquid markets (default $10k+ daily volume). The fastest way for an agent to spot where consensus is shifting. ~15s freshness.",
        "security": [],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 50,
                    "default": 10
                  },
                  "minVolume24h": {
                    "type": "number",
                    "minimum": 0,
                    "default": 10000,
                    "description": "Ignore markets below this 24h USD volume."
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Polymarket biggest movers: prediction markets with the largest 24h odds swings",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "movers": {},
                    "minVolume24h": {},
                    "source": {},
                    "ms": {}
                  },
                  "example": {
                    "movers": [
                      {
                        "question": "Will France win on 2026-07-18?",
                        "prices": [
                          0.495,
                          0.505
                        ],
                        "oneDayPriceChange": -0.11,
                        "volume24h": 800800
                      }
                    ],
                    "minVolume24h": 10000,
                    "source": "polymarket"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — unknown coin, chain, or protocol."
          },
          "402": {
            "description": "Payment required. Body carries x402 payment requirements; retry with an X-PAYMENT header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/pulse/resolving": {
      "post": {
        "operationId": "polymarket-resolving",
        "summary": "Polymarket markets resolving soon: active prediction markets ending within N hours",
        "description": "Active Polymarket markets that resolve within your window (default 24h), sorted by volume. For agents hunting near-resolution opportunities or tracking imminent event outcomes. ~15s freshness.",
        "security": [],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.001"
          },
          "protocols": [
            {
              "x402": {}
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "hours": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "maximum": 720,
                    "default": 24,
                    "description": "Window: markets ending within this many hours."
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 50,
                    "default": 10
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Polymarket markets resolving soon: active prediction markets ending within N hours",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "resolving": {},
                    "withinHours": {},
                    "source": {},
                    "ms": {}
                  },
                  "example": {
                    "resolving": [
                      {
                        "question": "France vs. England: Team to Win",
                        "prices": [
                          0.645,
                          0.355
                        ],
                        "volume24h": 1181760,
                        "endDate": "2026-07-18T22:00:00Z"
                      }
                    ],
                    "withinHours": 24,
                    "source": "polymarket"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad request — unknown coin, chain, or protocol."
          },
          "402": {
            "description": "Payment required. Body carries x402 payment requirements; retry with an X-PAYMENT header.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/shot/shot": {
      "post": {
        "operationId": "screenshot",
        "summary": "Screenshot any URL through a real headless Chromium (JS fully rendered).",
        "description": "Screenshot any URL as PNG/JPEG through real headless Chromium — full JS rendering (SPAs work), fullPage or viewport, CSS-selector element capture, retina scale. Agent eyes for the web: verify pages visually, archive proof, capture previews. $0.005 per call via x402.",
        "security": [],
        "x-payment-info": {
          "protocol": "x402",
          "network": "base",
          "currency": "USDC",
          "price": "0.005"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "Page to capture (http/https, public hosts only)"
                  },
                  "width": {
                    "type": "integer",
                    "minimum": 320,
                    "maximum": 1920,
                    "description": "Viewport width, default 1280"
                  },
                  "height": {
                    "type": "integer",
                    "minimum": 240,
                    "maximum": 1920,
                    "description": "Viewport height, default 800"
                  },
                  "fullPage": {
                    "type": "boolean",
                    "description": "Capture the entire scrollable page, default false"
                  },
                  "selector": {
                    "type": "string",
                    "description": "CSS selector — capture just this element"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "png",
                      "jpeg"
                    ],
                    "description": "Image format, default png"
                  },
                  "quality": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "description": "JPEG quality, default 80 (jpeg only)"
                  },
                  "scale": {
                    "type": "number",
                    "enum": [
                      1,
                      2
                    ],
                    "description": "Device scale factor (2 = retina), default 1"
                  },
                  "waitMs": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10000,
                    "description": "Extra settle time after load, ms"
                  },
                  "response": {
                    "type": "string",
                    "enum": [
                      "json",
                      "binary"
                    ],
                    "description": "json (default) wraps base64; binary returns raw image bytes"
                  }
                },
                "required": [
                  "url"
                ]
              },
              "example": {
                "url": "https://example.com",
                "fullPage": false,
                "width": 1280,
                "height": 800
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rendered output (JSON with base64 by default; binary when response=binary)"
          },
          "402": {
            "description": "x402 payment required — body carries payment requirements"
          },
          "422": {
            "description": "Invalid parameters (not charged)"
          }
        }
      }
    },
    "/shot/pdf": {
      "post": {
        "operationId": "url-to-pdf",
        "summary": "Convert any URL to a PDF document.",
        "description": "Convert any URL to a PDF through real headless Chromium — full JS rendering, print backgrounds, A4/Letter/Legal, portrait or landscape. Archive pages, generate reports and invoices from live web pages. $0.01 per call via x402.",
        "security": [],
        "x-payment-info": {
          "protocol": "x402",
          "network": "base",
          "currency": "USDC",
          "price": "0.01"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "Page to convert (http/https, public hosts only)"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "A4",
                      "Letter",
                      "Legal"
                    ],
                    "description": "Paper size, default A4"
                  },
                  "landscape": {
                    "type": "boolean",
                    "description": "Landscape orientation, default false"
                  },
                  "scale": {
                    "type": "number",
                    "minimum": 0.1,
                    "maximum": 2,
                    "description": "Render scale, default 1"
                  },
                  "waitMs": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10000,
                    "description": "Extra settle time after load, ms"
                  },
                  "response": {
                    "type": "string",
                    "enum": [
                      "json",
                      "binary"
                    ],
                    "description": "json (default) wraps base64; binary returns application/pdf bytes"
                  }
                },
                "required": [
                  "url"
                ]
              },
              "example": {
                "url": "https://example.com",
                "format": "A4"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rendered output (JSON with base64 by default; binary when response=binary)"
          },
          "402": {
            "description": "x402 payment required — body carries payment requirements"
          },
          "422": {
            "description": "Invalid parameters (not charged)"
          }
        }
      }
    },
    "/shot/render": {
      "post": {
        "operationId": "html-to-image",
        "summary": "Render your own HTML/CSS to a PNG or JPEG image.",
        "description": "Render caller-supplied HTML/CSS (JS allowed) to a PNG/JPEG image — OG/social cards, link previews, badges, receipts, any picture you can express as HTML. Transparent backgrounds supported. Default canvas 1200x630 (OG size). $0.005 per call via x402.",
        "security": [],
        "x-payment-info": {
          "protocol": "x402",
          "network": "base",
          "currency": "USDC",
          "price": "0.005"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "html": {
                    "type": "string",
                    "description": "HTML document or fragment to render (max 2 MB)"
                  },
                  "width": {
                    "type": "integer",
                    "minimum": 16,
                    "maximum": 1920,
                    "description": "Canvas width, default 1200"
                  },
                  "height": {
                    "type": "integer",
                    "minimum": 16,
                    "maximum": 1920,
                    "description": "Canvas height, default 630"
                  },
                  "fullPage": {
                    "type": "boolean",
                    "description": "Capture full content height instead of the fixed canvas"
                  },
                  "selector": {
                    "type": "string",
                    "description": "CSS selector — capture just this element"
                  },
                  "transparent": {
                    "type": "boolean",
                    "description": "Omit default white background (png only)"
                  },
                  "format": {
                    "type": "string",
                    "enum": [
                      "png",
                      "jpeg"
                    ],
                    "description": "Image format, default png"
                  },
                  "quality": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "description": "JPEG quality, default 80 (jpeg only)"
                  },
                  "scale": {
                    "type": "number",
                    "enum": [
                      1,
                      2
                    ],
                    "description": "Device scale factor (2 = retina), default 1"
                  },
                  "waitMs": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 10000,
                    "description": "Extra settle time after load, ms"
                  },
                  "response": {
                    "type": "string",
                    "enum": [
                      "json",
                      "binary"
                    ],
                    "description": "json (default) wraps base64; binary returns raw image bytes"
                  }
                },
                "required": [
                  "html"
                ]
              },
              "example": {
                "html": "<div style=\"width:1200px;height:630px;display:grid;place-items:center;background:#0b1220;color:#fff;font:64px sans-serif\">Hello, agents</div>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rendered output (JSON with base64 by default; binary when response=binary)"
          },
          "402": {
            "description": "x402 payment required — body carries payment requirements"
          },
          "422": {
            "description": "Invalid parameters (not charged)"
          }
        }
      }
    },
    "/shot/chart": {
      "post": {
        "operationId": "chart-image",
        "summary": "Turn a Chart.js config into a PNG chart image.",
        "description": "Turn a plain Chart.js v4 config (type, data, options as JSON) into a PNG chart image — line, bar, pie, doughnut, scatter, radar. No accounts, no watermark; made for agents producing reports, dashboards and social posts. $0.005 per call via x402.",
        "security": [],
        "x-payment-info": {
          "protocol": "x402",
          "network": "base",
          "currency": "USDC",
          "price": "0.005"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "chart": {
                    "type": "object",
                    "description": "Chart.js v4 config: { type, data, options? } (JSON only, max 512 KB)"
                  },
                  "width": {
                    "type": "integer",
                    "minimum": 100,
                    "maximum": 1920,
                    "description": "Chart width px, default 800"
                  },
                  "height": {
                    "type": "integer",
                    "minimum": 100,
                    "maximum": 1920,
                    "description": "Chart height px, default 400"
                  },
                  "transparent": {
                    "type": "boolean",
                    "description": "Transparent background instead of white"
                  },
                  "scale": {
                    "type": "number",
                    "enum": [
                      1,
                      2
                    ],
                    "description": "Device scale factor, default 2 (crisp)"
                  },
                  "response": {
                    "type": "string",
                    "enum": [
                      "json",
                      "binary"
                    ],
                    "description": "json (default) wraps base64; binary returns raw PNG bytes"
                  }
                },
                "required": [
                  "chart"
                ]
              },
              "example": {
                "chart": {
                  "type": "line",
                  "data": {
                    "labels": [
                      "Mon",
                      "Tue",
                      "Wed",
                      "Thu",
                      "Fri"
                    ],
                    "datasets": [
                      {
                        "label": "USDC volume",
                        "data": [
                          12,
                          19,
                          8,
                          24,
                          31
                        ],
                        "borderColor": "#2563eb"
                      }
                    ]
                  }
                },
                "width": 800,
                "height": 400
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Rendered output (JSON with base64 by default; binary when response=binary)"
          },
          "402": {
            "description": "x402 payment required — body carries payment requirements"
          },
          "422": {
            "description": "Invalid parameters (not charged)"
          }
        }
      }
    }
  },
  "x-payment-recipient": "0x072F3a2bD93bB75b1Eb84a9E45D17a4F90a6D801"
}