{"openapi":"3.1.0","info":{"title":"AgisHub","version":"3.0.0","description":"Pay-per-call APIs for AI agents over x402 (USDC on Base). No API key and no signup: call an endpoint, get a 402 challenge, pay it, get the result. AI (chat, summarise, classify, entity and structured extraction, embeddings, transcription, text-to-speech, image generation), web (fetch as markdown, CSS scrape, link map, crawl, screenshot, snapshot, headless browser), documents (HTML to PDF), time and scheduling, live crypto prices, unit and currency conversion, agent memory, webhooks, QR codes and short links. Also free over MCP.","x-guidance":"Paid over HTTP: POST /v1/<tool> with the JSON body described by the operation's requestBody schema (or GET /v1/<tool> with the same fields in the query string). An unpaid request returns HTTP 402 with a payment-required header carrying the x402 challenge (exact scheme, USDC on Base); sign it and retry the same request with a payment-signature header. Prices run from $0.01 to $0.10 per call and are stated per operation as x-price. Most tools are also reachable over MCP (POST /mcp, JSON-RPC; x-tool gives the tool name there, and is null for the ones that are HTTP-only) — but the ones that need a real browser or a model answer over MCP with the exact paid call to make instead of running, so do not plan on getting those for free. The /paid/<tool> prefix is a legacy alias of /v1/<tool> kept for compatibility; prefer /v1.","x-mcp":{"transport":"streamable-http (JSON-RPC over POST)","endpoints":{"/mcp":"every tool on the mcp channel","/web":"web scraping and crawling only","/mcp/web":"same server as /web, kept for the clients already pointing here","/sse":"legacy SSE transport"},"free_tools":["request_feature"]},"contact":{"name":"AgisHub — Support & Community","url":"https://github.com/agishub/agishub-mcp/discussions","email":"jmavid@gmail.com"},"license":{"name":"MIT","identifier":"MIT"}},"externalDocs":{"description":"Questions, bug reports & feature requests","url":"https://github.com/agishub/agishub-mcp/discussions"},"servers":[{"url":"https://api.agishub.com"}],"tags":[{"name":"AI & Inference","description":"Language-model calls: chat, summarise, classify, entity extraction and embeddings."},{"name":"Data & Analytics","description":"Convert and compute over data: time zones, dates, scheduling, currencies and units."},{"name":"Developer Tools","description":"Plumbing for agents: webhooks, short links and QR codes."},{"name":"Knowledge & Memory","description":"Store text and retrieve it later by meaning, as durable memory for an agent."},{"name":"Market Data","description":"Live market prices."},{"name":"Media & Generation","description":"Produce media: images from a prompt, speech from text, transcription from audio, PDF from a page."},{"name":"Search & Web","description":"Read the web: fetch pages as Markdown, scrape by CSS selector, map links, crawl a site, screenshot or drive a headless browser."}],"components":{"securitySchemes":{"x402":{"type":"apiKey","in":"header","name":"payment-signature","description":"Signed x402 payment (USDC on Base). Call without it to get the HTTP 402 challenge in the `payment-required` header, sign that challenge, and resend the same request with this header."}}},"security":[{},{"x402":[]}],"paths":{"/v1/chat":{"post":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"chat","x-category":"AI & Inference","x-price":"$0.02","x-use-cases":["answer questions","reasoning","instruction following","brainstorming"],"x-tags":["ai","chat","llm","reasoning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"chat","summary":"Ask a general-purpose LLM a question or give it an instruction, with an optional system prompt.","description":"Ask a general-purpose LLM a question or give it an instruction, with an optional system prompt. No external API key required.\n\nPaid per call: $0.02 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: answer questions, reasoning, instruction following, brainstorming.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"The user's message or question for the assistant."},"system":{"type":"string","description":"Optional system instruction to steer the assistant's behaviour/persona."},"max_tokens":{"type":"integer","exclusiveMinimum":0,"maximum":2048,"description":"Maximum tokens to generate (default 512)."}},"required":["prompt"],"additionalProperties":false},"example":{"prompt":"What is the x402 protocol?","system":"You are a concise assistant."}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"chat","x-category":"AI & Inference","x-price":"$0.02","x-use-cases":["answer questions","reasoning","instruction following","brainstorming"],"x-tags":["ai","chat","llm","reasoning"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"chat_get","summary":"Ask a general-purpose LLM a question or give it an instruction, with an optional system prompt. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/chat`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"prompt","in":"query","required":true,"description":"The user's message or question for the assistant.","schema":{"type":"string","minLength":1,"description":"The user's message or question for the assistant."},"example":"What is the x402 protocol?"},{"name":"system","in":"query","required":false,"description":"Optional system instruction to steer the assistant's behaviour/persona.","schema":{"type":"string","description":"Optional system instruction to steer the assistant's behaviour/persona."},"example":"You are a concise assistant."},{"name":"max_tokens","in":"query","required":false,"description":"Maximum tokens to generate (default 512).","schema":{"type":"integer","exclusiveMinimum":0,"maximum":2048,"description":"Maximum tokens to generate (default 512)."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/classify":{"post":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"classify","x-category":"AI & Inference","x-price":"$0.02","x-use-cases":["sentiment analysis","topic classification","intent detection","content moderation"],"x-tags":["ai","classify","nlp","categorization"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"classify","summary":"Classify a text into exactly one of the candidate labels you provide (e.g. sentiment, topic, intent).","description":"Classify a text into exactly one of the candidate labels you provide (e.g. sentiment, topic, intent).\n\nPaid per call: $0.02 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: sentiment analysis, topic classification, intent detection, content moderation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to classify."},"labels":{"type":"array","items":{"type":"string","minLength":1},"minItems":2,"maxItems":20,"description":"Candidate labels to choose from, e.g. ['positive','negative','neutral']."}},"required":["text","labels"],"additionalProperties":false},"example":{"text":"AgisHub sells agent capabilities per call.","labels":["positive","negative"]}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"classify","x-category":"AI & Inference","x-price":"$0.02","x-use-cases":["sentiment analysis","topic classification","intent detection","content moderation"],"x-tags":["ai","classify","nlp","categorization"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"classify_get","summary":"Classify a text into exactly one of the candidate labels you provide (e.g. sentiment, topic, intent). (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/classify`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"text","in":"query","required":true,"description":"The text to classify.","schema":{"type":"string","minLength":1,"description":"The text to classify."},"example":"AgisHub sells agent capabilities per call."},{"name":"labels","in":"query","required":true,"description":"Candidate labels to choose from, e.g. ['positive','negative','neutral']. Send as JSON.","schema":{"type":"string"},"example":"[\"positive\",\"negative\"]"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/embed":{"post":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"embed","x-category":"AI & Inference","x-price":"$0.01","x-use-cases":["semantic search","rag retrieval","similarity matching","clustering"],"x-tags":["ai","embeddings","rag","vector","semantic-search"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"embed","summary":"Turn text into a numeric embedding vector for semantic search, RAG and similarity.","description":"Turn text into a numeric embedding vector for semantic search, RAG and similarity. Multilingual.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: semantic search, rag retrieval, similarity matching, clustering.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Text to embed into a numeric vector for semantic search / RAG."}},"required":["text"],"additionalProperties":false},"example":{"text":"AgisHub sells agent capabilities per call."}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"embed","x-category":"AI & Inference","x-price":"$0.01","x-use-cases":["semantic search","rag retrieval","similarity matching","clustering"],"x-tags":["ai","embeddings","rag","vector","semantic-search"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"embed_get","summary":"Turn text into a numeric embedding vector for semantic search, RAG and similarity. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/embed`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"text","in":"query","required":true,"description":"Text to embed into a numeric vector for semantic search / RAG.","schema":{"type":"string","minLength":1,"description":"Text to embed into a numeric vector for semantic search / RAG."},"example":"AgisHub sells agent capabilities per call."}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/extract":{"post":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"extract_entities","x-category":"AI & Inference","x-price":"$0.02","x-use-cases":["named entity recognition","information extraction","data structuring"],"x-tags":["ai","ner","nlp","entity-extraction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"extract","summary":"Extract named entities from text — people, organizations, locations, dates and miscellaneous — returned as structured JSON.","description":"Extract named entities from text — people, organizations, locations, dates and miscellaneous — returned as structured JSON.\n\nPaid per call: $0.02 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: named entity recognition, information extraction, data structuring.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to extract named entities from."}},"required":["text"],"additionalProperties":false},"example":{"text":"AgisHub sells agent capabilities per call."}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"extract_entities","x-category":"AI & Inference","x-price":"$0.02","x-use-cases":["named entity recognition","information extraction","data structuring"],"x-tags":["ai","ner","nlp","entity-extraction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"extract_get","summary":"Extract named entities from text — people, organizations, locations, dates and miscellaneous — returned as structured JSON. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/extract`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"text","in":"query","required":true,"description":"The text to extract named entities from.","schema":{"type":"string","minLength":1,"description":"The text to extract named entities from."},"example":"AgisHub sells agent capabilities per call."}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/summarize":{"post":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"summarize","x-category":"AI & Inference","x-price":"$0.02","x-use-cases":["document summarization","content condensing","abstract generation"],"x-tags":["ai","summarize","nlp","text-reduction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"summarize","summary":"Summarize a block of text into a short abstract, with an optional target length.","description":"Summarize a block of text into a short abstract, with an optional target length. No external API key required.\n\nPaid per call: $0.02 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: document summarization, content condensing, abstract generation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to summarize."},"max_words":{"type":"integer","exclusiveMinimum":0,"maximum":400,"description":"Approximate maximum length of the summary, in words (default ~80)."}},"required":["text"],"additionalProperties":false},"example":{"text":"AgisHub sells agent capabilities per call.","max_words":60}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["AI & Inference"],"x-service":"ai","x-tool":"summarize","x-category":"AI & Inference","x-price":"$0.02","x-use-cases":["document summarization","content condensing","abstract generation"],"x-tags":["ai","summarize","nlp","text-reduction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"summarize_get","summary":"Summarize a block of text into a short abstract, with an optional target length. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/summarize`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"text","in":"query","required":true,"description":"The text to summarize.","schema":{"type":"string","minLength":1,"description":"The text to summarize."},"example":"AgisHub sells agent capabilities per call."},{"name":"max_words","in":"query","required":false,"description":"Approximate maximum length of the summary, in words (default ~80).","schema":{"type":"integer","exclusiveMinimum":0,"maximum":400,"description":"Approximate maximum length of the summary, in words (default ~80)."},"example":60}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/web-scraper":{"post":{"tags":["Search & Web"],"x-service":"web","x-tool":"extract","x-category":"Search & Web","x-price":"$0.03","x-use-cases":["read webpage content","rag preparation","article extraction","content reading"],"x-tags":["web","scrape","markdown","rag","reader","extraction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]},"operationId":"web_scraper","summary":"Fetch any public web page and return its main content as clean, token-efficient Markdown (title, description, headings, links, lists).","description":"Fetch any public web page and return its main content as clean, token-efficient Markdown (title, description, headings, links, lists). Set render:true to execute JavaScript first for single-page apps or JS-heavy pages that would otherwise come back empty. Built for RAG and for agents that need to read the contents of a URL.\n\nPaid per call: $0.03 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: read webpage content, rag preparation, article extraction, content reading.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Full http/https URL of the page to extract."},"render":{"type":"boolean","description":"Render JavaScript with a headless browser before extracting (default false). Enable for SPAs / JS-heavy pages that return empty content otherwise. Slower."},"include_links":{"type":"boolean","description":"Keep hyperlinks in the markdown output (default true)."},"include_images":{"type":"boolean","description":"Keep images as markdown (default false)."},"max_chars":{"type":"integer","exclusiveMinimum":0,"description":"Truncate the markdown to at most this many characters (sets truncated:true)."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","render":true}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.03 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Search & Web"],"x-service":"web","x-tool":"extract","x-category":"Search & Web","x-price":"$0.03","x-use-cases":["read webpage content","rag preparation","article extraction","content reading"],"x-tags":["web","scrape","markdown","rag","reader","extraction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]},"operationId":"web_scraper_get","summary":"Fetch any public web page and return its main content as clean, token-efficient Markdown (title, description, headings, links, lists). (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/web-scraper`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Full http/https URL of the page to extract.","schema":{"type":"string","format":"uri","description":"Full http/https URL of the page to extract."},"example":"https://example.com"},{"name":"render","in":"query","required":false,"description":"Render JavaScript with a headless browser before extracting (default false). Enable for SPAs / JS-heavy pages that return empty content otherwise. Slower.","schema":{"type":"boolean","description":"Render JavaScript with a headless browser before extracting (default false). Enable for SPAs / JS-heavy pages that return empty content otherwise. Slower."},"example":true},{"name":"include_links","in":"query","required":false,"description":"Keep hyperlinks in the markdown output (default true).","schema":{"type":"boolean","description":"Keep hyperlinks in the markdown output (default true)."}},{"name":"include_images","in":"query","required":false,"description":"Keep images as markdown (default false).","schema":{"type":"boolean","description":"Keep images as markdown (default false)."}},{"name":"max_chars","in":"query","required":false,"description":"Truncate the markdown to at most this many characters (sets truncated:true).","schema":{"type":"integer","exclusiveMinimum":0,"description":"Truncate the markdown to at most this many characters (sets truncated:true)."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.03 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/scrape":{"post":{"tags":["Search & Web"],"x-service":"web","x-tool":"scrape","x-category":"Search & Web","x-price":"$0.03","x-use-cases":["scrape by selector","extract product data","table extraction"],"x-tags":["web","scrape","selectors","extract","html","css"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]},"operationId":"scrape","summary":"Extract specific elements from a JavaScript-rendered page by CSS selector.","description":"Extract specific elements from a JavaScript-rendered page by CSS selector. Give a list of selectors (e.g. 'h1', '.price', 'a.product') and get back the text and attributes of every match. Backed by a headless browser, so it works on SPAs and JS-heavy pages.\n\nPaid per call: $0.03 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: scrape by selector, extract product data, table extraction.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Full http/https URL of the page to scrape."},"selectors":{"type":"array","items":{"type":"string","minLength":1},"minItems":1,"maxItems":20,"description":"CSS selectors to extract, e.g. ['h1', 'a.product', '.price']. Returns the text and attributes of every match per selector."}},"required":["url","selectors"],"additionalProperties":false},"example":{"url":"https://example.com","selectors":["h1"]}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.03 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Search & Web"],"x-service":"web","x-tool":"scrape","x-category":"Search & Web","x-price":"$0.03","x-use-cases":["scrape by selector","extract product data","table extraction"],"x-tags":["web","scrape","selectors","extract","html","css"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]},"operationId":"scrape_get","summary":"Extract specific elements from a JavaScript-rendered page by CSS selector. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/scrape`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Full http/https URL of the page to scrape.","schema":{"type":"string","format":"uri","description":"Full http/https URL of the page to scrape."},"example":"https://example.com"},{"name":"selectors","in":"query","required":true,"description":"CSS selectors to extract, e.g. ['h1', 'a.product', '.price']. Returns the text and attributes of every match per selector. Send as JSON.","schema":{"type":"string"},"example":"[\"h1\"]"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.03 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/links":{"post":{"tags":["Search & Web"],"x-service":"web","x-tool":"links","x-category":"Search & Web","x-price":"$0.03","x-use-cases":["discover page links","seed crawler","map site structure"],"x-tags":["web","links","crawl","urls","discovery"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]},"operationId":"links","summary":"Return every hyperlink on a JavaScript-rendered page as a list of absolute URLs, with options to keep only visible links or only same-site links.","description":"Return every hyperlink on a JavaScript-rendered page as a list of absolute URLs, with options to keep only visible links or only same-site links. Backed by a headless browser. Use it to map a site or seed a crawler.\n\nPaid per call: $0.03 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: discover page links, seed crawler, map site structure.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Full http/https URL of the page to read links from."},"visible_only":{"type":"boolean","description":"Return only links visible in the rendered layout (default false)."},"exclude_external":{"type":"boolean","description":"Drop links pointing to other domains, keeping only same-site links (default false)."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","visible_only":true}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.03 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Search & Web"],"x-service":"web","x-tool":"links","x-category":"Search & Web","x-price":"$0.03","x-use-cases":["discover page links","seed crawler","map site structure"],"x-tags":["web","links","crawl","urls","discovery"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]},"operationId":"links_get","summary":"Return every hyperlink on a JavaScript-rendered page as a list of absolute URLs, with options to keep only visible links or only same-site links. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/links`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Full http/https URL of the page to read links from.","schema":{"type":"string","format":"uri","description":"Full http/https URL of the page to read links from."},"example":"https://example.com"},{"name":"visible_only","in":"query","required":false,"description":"Return only links visible in the rendered layout (default false).","schema":{"type":"boolean","description":"Return only links visible in the rendered layout (default false)."},"example":true},{"name":"exclude_external","in":"query","required":false,"description":"Drop links pointing to other domains, keeping only same-site links (default false).","schema":{"type":"boolean","description":"Drop links pointing to other domains, keeping only same-site links (default false)."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.03 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/extract-structured":{"post":{"tags":["Search & Web"],"x-service":"web","x-tool":"extract_structured","x-category":"Search & Web","x-price":"$0.05","x-use-cases":["structured data extraction","ai-powered scraping","schema-based extraction"],"x-tags":["web","ai","extract","structured","json","schema"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"extract_structured","summary":"AI-powered structured extraction: give a URL plus a natural-language prompt and/or a JSON Schema, and get back clean structured JSON (e.g. product …","description":"AI-powered structured extraction: give a URL plus a natural-language prompt and/or a JSON Schema, and get back clean structured JSON (e.g. product name, price, rating). Renders the page in a headless browser first, so it works on SPAs.\n\nPaid per call: $0.05 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: structured data extraction, ai-powered scraping, schema-based extraction.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Full http/https URL of the page to extract data from."},"prompt":{"type":"string","description":"Natural-language instruction of what to extract, e.g. 'the product name, price and rating'. Provide this and/or a schema."},"schema":{"type":"object","additionalProperties":{},"description":"Optional JSON Schema object describing the exact shape of the data to return. When given, the output is constrained to it."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","prompt":"What is the x402 protocol?"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Search & Web"],"x-service":"web","x-tool":"extract_structured","x-category":"Search & Web","x-price":"$0.05","x-use-cases":["structured data extraction","ai-powered scraping","schema-based extraction"],"x-tags":["web","ai","extract","structured","json","schema"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"extract_structured_get","summary":"AI-powered structured extraction: give a URL plus a natural-language prompt and/or a JSON Schema, and get back clean structured JSON (e.g. product … (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/extract-structured`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Full http/https URL of the page to extract data from.","schema":{"type":"string","format":"uri","description":"Full http/https URL of the page to extract data from."},"example":"https://example.com"},{"name":"prompt","in":"query","required":false,"description":"Natural-language instruction of what to extract, e.g. 'the product name, price and rating'. Provide this and/or a schema.","schema":{"type":"string","description":"Natural-language instruction of what to extract, e.g. 'the product name, price and rating'. Provide this and/or a schema."},"example":"What is the x402 protocol?"},{"name":"schema","in":"query","required":false,"description":"Optional JSON Schema object describing the exact shape of the data to return. When given, the output is constrained to it. Send as JSON.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/snapshot":{"post":{"tags":["Search & Web"],"x-service":"web","x-tool":"snapshot","x-category":"Search & Web","x-price":"$0.05","x-use-cases":["multi-format capture","html + markdown + screenshot"],"x-tags":["web","snapshot","html","markdown","accessibility"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"snapshot","summary":"Capture several representations of a page in one call — rendered HTML plus a PNG screenshot by default, and optionally Markdown and the accessibili…","description":"Capture several representations of a page in one call — rendered HTML plus a PNG screenshot by default, and optionally Markdown and the accessibility tree. Backed by a headless browser. Saves round-trips when an agent needs both the content and a visual of a page.\n\nPaid per call: $0.05 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: multi-format capture, html + markdown + screenshot.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Full http/https URL to capture."},"formats":{"type":"array","items":{"type":"string","enum":["html","screenshot","markdown","accessibilityTree"]},"description":"Which representations to return (default ['html','screenshot']). Add 'markdown' and/or 'accessibilityTree' as needed."},"full_page":{"type":"boolean","description":"Capture the full scrollable page in the screenshot instead of just the viewport (default false)."},"width":{"type":"integer","exclusiveMinimum":0,"description":"Viewport width in pixels (default 1280)."},"height":{"type":"integer","exclusiveMinimum":0,"description":"Viewport height in pixels (default 800)."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","formats":["html"]}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Search & Web"],"x-service":"web","x-tool":"snapshot","x-category":"Search & Web","x-price":"$0.05","x-use-cases":["multi-format capture","html + markdown + screenshot"],"x-tags":["web","snapshot","html","markdown","accessibility"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"snapshot_get","summary":"Capture several representations of a page in one call — rendered HTML plus a PNG screenshot by default, and optionally Markdown and the accessibili… (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/snapshot`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Full http/https URL to capture.","schema":{"type":"string","format":"uri","description":"Full http/https URL to capture."},"example":"https://example.com"},{"name":"formats","in":"query","required":false,"description":"Which representations to return (default ['html','screenshot']). Add 'markdown' and/or 'accessibilityTree' as needed. Send as JSON.","schema":{"type":"string"},"example":"[\"html\"]"},{"name":"full_page","in":"query","required":false,"description":"Capture the full scrollable page in the screenshot instead of just the viewport (default false).","schema":{"type":"boolean","description":"Capture the full scrollable page in the screenshot instead of just the viewport (default false)."}},{"name":"width","in":"query","required":false,"description":"Viewport width in pixels (default 1280).","schema":{"type":"integer","exclusiveMinimum":0,"description":"Viewport width in pixels (default 1280)."}},{"name":"height","in":"query","required":false,"description":"Viewport height in pixels (default 800).","schema":{"type":"integer","exclusiveMinimum":0,"description":"Viewport height in pixels (default 800)."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/browser-automate":{"post":{"tags":["Search & Web"],"x-service":"web","x-tool":"browser","x-category":"Search & Web","x-price":"$0.10","x-use-cases":["form filling","multi-step flows","login automation","click sequences"],"x-tags":["web","automation","click","forms","browser","interaction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"operationId":"browser_automate","summary":"Drive a headless browser: open a URL and run an ordered list of steps — click, type, press keys, wait, extract text and screenshot.","description":"Drive a headless browser: open a URL and run an ordered list of steps — click, type, press keys, wait, extract text and screenshot. For flows the plain scraper can't reach (logins, forms, multi-step pages).\n\nPaid per call: $0.10 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: form filling, multi-step flows, login automation, click sequences.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Starting URL to open in a headless browser."},"steps":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","enum":["click","type","press","wait","extract_text","screenshot"],"description":"What to do."},"selector":{"type":"string","description":"CSS selector (for click/type/wait-for/extract_text)."},"text":{"type":"string","description":"Text to type (type), or key to press (press, e.g. 'Enter')."},"ms":{"type":"integer","minimum":0,"maximum":10000,"description":"Milliseconds to wait (wait, when no selector given)."}},"required":["action"],"additionalProperties":false},"maxItems":20,"description":"Ordered actions to perform after the page loads."},"screenshot":{"type":"boolean","description":"Also return a final full-page PNG screenshot (base64)."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","steps":[{"action":"click","selector":"h1","text":"AgisHub sells agent capabilities per call.","ms":1}]}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.10 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Search & Web"],"x-service":"web","x-tool":"browser","x-category":"Search & Web","x-price":"$0.10","x-use-cases":["form filling","multi-step flows","login automation","click sequences"],"x-tags":["web","automation","click","forms","browser","interaction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"operationId":"browser_automate_get","summary":"Drive a headless browser: open a URL and run an ordered list of steps — click, type, press keys, wait, extract text and screenshot. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/browser-automate`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Starting URL to open in a headless browser.","schema":{"type":"string","format":"uri","description":"Starting URL to open in a headless browser."},"example":"https://example.com"},{"name":"steps","in":"query","required":false,"description":"Ordered actions to perform after the page loads. Send as JSON.","schema":{"type":"string"},"example":"[{\"action\":\"click\",\"selector\":\"h1\",\"text\":\"AgisHub sells agent capabilities per call.\",\"ms\":1}]"},{"name":"screenshot","in":"query","required":false,"description":"Also return a final full-page PNG screenshot (base64).","schema":{"type":"boolean","description":"Also return a final full-page PNG screenshot (base64)."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.10 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/crawl-map":{"post":{"tags":["Search & Web"],"x-service":"web","x-tool":"map","x-category":"Search & Web","x-price":"$0.05","x-use-cases":["discover site urls","map site structure","sitemap generation"],"x-tags":["web","crawl","sitemap","urls","discovery"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"crawl_map","summary":"Discover all URLs reachable from a domain within a link depth limit.","description":"Discover all URLs reachable from a domain within a link depth limit. Returns a flat list of absolute URLs, respects robots.txt crawl delays. Use it to map a site's structure before crawling.\n\nPaid per call: $0.05 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: discover site urls, map site structure, sitemap generation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Root domain URL to map (e.g., https://example.com)."},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":200,"description":"Maximum URLs to return (default 100, max 200 per call). Respects robots.txt crawl-delay."},"include_subdomains":{"type":"boolean","description":"Include URLs from subdomains (default false, same domain only)."},"search":{"type":"string","description":"Optional regex or plain string to filter results (case-insensitive)."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","limit":5}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Search & Web"],"x-service":"web","x-tool":"map","x-category":"Search & Web","x-price":"$0.05","x-use-cases":["discover site urls","map site structure","sitemap generation"],"x-tags":["web","crawl","sitemap","urls","discovery"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"crawl_map_get","summary":"Discover all URLs reachable from a domain within a link depth limit. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/crawl-map`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Root domain URL to map (e.g., https://example.com).","schema":{"type":"string","format":"uri","description":"Root domain URL to map (e.g., https://example.com)."},"example":"https://example.com"},{"name":"limit","in":"query","required":false,"description":"Maximum URLs to return (default 100, max 200 per call). Respects robots.txt crawl-delay.","schema":{"type":"integer","exclusiveMinimum":0,"maximum":200,"description":"Maximum URLs to return (default 100, max 200 per call). Respects robots.txt crawl-delay."},"example":5},{"name":"include_subdomains","in":"query","required":false,"description":"Include URLs from subdomains (default false, same domain only).","schema":{"type":"boolean","description":"Include URLs from subdomains (default false, same domain only)."}},{"name":"search","in":"query","required":false,"description":"Optional regex or plain string to filter results (case-insensitive).","schema":{"type":"string","description":"Optional regex or plain string to filter results (case-insensitive)."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/crawl":{"post":{"tags":["Search & Web"],"x-service":"web","x-tool":"crawl","x-category":"Search & Web","x-price":"$0.10","x-use-cases":["crawl entire sites","batch page fetch","deep crawling"],"x-tags":["web","crawl","fetch","multiple-pages","depth"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"operationId":"crawl","summary":"Crawl multiple pages of a site, respecting link depth and domain limits.","description":"Crawl multiple pages of a site, respecting link depth and domain limits. Returns async job_id; results include markdown or HTML per page. Use it to fetch and process many pages of content at once.\n\nPaid per call: $0.10 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: crawl entire sites, batch page fetch, deep crawling.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Root domain URL to crawl (e.g., https://example.com)."},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":100,"description":"Maximum pages to crawl (default 100, max 100 per call). Returns 202 with job_id for async processing. For larger sites, issue several calls: each one is priced the same, so 1.000 pages cost ten calls."},"max_depth":{"type":"integer","exclusiveMinimum":0,"maximum":10,"description":"Maximum link depth from root (default 2, max 10). Depth 0 = root only, depth 1 = root + direct children."},"formats":{"type":"array","items":{"type":"string","enum":["markdown","html"]},"description":"Output formats per page (default ['markdown']). 'html' adds raw HTML."},"same_domain":{"type":"boolean","description":"Only crawl URLs on the same domain (default true). Subdomain links are excluded when false."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","limit":5}}}},"responses":{"202":{"description":"Accepted: the job is queued and a job_id is returned, not the crawl result. Collect it from GET /v1/crawl/{job_id}.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.10 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Search & Web"],"x-service":"web","x-tool":"crawl","x-category":"Search & Web","x-price":"$0.10","x-use-cases":["crawl entire sites","batch page fetch","deep crawling"],"x-tags":["web","crawl","fetch","multiple-pages","depth"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"operationId":"crawl_get","summary":"Crawl multiple pages of a site, respecting link depth and domain limits. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/crawl`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Root domain URL to crawl (e.g., https://example.com).","schema":{"type":"string","format":"uri","description":"Root domain URL to crawl (e.g., https://example.com)."},"example":"https://example.com"},{"name":"limit","in":"query","required":false,"description":"Maximum pages to crawl (default 100, max 100 per call). Returns 202 with job_id for async processing. For larger sites, issue several calls: each one is priced the same, so 1.000 pages cost ten calls.","schema":{"type":"integer","exclusiveMinimum":0,"maximum":100,"description":"Maximum pages to crawl (default 100, max 100 per call). Returns 202 with job_id for async processing. For larger sites, issue several calls: each one is priced the same, so 1.000 pages cost ten calls."},"example":5},{"name":"max_depth","in":"query","required":false,"description":"Maximum link depth from root (default 2, max 10). Depth 0 = root only, depth 1 = root + direct children.","schema":{"type":"integer","exclusiveMinimum":0,"maximum":10,"description":"Maximum link depth from root (default 2, max 10). Depth 0 = root only, depth 1 = root + direct children."}},{"name":"formats","in":"query","required":false,"description":"Output formats per page (default ['markdown']). 'html' adds raw HTML. Send as JSON.","schema":{"type":"string"}},{"name":"same_domain","in":"query","required":false,"description":"Only crawl URLs on the same domain (default true). Subdomain links are excluded when false.","schema":{"type":"boolean","description":"Only crawl URLs on the same domain (default true). Subdomain links are excluded when false."}}],"responses":{"202":{"description":"Accepted: the job is queued and a job_id is returned, not the crawl result. Collect it from GET /v1/crawl/{job_id}.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.10 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/screenshot":{"post":{"tags":["Search & Web"],"x-service":"web","x-tool":"screenshot","x-category":"Search & Web","x-price":"$0.03","x-use-cases":["page screenshot","visual capture","full-page render"],"x-tags":["web","screenshot","render","image","png","visual"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]},"operationId":"screenshot","summary":"Capture a PNG screenshot of any public URL — full page or just the viewport, at a chosen size — returned base64-encoded.","description":"Capture a PNG screenshot of any public URL — full page or just the viewport, at a chosen size — returned base64-encoded. Backed by a headless browser.\n\nPaid per call: $0.03 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: page screenshot, visual capture, full-page render.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public http/https URL to capture."},"full_page":{"type":"boolean","description":"Capture the entire scrollable page instead of just the viewport (default false)."},"width":{"type":"integer","exclusiveMinimum":0,"description":"Viewport width in pixels (default 1280)."},"height":{"type":"integer","exclusiveMinimum":0,"description":"Viewport height in pixels (default 800)."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","full_page":true}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.03 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Search & Web"],"x-service":"web","x-tool":"screenshot","x-category":"Search & Web","x-price":"$0.03","x-use-cases":["page screenshot","visual capture","full-page render"],"x-tags":["web","screenshot","render","image","png","visual"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]},"operationId":"screenshot_get","summary":"Capture a PNG screenshot of any public URL — full page or just the viewport, at a chosen size — returned base64-encoded. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/screenshot`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Public http/https URL to capture.","schema":{"type":"string","format":"uri","description":"Public http/https URL to capture."},"example":"https://example.com"},{"name":"full_page","in":"query","required":false,"description":"Capture the entire scrollable page instead of just the viewport (default false).","schema":{"type":"boolean","description":"Capture the entire scrollable page instead of just the viewport (default false)."},"example":true},{"name":"width","in":"query","required":false,"description":"Viewport width in pixels (default 1280).","schema":{"type":"integer","exclusiveMinimum":0,"description":"Viewport width in pixels (default 1280)."}},{"name":"height","in":"query","required":false,"description":"Viewport height in pixels (default 800).","schema":{"type":"integer","exclusiveMinimum":0,"description":"Viewport height in pixels (default 800)."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.03 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/time-now":{"post":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"now","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["get current time","timezone lookup","local time query"],"x-tags":["timezone","clock"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"time_now","summary":"Get the current local time in an IANA timezone, including the UTC offset, zone abbreviation and whether DST is in effect.","description":"Get the current local time in an IANA timezone, including the UTC offset, zone abbreviation and whether DST is in effect. Use whenever you need to know what time it is 'now' somewhere.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: get current time, timezone lookup, local time query.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"timezone":{"type":"string","description":"IANA timezone, e.g. 'Europe/Madrid', 'Asia/Kolkata'."}},"required":["timezone"],"additionalProperties":false},"example":{"timezone":"Europe/Madrid"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"now","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["get current time","timezone lookup","local time query"],"x-tags":["timezone","clock"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"time_now_get","summary":"Get the current local time in an IANA timezone, including the UTC offset, zone abbreviation and whether DST is in effect. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/time-now`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"timezone","in":"query","required":true,"description":"IANA timezone, e.g. 'Europe/Madrid', 'Asia/Kolkata'.","schema":{"type":"string","description":"IANA timezone, e.g. 'Europe/Madrid', 'Asia/Kolkata'."},"example":"Europe/Madrid"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/time-convert":{"post":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"convert","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["convert between timezones","schedule across zones","time calculation"],"x-tags":["timezone","convert"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"time_convert","summary":"Convert a specific date/time from one IANA timezone to another (single or batch).","description":"Convert a specific date/time from one IANA timezone to another (single or batch). Accepts ISO 8601 or natural language ('next Tuesday 3pm'). Returns the converted datetime with UTC offset, zone abbreviation and DST flag.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: convert between timezones, schedule across zones, time calculation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"datetime":{"type":"string","description":"ISO 8601 or natural language, e.g. \"2026-07-09T15:30\" or \"next Tuesday 3pm\"."},"from":{"type":"string","description":"Source IANA timezone."},"to":{"type":"string","description":"Target IANA timezone."}},"required":["datetime","from","to"],"additionalProperties":false},"example":{"datetime":"2026-12-25","from":"Europe/Madrid","to":"America/New_York"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"convert","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["convert between timezones","schedule across zones","time calculation"],"x-tags":["timezone","convert"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"time_convert_get","summary":"Convert a specific date/time from one IANA timezone to another (single or batch). (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/time-convert`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"datetime","in":"query","required":true,"description":"ISO 8601 or natural language, e.g. \"2026-07-09T15:30\" or \"next Tuesday 3pm\".","schema":{"type":"string","description":"ISO 8601 or natural language, e.g. \"2026-07-09T15:30\" or \"next Tuesday 3pm\"."},"example":"2026-12-25"},{"name":"from","in":"query","required":true,"description":"Source IANA timezone.","schema":{"type":"string","description":"Source IANA timezone."},"example":"Europe/Madrid"},{"name":"to","in":"query","required":true,"description":"Target IANA timezone.","schema":{"type":"string","description":"Target IANA timezone."},"example":"America/New_York"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/time-offset":{"post":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"offset","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["get utc offset","timezone offset lookup"],"x-tags":["timezone","offset"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"time_offset","summary":"Get the exact UTC offset of an IANA timezone at a given instant, DST-aware.","description":"Get the exact UTC offset of an IANA timezone at a given instant, DST-aware. Correctly handles fractional offsets such as India +05:30 and Nepal +05:45.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: get utc offset, timezone offset lookup.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"timezone":{"type":"string","description":"IANA timezone."},"instant":{"type":"string","description":"ISO 8601 or natural language. Defaults to now."}},"required":["timezone"],"additionalProperties":false},"example":{"timezone":"Europe/Madrid","instant":"2026-12-25T10:00:00Z"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"offset","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["get utc offset","timezone offset lookup"],"x-tags":["timezone","offset"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"time_offset_get","summary":"Get the exact UTC offset of an IANA timezone at a given instant, DST-aware. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/time-offset`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"timezone","in":"query","required":true,"description":"IANA timezone.","schema":{"type":"string","description":"IANA timezone."},"example":"Europe/Madrid"},{"name":"instant","in":"query","required":false,"description":"ISO 8601 or natural language. Defaults to now.","schema":{"type":"string","description":"ISO 8601 or natural language. Defaults to now."},"example":"2026-12-25T10:00:00Z"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/timezones":{"post":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"timezones","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["list timezones","search timezones","timezone lookup"],"x-tags":["timezone","lookup","search"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"timezones","summary":"List or search valid IANA timezone identifiers by city/region/country, and resolve a city/country name to its timezone(s).","description":"List or search valid IANA timezone identifiers by city/region/country, and resolve a city/country name to its timezone(s). Use it to discover the exact identifier to pass to the other tools.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: list timezones, search timezones, timezone lookup.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"Case-insensitive substring filter."}},"additionalProperties":false},"example":{"query":"Madrid"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"timezones","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["list timezones","search timezones","timezone lookup"],"x-tags":["timezone","lookup","search"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"timezones_get","summary":"List or search valid IANA timezone identifiers by city/region/country, and resolve a city/country name to its timezone(s). (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/timezones`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"query","in":"query","required":false,"description":"Case-insensitive substring filter.","schema":{"type":"string","description":"Case-insensitive substring filter."},"example":"Madrid"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/date-calculate":{"post":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"calculate","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["date arithmetic","duration calculation","time difference"],"x-tags":["timezone","date-math"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"date_calculate","summary":"Timezone-aware date arithmetic: add or subtract a duration to a datetime (days are calendar-based and DST-safe; hours and minutes are absolute), or…","description":"Timezone-aware date arithmetic: add or subtract a duration to a datetime (days are calendar-based and DST-safe; hours and minutes are absolute), or compute the difference between two datetimes that may be in different zones.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: date arithmetic, duration calculation, time difference.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"datetime":{"type":"string","description":"Base datetime: ISO 8601 or natural language."},"timezone":{"type":"string","description":"IANA timezone the base datetime is in."},"operation":{"type":"object","properties":{"type":{"type":"string","enum":["add","diff"],"description":"'add' to shift the datetime by a duration, or 'diff' to measure the gap between two datetimes."},"amount":{"type":"number","description":"For type 'add': how much to shift. Use a negative number to subtract."},"unit":{"type":"string","enum":["seconds","minutes","hours","days","weeks"],"description":"For type 'add': one of seconds, minutes, hours, days, weeks."},"to_datetime":{"type":"string","description":"For type 'diff': the second datetime (ISO 8601 or natural language)."},"to_timezone":{"type":"string","description":"For type 'diff': the IANA timezone of to_datetime (defaults to the base timezone)."}},"required":["type"],"additionalProperties":false,"description":"What to compute: { type:'add', amount, unit } to add/subtract a duration, or { type:'diff', to_datetime, to_timezone? } for the difference between two datetimes."}},"required":["datetime","timezone","operation"],"additionalProperties":false},"example":{"datetime":"2026-12-25","timezone":"Europe/Madrid","operation":{"type":"add","amount":1,"unit":"seconds","to_datetime":"2026-12-25","to_timezone":"Europe/Madrid"}}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"calculate","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["date arithmetic","duration calculation","time difference"],"x-tags":["timezone","date-math"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"date_calculate_get","summary":"Timezone-aware date arithmetic: add or subtract a duration to a datetime (days are calendar-based and DST-safe; hours and minutes are absolute), or… (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/date-calculate`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"datetime","in":"query","required":true,"description":"Base datetime: ISO 8601 or natural language.","schema":{"type":"string","description":"Base datetime: ISO 8601 or natural language."},"example":"2026-12-25"},{"name":"timezone","in":"query","required":true,"description":"IANA timezone the base datetime is in.","schema":{"type":"string","description":"IANA timezone the base datetime is in."},"example":"Europe/Madrid"},{"name":"operation","in":"query","required":true,"description":"What to compute: { type:'add', amount, unit } to add/subtract a duration, or { type:'diff', to_datetime, to_timezone? } for the difference between two datetimes. Send as JSON.","schema":{"type":"string"},"example":"{\"type\":\"add\",\"amount\":1,\"unit\":\"seconds\",\"to_datetime\":\"2026-12-25\",\"to_timezone\":\"Europe/Madrid\"}"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/meeting-slots":{"post":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"meeting_slots","x-category":"Data & Analytics","x-price":"$0.10","x-use-cases":["find meeting times","timezone overlap","schedule coordination"],"x-tags":["timezone","scheduler"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"operationId":"meeting_slots","summary":"Find working-hour time slots that overlap across participants in different timezones for a meeting of a given duration, excluding weekends and (whe…","description":"Find working-hour time slots that overlap across participants in different timezones for a meeting of a given duration, excluding weekends and (when a country is given per participant) that person's public holidays.\n\nPaid per call: $0.10 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: find meeting times, timezone overlap, schedule coordination.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"participants":{"type":"array","items":{"type":"object","properties":{"timezone":{"type":"string","description":"Participant's IANA timezone, e.g. 'Europe/Madrid'."},"working_hours":{"type":"object","properties":{"start":{"type":"string","description":"Local start time \"HH:mm\" (24h), e.g. \"09:00\"."},"end":{"type":"string","description":"Local end time \"HH:mm\" (24h), e.g. \"17:00\"."}},"required":["start","end"],"additionalProperties":false,"description":"This participant's local working hours. Defaults to 09:00-17:00."},"country":{"type":"string","description":"ISO 3166-1 alpha-2 code (e.g. 'US', 'ES') to exclude that person's public holidays."}},"required":["timezone"],"additionalProperties":false},"minItems":1,"description":"The people to meet. Each participant is { timezone (IANA, required), working_hours? { start, end }, country? (ISO alpha-2) }."},"duration":{"type":"number","description":"Meeting duration in minutes."},"date_range":{"type":"object","properties":{"start":{"type":"string","description":"First date to search \"YYYY-MM-DD\"."},"end":{"type":"string","description":"Last date to search \"YYYY-MM-DD\"."}},"required":["start","end"],"additionalProperties":false,"description":"Inclusive date window to search, e.g. { \"start\":\"2026-07-13\", \"end\":\"2026-07-17\" }."}},"required":["participants","duration","date_range"],"additionalProperties":false},"example":{"participants":[{"timezone":"Europe/Madrid","working_hours":{"start":"09:00","end":"17:00"},"country":"ES"}],"duration":30,"date_range":{"start":"2026-12-25","end":"2026-12-31"}}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.10 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"meeting_slots","x-category":"Data & Analytics","x-price":"$0.10","x-use-cases":["find meeting times","timezone overlap","schedule coordination"],"x-tags":["timezone","scheduler"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"operationId":"meeting_slots_get","summary":"Find working-hour time slots that overlap across participants in different timezones for a meeting of a given duration, excluding weekends and (whe… (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/meeting-slots`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"participants","in":"query","required":true,"description":"The people to meet. Each participant is { timezone (IANA, required), working_hours? { start, end }, country? (ISO alpha-2) }. Send as JSON.","schema":{"type":"string"},"example":"[{\"timezone\":\"Europe/Madrid\",\"working_hours\":{\"start\":\"09:00\",\"end\":\"17:00\"},\"country\":\"ES\"}]"},{"name":"duration","in":"query","required":true,"description":"Meeting duration in minutes.","schema":{"type":"number","description":"Meeting duration in minutes."},"example":30},{"name":"date_range","in":"query","required":true,"description":"Inclusive date window to search, e.g. { \"start\":\"2026-07-13\", \"end\":\"2026-07-17\" }. Send as JSON.","schema":{"type":"string"},"example":"{\"start\":\"2026-12-25\",\"end\":\"2026-12-31\"}"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.10 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/time-holiday":{"post":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"holiday","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["check public holidays","holiday lookup","calendar awareness"],"x-tags":["timezone","holidays"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"time_holiday","summary":"Check whether a given date is a public holiday in a country (identified by its ISO 3166-1 alpha-2 code), and return the holiday name if so.","description":"Check whether a given date is a public holiday in a country (identified by its ISO 3166-1 alpha-2 code), and return the holiday name if so. Backed by an authoritative public-holiday dataset.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: check public holidays, holiday lookup, calendar awareness.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","description":"Date \"YYYY-MM-DD\"."},"country_code":{"type":"string","description":"ISO country code, e.g. \"US\", \"ES\", \"IN\"."}},"required":["date","country_code"],"additionalProperties":false},"example":{"date":"2026-12-25","country_code":"ES"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Data & Analytics"],"x-service":"time","x-tool":"holiday","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["check public holidays","holiday lookup","calendar awareness"],"x-tags":["timezone","holidays"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"time_holiday_get","summary":"Check whether a given date is a public holiday in a country (identified by its ISO 3166-1 alpha-2 code), and return the holiday name if so. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/time-holiday`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"date","in":"query","required":true,"description":"Date \"YYYY-MM-DD\".","schema":{"type":"string","description":"Date \"YYYY-MM-DD\"."},"example":"2026-12-25"},{"name":"country_code","in":"query","required":true,"description":"ISO country code, e.g. \"US\", \"ES\", \"IN\".","schema":{"type":"string","description":"ISO country code, e.g. \"US\", \"ES\", \"IN\"."},"example":"ES"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/currency-convert":{"post":{"tags":["Data & Analytics"],"x-service":"data","x-tool":"currency_convert","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["currency conversion","exchange rates","money conversion"],"x-tags":["currency","fx","convert","money","exchange"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"currency_convert","summary":"Convert an amount between currencies using live daily exchange rates (ISO 4217 codes, e.g. USD, EUR, GBP, JPY).","description":"Convert an amount between currencies using live daily exchange rates (ISO 4217 codes, e.g. USD, EUR, GBP, JPY). Returns the converted amount and the rate used.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: currency conversion, exchange rates, money conversion.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number","description":"The amount of money to convert."},"from":{"type":"string","minLength":3,"maxLength":3,"description":"Source currency ISO 4217 code, e.g. 'USD', 'EUR'."},"to":{"type":"string","minLength":3,"maxLength":3,"description":"Target currency ISO 4217 code, e.g. 'EUR', 'JPY'."}},"required":["amount","from","to"],"additionalProperties":false},"example":{"amount":1,"from":"USD","to":"EUR"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Data & Analytics"],"x-service":"data","x-tool":"currency_convert","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["currency conversion","exchange rates","money conversion"],"x-tags":["currency","fx","convert","money","exchange"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"currency_convert_get","summary":"Convert an amount between currencies using live daily exchange rates (ISO 4217 codes, e.g. USD, EUR, GBP, JPY). (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/currency-convert`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"amount","in":"query","required":true,"description":"The amount of money to convert.","schema":{"type":"number","description":"The amount of money to convert."},"example":1},{"name":"from","in":"query","required":true,"description":"Source currency ISO 4217 code, e.g. 'USD', 'EUR'.","schema":{"type":"string","minLength":3,"maxLength":3,"description":"Source currency ISO 4217 code, e.g. 'USD', 'EUR'."},"example":"USD"},{"name":"to","in":"query","required":true,"description":"Target currency ISO 4217 code, e.g. 'EUR', 'JPY'.","schema":{"type":"string","minLength":3,"maxLength":3,"description":"Target currency ISO 4217 code, e.g. 'EUR', 'JPY'."},"example":"EUR"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/units-convert":{"post":{"tags":["Data & Analytics"],"x-service":"data","x-tool":"convert_units","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["unit conversion","measurement conversion","metric conversion"],"x-tags":["units","convert","measurement","math"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"units_convert","summary":"Convert a value between units of the same category: length, mass, volume, speed, area, digital storage, time, and temperature (Celsius/Fahrenheit/K…","description":"Convert a value between units of the same category: length, mass, volume, speed, area, digital storage, time, and temperature (Celsius/Fahrenheit/Kelvin).\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: unit conversion, measurement conversion, metric conversion.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"number","description":"The numeric value to convert."},"from":{"type":"string","description":"Source unit, e.g. 'km', 'mi', 'kg', 'lb', 'C', 'F', 'GB', 'm/s'."},"to":{"type":"string","description":"Target unit in the SAME category as 'from', e.g. 'mi', 'km', 'lb', 'F'."}},"required":["value","from","to"],"additionalProperties":false},"example":{"value":1,"from":"km","to":"mi"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Data & Analytics"],"x-service":"data","x-tool":"convert_units","x-category":"Data & Analytics","x-price":"$0.01","x-use-cases":["unit conversion","measurement conversion","metric conversion"],"x-tags":["units","convert","measurement","math"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"units_convert_get","summary":"Convert a value between units of the same category: length, mass, volume, speed, area, digital storage, time, and temperature (Celsius/Fahrenheit/K… (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/units-convert`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"value","in":"query","required":true,"description":"The numeric value to convert.","schema":{"type":"number","description":"The numeric value to convert."},"example":1},{"name":"from","in":"query","required":true,"description":"Source unit, e.g. 'km', 'mi', 'kg', 'lb', 'C', 'F', 'GB', 'm/s'.","schema":{"type":"string","description":"Source unit, e.g. 'km', 'mi', 'kg', 'lb', 'C', 'F', 'GB', 'm/s'."},"example":"km"},{"name":"to","in":"query","required":true,"description":"Target unit in the SAME category as 'from', e.g. 'mi', 'km', 'lb', 'F'.","schema":{"type":"string","description":"Target unit in the SAME category as 'from', e.g. 'mi', 'km', 'lb', 'F'."},"example":"mi"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/crypto-price":{"post":{"tags":["Market Data"],"x-service":"market","x-tool":"crypto_price","x-category":"Market Data","x-price":"$0.01","x-use-cases":["get crypto prices","btc/eth lookup","market data"],"x-tags":["crypto","price","defi","market-data","ticker"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"crypto_price","summary":"Get live USD spot prices for one or more cryptocurrencies by ticker symbol (e.g. BTC, ETH, SOL).","description":"Get live USD spot prices for one or more cryptocurrencies by ticker symbol (e.g. BTC, ETH, SOL).\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: get crypto prices, btc/eth lookup, market data.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"symbols":{"type":"string","description":"Comma-separated ticker symbols, e.g. 'BTC,ETH,SOL'. Prices are returned in USD."}},"required":["symbols"],"additionalProperties":false},"example":{"symbols":"BTC,ETH"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Market Data"],"x-service":"market","x-tool":"crypto_price","x-category":"Market Data","x-price":"$0.01","x-use-cases":["get crypto prices","btc/eth lookup","market data"],"x-tags":["crypto","price","defi","market-data","ticker"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"crypto_price_get","summary":"Get live USD spot prices for one or more cryptocurrencies by ticker symbol (e.g. BTC, ETH, SOL). (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/crypto-price`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"symbols","in":"query","required":true,"description":"Comma-separated ticker symbols, e.g. 'BTC,ETH,SOL'. Prices are returned in USD.","schema":{"type":"string","description":"Comma-separated ticker symbols, e.g. 'BTC,ETH,SOL'. Prices are returned in USD."},"example":"BTC,ETH"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/generate-image":{"post":{"tags":["Media & Generation"],"x-service":"image","x-tool":null,"x-category":"Media & Generation","x-price":"$0.10","x-use-cases":["generate images","text-to-image","visual generation"],"x-tags":["ai","image","text-to-image","generation"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"operationId":"generate_image","summary":"Generate an image from a text prompt (returned base64-encoded PNG).","description":"Generate an image from a text prompt (returned base64-encoded PNG).\n\nPaid per call: $0.10 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: generate images, text-to-image, visual generation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string","minLength":1,"description":"Text description of the image to generate."},"steps":{"type":"integer","minimum":1,"maximum":8,"description":"Diffusion steps (1-8, default 4). More = higher quality but slower."}},"required":["prompt"],"additionalProperties":false},"example":{"prompt":"What is the x402 protocol?","steps":8}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.10 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Media & Generation"],"x-service":"image","x-tool":null,"x-category":"Media & Generation","x-price":"$0.10","x-use-cases":["generate images","text-to-image","visual generation"],"x-tags":["ai","image","text-to-image","generation"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.10"},"protocols":[{"x402":{}}]},"operationId":"generate_image_get","summary":"Generate an image from a text prompt (returned base64-encoded PNG). (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/generate-image`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"prompt","in":"query","required":true,"description":"Text description of the image to generate.","schema":{"type":"string","minLength":1,"description":"Text description of the image to generate."},"example":"What is the x402 protocol?"},{"name":"steps","in":"query","required":false,"description":"Diffusion steps (1-8, default 4). More = higher quality but slower.","schema":{"type":"integer","minimum":1,"maximum":8,"description":"Diffusion steps (1-8, default 4). More = higher quality but slower."},"example":8}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.10 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/audio-transcribe":{"post":{"tags":["Media & Generation"],"x-service":"audio","x-tool":"transcribe","x-category":"Media & Generation","x-price":"$0.05","x-use-cases":["transcribe audio","speech-to-text","audio conversion"],"x-tags":["audio","speech-to-text","transcription"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"audio_transcribe","summary":"Transcribe an audio file (given by public URL) to text.","description":"Transcribe an audio file (given by public URL) to text. Handles mp3, wav, m4a, ogg and more.\n\nPaid per call: $0.05 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: transcribe audio, speech-to-text, audio conversion.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"audio_url":{"type":"string","format":"uri","description":"Public URL of an audio file (mp3, wav, m4a, ogg, ...) to transcribe to text."}},"required":["audio_url"],"additionalProperties":false},"example":{"audio_url":"https://github.com/ggerganov/whisper.cpp/raw/master/samples/jfk.wav"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Media & Generation"],"x-service":"audio","x-tool":"transcribe","x-category":"Media & Generation","x-price":"$0.05","x-use-cases":["transcribe audio","speech-to-text","audio conversion"],"x-tags":["audio","speech-to-text","transcription"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"audio_transcribe_get","summary":"Transcribe an audio file (given by public URL) to text. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/audio-transcribe`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"audio_url","in":"query","required":true,"description":"Public URL of an audio file (mp3, wav, m4a, ogg, ...) to transcribe to text.","schema":{"type":"string","format":"uri","description":"Public URL of an audio file (mp3, wav, m4a, ogg, ...) to transcribe to text."},"example":"https://github.com/ggerganov/whisper.cpp/raw/master/samples/jfk.wav"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/audio-speak":{"post":{"tags":["Media & Generation"],"x-service":"audio","x-tool":null,"x-category":"Media & Generation","x-price":"$0.05","x-use-cases":["text-to-speech","voice generation","audio output"],"x-tags":["audio","text-to-speech","voice","generation"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"audio_speak","summary":"Convert text into spoken audio (returned base64-encoded MP3), in several languages.","description":"Convert text into spoken audio (returned base64-encoded MP3), in several languages.\n\nPaid per call: $0.05 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: text-to-speech, voice generation, audio output.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"The text to convert to spoken audio."},"lang":{"type":"string","enum":["en","es","fr","zh","jp","kr"],"description":"Language of the text (default 'en')."}},"required":["text"],"additionalProperties":false},"example":{"text":"AgisHub sells agent capabilities per call.","lang":"en"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Media & Generation"],"x-service":"audio","x-tool":null,"x-category":"Media & Generation","x-price":"$0.05","x-use-cases":["text-to-speech","voice generation","audio output"],"x-tags":["audio","text-to-speech","voice","generation"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"audio_speak_get","summary":"Convert text into spoken audio (returned base64-encoded MP3), in several languages. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/audio-speak`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"text","in":"query","required":true,"description":"The text to convert to spoken audio.","schema":{"type":"string","minLength":1,"description":"The text to convert to spoken audio."},"example":"AgisHub sells agent capabilities per call."},{"name":"lang","in":"query","required":false,"description":"Language of the text (default 'en').","schema":{"type":"string","enum":["en","es","fr","zh","jp","kr"],"description":"Language of the text (default 'en')."},"example":"en"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/pdf":{"post":{"tags":["Media & Generation"],"x-service":"document","x-tool":"pdf","x-category":"Media & Generation","x-price":"$0.05","x-use-cases":["generate pdf","html to pdf","document creation"],"x-tags":["pdf","render","document","html-to-pdf"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"pdf","summary":"Render a public URL or a raw HTML string into a PDF document, returned base64-encoded.","description":"Render a public URL or a raw HTML string into a PDF document, returned base64-encoded. Backed by a headless browser. Use for invoices, reports, receipts and any HTML-to-PDF need.\n\nPaid per call: $0.05 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: generate pdf, html to pdf, document creation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public http/https URL to render to PDF. Provide this OR html."},"html":{"type":"string","description":"Raw HTML string to render to PDF. Provide this OR url."},"landscape":{"type":"boolean","description":"Landscape orientation (default false = portrait)."},"format":{"type":"string","enum":["A4","Letter","Legal","A3","A5","Tabloid"],"description":"Paper size (default A4)."}},"additionalProperties":false},"example":{"url":"https://example.com"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Media & Generation"],"x-service":"document","x-tool":"pdf","x-category":"Media & Generation","x-price":"$0.05","x-use-cases":["generate pdf","html to pdf","document creation"],"x-tags":["pdf","render","document","html-to-pdf"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]},"operationId":"pdf_get","summary":"Render a public URL or a raw HTML string into a PDF document, returned base64-encoded. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/pdf`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":false,"description":"Public http/https URL to render to PDF. Provide this OR html.","schema":{"type":"string","format":"uri","description":"Public http/https URL to render to PDF. Provide this OR html."},"example":"https://example.com"},{"name":"html","in":"query","required":false,"description":"Raw HTML string to render to PDF. Provide this OR url.","schema":{"type":"string","description":"Raw HTML string to render to PDF. Provide this OR url."}},{"name":"landscape","in":"query","required":false,"description":"Landscape orientation (default false = portrait).","schema":{"type":"boolean","description":"Landscape orientation (default false = portrait)."}},{"name":"format","in":"query","required":false,"description":"Paper size (default A4).","schema":{"type":"string","enum":["A4","Letter","Legal","A3","A5","Tabloid"],"description":"Paper size (default A4)."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.05 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/shorten":{"post":{"tags":["Developer Tools"],"x-service":"url","x-tool":"shorten","x-category":"Developer Tools","x-price":"$0.01","x-use-cases":["shorten urls","link shortening","url compression"],"x-tags":["url","shortener","link","redirect"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"shorten","summary":"Shorten a long URL into a compact api.agishub.com/s/<code> link that redirects to the original.","description":"Shorten a long URL into a compact api.agishub.com/s/<code> link that redirects to the original. Codes are stored for a year.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: shorten urls, link shortening, url compression.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The long http/https URL to shorten."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Developer Tools"],"x-service":"url","x-tool":"shorten","x-category":"Developer Tools","x-price":"$0.01","x-use-cases":["shorten urls","link shortening","url compression"],"x-tags":["url","shortener","link","redirect"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"shorten_get","summary":"Shorten a long URL into a compact api.agishub.com/s/<code> link that redirects to the original. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/shorten`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"The long http/https URL to shorten.","schema":{"type":"string","format":"uri","description":"The long http/https URL to shorten."},"example":"https://example.com"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/qr-generate":{"post":{"tags":["Developer Tools"],"x-service":"qr","x-tool":"generate","x-category":"Developer Tools","x-price":"$0.01","x-use-cases":["generate qr codes","qr generation","barcode creation"],"x-tags":["qr","generator","image","svg","barcode"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"qr_generate","summary":"Generate a QR code for any text or URL.","description":"Generate a QR code for any text or URL. Returns an inline SVG plus a data URI, with selectable size, quiet-zone margin and error-correction level.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: generate qr codes, qr generation, barcode creation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Text or URL to encode in the QR code."},"size":{"type":"integer","exclusiveMinimum":0,"maximum":40,"description":"Pixel size of each QR module/cell in the SVG (default 6)."},"margin":{"type":"integer","minimum":0,"maximum":20,"description":"Quiet-zone margin around the code, in cells (default 4)."},"ec_level":{"type":"string","enum":["L","M","Q","H"],"description":"Error-correction level: L(7%), M(15%), Q(25%), H(30%). Default M."}},"required":["text"],"additionalProperties":false},"example":{"text":"AgisHub sells agent capabilities per call.","size":8}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Developer Tools"],"x-service":"qr","x-tool":"generate","x-category":"Developer Tools","x-price":"$0.01","x-use-cases":["generate qr codes","qr generation","barcode creation"],"x-tags":["qr","generator","image","svg","barcode"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"qr_generate_get","summary":"Generate a QR code for any text or URL. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/qr-generate`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"text","in":"query","required":true,"description":"Text or URL to encode in the QR code.","schema":{"type":"string","minLength":1,"description":"Text or URL to encode in the QR code."},"example":"AgisHub sells agent capabilities per call."},{"name":"size","in":"query","required":false,"description":"Pixel size of each QR module/cell in the SVG (default 6).","schema":{"type":"integer","exclusiveMinimum":0,"maximum":40,"description":"Pixel size of each QR module/cell in the SVG (default 6)."},"example":8},{"name":"margin","in":"query","required":false,"description":"Quiet-zone margin around the code, in cells (default 4).","schema":{"type":"integer","minimum":0,"maximum":20,"description":"Quiet-zone margin around the code, in cells (default 4)."}},{"name":"ec_level","in":"query","required":false,"description":"Error-correction level: L(7%), M(15%), Q(25%), H(30%). Default M.","schema":{"type":"string","enum":["L","M","Q","H"],"description":"Error-correction level: L(7%), M(15%), Q(25%), H(30%). Default M."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/webhook-send":{"post":{"tags":["Developer Tools"],"x-service":"webhook","x-tool":"send","x-category":"Developer Tools","x-price":"$0.02","x-use-cases":["send webhooks","guaranteed delivery","event relay"],"x-tags":["webhook","delivery","queue","retry","integration"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"webhook_send","summary":"Deliver a webhook (POST/PUT/PATCH a JSON payload to a URL) with guaranteed, retried delivery.","description":"Deliver a webhook (POST/PUT/PATCH a JSON payload to a URL) with guaranteed, retried delivery. Returns immediately with a job_id; AgisHub keeps retrying in the background until it succeeds.\n\nPaid per call: $0.02 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: send webhooks, guaranteed delivery, event relay.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public http/https URL to deliver the webhook to."},"payload":{"description":"JSON body to POST to the target (object, array, string or number)."},"method":{"type":"string","enum":["POST","PUT","PATCH"],"description":"HTTP method (default POST)."},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional extra request headers, e.g. an auth token."}},"required":["url"],"additionalProperties":false},"example":{"url":"https://example.com","payload":"{\"event\":\"demo\",\"ok\":true}"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Developer Tools"],"x-service":"webhook","x-tool":"send","x-category":"Developer Tools","x-price":"$0.02","x-use-cases":["send webhooks","guaranteed delivery","event relay"],"x-tags":["webhook","delivery","queue","retry","integration"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"protocols":[{"x402":{}}]},"operationId":"webhook_send_get","summary":"Deliver a webhook (POST/PUT/PATCH a JSON payload to a URL) with guaranteed, retried delivery. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/webhook-send`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"url","in":"query","required":true,"description":"Public http/https URL to deliver the webhook to.","schema":{"type":"string","format":"uri","description":"Public http/https URL to deliver the webhook to."},"example":"https://example.com"},{"name":"payload","in":"query","required":false,"description":"JSON body to POST to the target (object, array, string or number).","schema":{"description":"JSON body to POST to the target (object, array, string or number)."},"example":"{\"event\":\"demo\",\"ok\":true}"},{"name":"method","in":"query","required":false,"description":"HTTP method (default POST).","schema":{"type":"string","enum":["POST","PUT","PATCH"],"description":"HTTP method (default POST)."}},{"name":"headers","in":"query","required":false,"description":"Optional extra request headers, e.g. an auth token. Send as JSON.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.02 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/webhook-status":{"post":{"tags":["Developer Tools"],"x-service":"webhook","x-tool":"status","x-category":"Developer Tools","x-price":"$0.01","x-use-cases":["check webhook status","track delivery"],"x-tags":["webhook","status","tracking"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"webhook_status","summary":"Check the delivery status of a webhook job (queued / retrying / delivered / failed) by its job_id.","description":"Check the delivery status of a webhook job (queued / retrying / delivered / failed) by its job_id.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: check webhook status, track delivery.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","description":"The job_id returned by webhook_relay."}},"required":["job_id"],"additionalProperties":false},"example":{"job_id":"job_01HZX3K2QW"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Developer Tools"],"x-service":"webhook","x-tool":"status","x-category":"Developer Tools","x-price":"$0.01","x-use-cases":["check webhook status","track delivery"],"x-tags":["webhook","status","tracking"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"webhook_status_get","summary":"Check the delivery status of a webhook job (queued / retrying / delivered / failed) by its job_id. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/webhook-status`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"job_id","in":"query","required":true,"description":"The job_id returned by webhook_relay.","schema":{"type":"string","description":"The job_id returned by webhook_relay."},"example":"job_01HZX3K2QW"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/memory-store":{"post":{"tags":["Knowledge & Memory"],"x-service":"memory","x-tool":"store","x-category":"Knowledge & Memory","x-price":"$0.01","x-use-cases":["store knowledge","memory storage","rag preparation"],"x-tags":["memory","rag","vector","store","knowledge"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"memory_store","summary":"Store a piece of text in a persistent, searchable memory collection (namespace).","description":"Store a piece of text in a persistent, searchable memory collection (namespace). Embedded and indexed for later semantic recall.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: store knowledge, memory storage, rag preparation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"description":"Your collection key — groups and isolates your memories. Treat it like a secret: anyone with it can read/write this collection."},"text":{"type":"string","minLength":1,"description":"The text/content to store and make searchable."},"id":{"type":"string","description":"Optional stable id to update an existing entry; auto-generated if omitted."}},"required":["namespace","text"],"additionalProperties":false},"example":{"namespace":"demo","text":"AgisHub sells agent capabilities per call."}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Knowledge & Memory"],"x-service":"memory","x-tool":"store","x-category":"Knowledge & Memory","x-price":"$0.01","x-use-cases":["store knowledge","memory storage","rag preparation"],"x-tags":["memory","rag","vector","store","knowledge"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"memory_store_get","summary":"Store a piece of text in a persistent, searchable memory collection (namespace). (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/memory-store`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"namespace","in":"query","required":true,"description":"Your collection key — groups and isolates your memories. Treat it like a secret: anyone with it can read/write this collection.","schema":{"type":"string","minLength":1,"description":"Your collection key — groups and isolates your memories. Treat it like a secret: anyone with it can read/write this collection."},"example":"demo"},{"name":"text","in":"query","required":true,"description":"The text/content to store and make searchable.","schema":{"type":"string","minLength":1,"description":"The text/content to store and make searchable."},"example":"AgisHub sells agent capabilities per call."},{"name":"id","in":"query","required":false,"description":"Optional stable id to update an existing entry; auto-generated if omitted.","schema":{"type":"string","description":"Optional stable id to update an existing entry; auto-generated if omitted."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/memory-search":{"post":{"tags":["Knowledge & Memory"],"x-service":"memory","x-tool":"search","x-category":"Knowledge & Memory","x-price":"$0.01","x-use-cases":["search memory","rag retrieval","knowledge lookup"],"x-tags":["memory","rag","vector","search","retrieval"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"memory_search","summary":"Semantically search a memory collection (namespace) and return the most relevant stored entries.","description":"Semantically search a memory collection (namespace) and return the most relevant stored entries. The retrieval half of RAG.\n\nPaid per call: $0.01 USDC on Base over x402. An unpaid request answers HTTP 402 with the challenge in the `payment-required` header; sign it and retry the same request with a `payment-signature` header. No API key and no account.\n\nUse for: search memory, rag retrieval, knowledge lookup.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"description":"The namespace to search within (the same key used on upsert)."},"query":{"type":"string","minLength":1,"description":"Natural-language query; returns the most semantically similar stored entries."},"top_k":{"type":"integer","minimum":1,"maximum":20,"description":"How many results to return (default 5)."}},"required":["namespace","query"],"additionalProperties":false},"example":{"namespace":"demo","query":"What is the x402 protocol?"}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}},"get":{"tags":["Knowledge & Memory"],"x-service":"memory","x-tool":"search","x-category":"Knowledge & Memory","x-price":"$0.01","x-use-cases":["search memory","rag retrieval","knowledge lookup"],"x-tags":["memory","rag","vector","search","retrieval"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.01"},"protocols":[{"x402":{}}]},"operationId":"memory_search_get","summary":"Semantically search a memory collection (namespace) and return the most relevant stored entries. (same operation, fields in the query string)","description":"Same operation and same price as `POST /v1/memory-search`, reading the fields from the query string. Values are parsed as JSON when they are valid JSON, so objects and arrays must be sent serialised.\n\nWithout any query parameter it returns the endpoint's self-describing document instead of running, so a crawler can read what this endpoint does before paying.","parameters":[{"name":"namespace","in":"query","required":true,"description":"The namespace to search within (the same key used on upsert).","schema":{"type":"string","minLength":1,"description":"The namespace to search within (the same key used on upsert)."},"example":"demo"},{"name":"query","in":"query","required":true,"description":"Natural-language query; returns the most semantically similar stored entries.","schema":{"type":"string","minLength":1,"description":"Natural-language query; returns the most semantically similar stored entries."},"example":"What is the x402 protocol?"},{"name":"top_k","in":"query","required":false,"description":"How many results to return (default 5).","schema":{"type":"integer","minimum":1,"maximum":20,"description":"How many results to return (default 5)."}}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input: the body or query does not match the schema.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required (x402): $0.01 USDC on Base.","headers":{"payment-required":{"description":"Base64-encoded x402 challenge. Sign it and retry with the `payment-signature` header.","schema":{"type":"string"}}}}}}},"/v1/crawl/{job_id}":{"get":{"tags":["Search & Web"],"operationId":"crawl_status","summary":"Check the status of a crawl started with crawl, and retrieve its pages once finished.","description":"Check the status of a crawl started with crawl, and retrieve its pages once finished. Free: the crawl itself was already paid for when it was queued.\n\nFree: no x402 challenge. Poll it after POST /v1/crawl returns its job_id.","x-service":"web","x-tool":"crawl_status","x-category":"Search & Web","x-price":"$0.00","x-use-cases":["check crawl progress","retrieve crawl results"],"x-tags":["web","crawl","job","status","results"],"security":[],"parameters":[{"name":"job_id","in":"path","required":true,"description":"Job ID returned by POST /v1/crawl.","schema":{"type":"string"},"example":"job_01HZX3K2QW"}],"responses":{"200":{"description":"Job state. `status` is queued, running, completed or not_found; a completed job carries its pages. An unknown or expired job_id is reported here as not_found, not as a 4xx.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Malformed job_id.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}}}}