{"openapi": "3.0.3", "info": {"title": "MultiScrape Web Research API", "version": "1.3.0", "description": "Production web acquisition, extraction, research, durable crawling, and verifiable evidence for HTML, JSON, XML, feeds, CSV, text, and PDF. HTTP-first acquisition minimizes cost; optional providers are used only when requested and allowed by the caller's budget."}, "servers": [{"url": "https://prompt-journey-h4gsegeha5esbxgf.centralindia-01.azurewebsites.net", "description": "Production"}], "externalDocs": {"description": "MultiScrape MCP endpoint", "url": "https://prompt-journey-h4gsegeha5esbxgf.centralindia-01.azurewebsites.net/mcp/"}, "components": {"securitySchemes": {"BearerAuth": {"type": "http", "scheme": "bearer"}, "ApiKeyAuth": {"type": "apiKey", "in": "header", "name": "X-API-Key"}}}, "paths": {"/v1/info": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "get": {"summary": "Discover API capabilities and production endpoints", "responses": {"200": {"description": "Versioned capability metadata"}}}}, "/v1/search": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "post": {"summary": "Search the public web under an explicit budget", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["query"], "properties": {"query": {"type": "string", "maxLength": 1000}, "max_results": {"type": "integer", "minimum": 1, "maximum": 50, "default": 10}, "budget": {"type": "object"}}}}}}, "responses": {"200": {"description": "Search results and provider attempts"}}}}, "/v1/research": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "post": {"summary": "Synchronously search and fetch under one cumulative budget", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["query"], "properties": {"query": {"type": "string", "maxLength": 1000}, "max_results": {"type": "integer", "minimum": 1, "maximum": 10}, "fetch_limit": {"type": "integer", "minimum": 0, "maximum": 5}, "fetch_provider": {"type": "string", "description": "auto, browser, or an exact provider name"}, "render": {"type": "string", "enum": ["auto", "always", "never"]}, "budget": {"type": "object"}}}}}}, "responses": {"200": {"description": "Complete or explicit partial research result"}, "400": {"description": "Invalid bounds"}, "504": {"description": "Budget exhausted"}}}}, "/v1/context": {"post": {"summary": "Expand related queries and fetch an LLM-ready live context bundle", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["query"], "properties": {"query": {"type": "string", "maxLength": 1000}, "related_queries": {"type": "array", "maxItems": 5, "items": {"type": "string", "maxLength": 1000}}, "max_related_queries": {"type": "integer", "minimum": 0, "maximum": 5}, "results_per_query": {"type": "integer", "minimum": 1, "maximum": 10}, "fetch_limit": {"type": "integer", "minimum": 0, "maximum": 10, "default": 0, "description": "Opt-in page fetch count; zero returns fast SERP context only"}, "include_images": {"type": "boolean", "default": false}, "max_images": {"type": "integer", "minimum": 0, "maximum": 20}, "fetch_provider": {"type": "string", "description": "auto, browser, or an exact provider name"}, "render": {"type": "string", "enum": ["auto", "always", "never"]}, "budget": {"type": "object"}}}}}}, "responses": {"200": {"description": "Live contextual research bundle with total and per-result latency"}, "400": {"description": "Invalid bounds"}, "504": {"description": "Budget exhausted"}}}}, "/v1/fetch": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "post": {"summary": "Acquire and extract public content", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["url"], "properties": {"url": {"type": "string"}, "render": {"type": "string", "enum": ["auto", "always", "never"]}, "content_type": {"type": "string"}, "schema": {"type": "object", "description": "Optional JSON Schema for deterministic extraction"}, "screenshot": {"type": "boolean", "default": false}}}}}}, "responses": {"200": {"description": "Extraction result"}}}}, "/v1/extract": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "post": {"summary": "Extract supplied content", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "oneOf": [{"required": ["document"]}, {"required": ["content"]}], "properties": {"document": {"type": "string"}, "content": {"type": "string"}, "encoding": {"type": "string", "enum": ["base64"]}, "charset": {"type": "string"}, "schema": {"type": "object", "description": "Optional JSON Schema for deterministic extraction"}, "content_type": {"type": "string"}}}}}}, "responses": {"200": {"description": "Extraction result"}}}}, "/v1/crawl": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "post": {"summary": "Run a small synchronous crawl", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["start_url"], "properties": {"start_url": {"type": "string", "format": "uri"}, "max_pages": {"type": "integer", "minimum": 1, "maximum": 100}, "budget": {"type": "object"}}}}}}, "responses": {"200": {"description": "Crawl result"}}}}, "/v1/crawls": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "post": {"summary": "Start a durable bounded crawl", "parameters": [{"name": "Idempotency-Key", "in": "header", "schema": {"type": "string", "maxLength": 200}}], "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["start_url"], "properties": {"start_url": {"type": "string", "format": "uri"}, "max_pages": {"type": "integer", "minimum": 1, "maximum": 100}, "max_depth": {"type": "integer", "minimum": 0}, "same_origin": {"type": "boolean", "default": true}, "budget": {"type": "object"}}}}}}, "responses": {"202": {"description": "Crawl accepted"}, "400": {"description": "Invalid crawl request"}, "409": {"description": "Idempotency conflict"}}}}, "/v1/jobs/{job_id}": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "get": {"summary": "Get an owned crawl job", "responses": {"200": {"description": "Job status"}}}, "delete": {"summary": "Request idempotent cancellation", "responses": {"202": {"description": "Cancellation accepted"}}}}, "/v1/jobs/{job_id}/pages": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "get": {"summary": "List retained page outcomes", "parameters": [{"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100}}, {"name": "cursor", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Page outcome page"}}}}, "/v1/evidence/search": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "post": {"summary": "Search the public web under an explicit budget", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["query"], "properties": {"query": {"type": "string", "maxLength": 1000}, "max_results": {"type": "integer", "minimum": 1, "maximum": 50, "default": 10}, "budget": {"type": "object"}}}}}}, "responses": {"200": {"description": "Search results and provider attempts"}}}}, "/v1/evidence/fetch": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "post": {"summary": "Acquire and extract public content", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "required": ["url"], "properties": {"url": {"type": "string"}, "render": {"type": "string", "enum": ["auto", "always", "never"]}, "content_type": {"type": "string"}, "schema": {"type": "object", "description": "Optional JSON Schema for deterministic extraction"}, "screenshot": {"type": "boolean", "default": false}}}}}}, "responses": {"200": {"description": "Extraction result"}}}}, "/v1/evidence/verify": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "post": {"summary": "Verify a retained evidence bundle", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["bundle_id"], "properties": {"bundle_id": {"type": "string"}}}}}}, "responses": {"200": {"description": "Evidence verification result"}}}}, "/v1/evidence/{bundle_id}": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "get": {"summary": "Get a sanitized evidence bundle", "parameters": [{"name": "bundle_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Evidence data"}, "404": {"description": "Evidence not found"}}}}, "/v1/evidence/{bundle_id}/manifest": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "get": {"summary": "Get an evidence manifest", "parameters": [{"name": "bundle_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Evidence data"}, "404": {"description": "Evidence not found"}}}}, "/v1/evidence/{bundle_id}/diff/{previous_id}": {"x-optional-security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "get": {"summary": "Compare two retained evidence bundles", "parameters": [{"name": "bundle_id", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "previous_id", "in": "path", "required": true, "schema": {"type": "string"}}], "responses": {"200": {"description": "Evidence difference"}}}}, "/health/live": {"get": {"summary": "Check process liveness", "responses": {"200": {"description": "Healthy"}}}}, "/health/ready": {"get": {"summary": "Check provider and durable-job readiness", "responses": {"200": {"description": "Healthy"}}}}, "/scrape-html": {}, "/scrape-text": {}, "/web-scraper/health": {"get": {"summary": "Check legacy scraper compatibility", "responses": {"200": {"description": "Healthy"}}}}, "/metrics": {"get": {"summary": "Authenticated operational metrics (when enabled)", "security": [{"BearerAuth": []}, {"ApiKeyAuth": []}], "responses": {"200": {"description": "Aggregate counters and latency summaries"}, "401": {"description": "Invalid or missing API key"}, "429": {"description": "Rate limit exceeded"}, "404": {"description": "Metrics disabled"}}}}}, "x-http-statuses": {"invalid_request": 400, "authentication_required": 401, "policy_denied": 403, "source_unavailable": 503, "rate_limited": 429, "provider_failure": 502, "budget_exhausted": 504, "payload_too_large": 413, "unsupported_media_type": 415}}