{"protocolVersion":"0.2.1","name":"Haunt","description":"Web extraction for AI agents. Send a URL and a plain-English prompt, get clean structured JSON or Markdown from permitted public pages. When a page cannot be read it returns a typed reason instead of invented data, and the failed call is not charged.","url":"https://hauntapi.com","documentationUrl":"https://hauntapi.com/docs","preferredTransport":"JSONRPC","provider":{"organization":"Haunt","url":"https://hauntapi.com/?utm_source=agent-card&utm_medium=discovery&utm_campaign=sweep-2026-07"},"capabilities":{"streaming":false,"pushNotifications":false},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["application/json","text/markdown"],"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"Authorization: Bearer <HAUNT_API_KEY>. Free key, no card."}},"skills":[{"id":"extract","name":"Extract structured data from a web page","description":"POST /v1/extract with a url and a prompt. Returns JSON matching your prompt, or a typed failure. Blocked pages cost nothing.","tags":["web scraping","extraction","crawl","structured data"],"examples":["Extract the product name, price and stock status from this page","Return the article text as Markdown"]},{"id":"read","name":"Read a page as Markdown, no key needed","description":"GET /r/<url> returns clean Markdown. Rate limited, never paywalled.","tags":["reader","markdown"]}],"additionalInterfaces":[{"transport":"JSONRPC","url":"https://hauntapi.com/mcp/server"},{"transport":"HTTP+JSON","url":"https://hauntapi.com/v1/extract"}],"honestFailure":{"description":"Failures are typed and unbilled, so an agent can branch on the reason rather than act on fabricated data.","errorCodes":["blocked","not_found","login_required","captcha_required","access_denied"]}}