diff --git a/openapi.json b/openapi.json index a87d50a..0ec45cc 100644 --- a/openapi.json +++ b/openapi.json @@ -1,54 +1,611 @@ { - "openapi": "3.0.0", + "openapi": "3.1.0", "info": { - "title": "Pry Web Intelligence API", - "version": "3.0.0", - "description": "Scrape, crawl, extract, and monitor any website. AI-ready API for web data extraction. Self-hosted, no API keys needed (optional auth)." + "title": "Pry", + "description": "Pry open any website. Web scraping + browser automation + document parsing. Self-hosted, free, better than Firecrawl.", + "version": "3.0.0" }, - "servers": [ - {"url": "http://localhost:8002", "description": "Local Pry instance"} - ], "paths": { - "/v1/scrape": { - "post": { - "summary": "Scrape a single URL to markdown", - "description": "Scrape any URL and return clean markdown content. Handles Cloudflare, JS rendering, and anti-bot protection automatically.", - "operationId": "scrape", - "tags": ["Scraping"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["url"], - "properties": { - "url": {"type": "string", "description": "URL to scrape", "example": "https://example.com"}, - "bypassCloudflare": {"type": "boolean", "default": true, "description": "Auto-bypass Cloudflare protection"}, - "jsRender": {"type": "boolean", "default": false, "description": "Enable JavaScript rendering"} + "/health": { + "get": { + "tags": [ + "Health" + ], + "summary": "Full health check with dependency status", + "description": "Comprehensive health check \u2014 probes Ollama, FlareSolverr, Redis.", + "operationId": "health_check_health_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/live": { + "get": { + "tags": [ + "Health" + ], + "summary": "Kubernetes liveness probe", + "description": "Simple liveness \u2014 always returns 200 if the process is running.", + "operationId": "live_live_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Response Live Live Get" } } } } - }, + } + } + }, + "/ready": { + "get": { + "tags": [ + "Health" + ], + "summary": "Kubernetes readiness probe", + "description": "Readiness \u2014 checks critical dependencies.", + "operationId": "ready_ready_get", "responses": { "200": { - "description": "Scrape result", + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/v0/stats": { + "get": { + "tags": [ + "Stats" + ], + "summary": "Get cache, rate limiter, and session stats", + "operationId": "stats_v0_stats_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Stats V0 Stats Get" + } + } + } + } + } + } + }, + "/v1/costing/dashboard": { + "get": { + "tags": [ + "Costing" + ], + "summary": "Get cost analytics dashboard", + "description": "Get the full cost analytics dashboard.\n\nIncludes:\n- Monthly spend breakdown by operation type\n- Projected end-of-month cost\n- Daily spend for last 7 days\n- Cache efficiency metrics\n- Smart schedule recommendations", + "operationId": "cost_dashboard_v1_costing_dashboard_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Cost Dashboard V1 Costing Dashboard Get" + } + } + } + } + } + } + }, + "/v1/costing/usage": { + "get": { + "tags": [ + "Costing" + ], + "summary": "Get usage breakdown", + "description": "Get detailed usage breakdown for a specific month.", + "operationId": "cost_usage_v1_costing_usage_get", + "parameters": [ + { + "name": "year", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Year" + } + }, + { + "name": "month", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Month" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", "content": { "application/json": { "schema": { "type": "object", - "properties": { - "success": {"type": "boolean", "example": true}, - "data": { - "type": "object", - "properties": { - "content": {"type": "string", "description": "Clean markdown content"}, - "title": {"type": "string"}, - "url": {"type": "string"} - } - } - } + "additionalProperties": true, + "title": "Response Cost Usage V1 Costing Usage Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/costing/record": { + "post": { + "tags": [ + "Costing" + ], + "summary": "Record a usage event", + "description": "Record a usage event for cost tracking.\n\nOperations: scrape_direct, scrape_flaresolverr, scrape_playwright,\ncrawl_page, llm_call, vision_call, extraction_css, bandwidth_mb", + "operationId": "record_usage_endpoint_v1_costing_record_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_record_usage_endpoint_v1_costing_record_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Record Usage Endpoint V1 Costing Record Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/costing/costs": { + "post": { + "tags": [ + "Costing" + ], + "summary": "Update per-operation cost table", + "description": "Update the per-operation cost table with custom prices.", + "operationId": "update_costs_v1_costing_costs_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": { + "type": "number" + }, + "type": "object", + "title": "Costs" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Update Costs V1 Costing Costs Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/freshness/check": { + "post": { + "tags": [ + "Freshness" + ], + "summary": "Check if content has changed since last scrape", + "description": "Check if content has changed since the last scrape.\n\nUses content fingerprinting (SHA256) to detect changes.\nIf no content is provided, does a quick HEAD check instead.", + "operationId": "freshness_check_v1_freshness_check_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_freshness_check_v1_freshness_check_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Freshness Check V1 Freshness Check Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/freshness/frequency": { + "post": { + "tags": [ + "Freshness" + ], + "summary": "Get adaptive scrape frequency recommendation", + "description": "Get an adaptive scrape frequency recommendation based on content volatility.\n\nVolatile pages (frequent changes) get shorter intervals.\nStable pages get longer intervals to save costs.", + "operationId": "freshness_frequency_v1_freshness_frequency_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_freshness_frequency_v1_freshness_frequency_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Freshness Frequency V1 Freshness Frequency Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/freshness/dashboard": { + "get": { + "tags": [ + "Freshness" + ], + "summary": "Get content staleness dashboard", + "description": "Get the content staleness dashboard.\n\nShows all tracked URLs, their last check time, age, and whether\nthey're stale (not checked in 24h).", + "operationId": "freshness_dashboard_v1_freshness_dashboard_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Freshness Dashboard V1 Freshness Dashboard Get" + } + } + } + } + } + } + }, + "/v1/scrape": { + "post": { + "tags": [ + "Scraping" + ], + "summary": "Scrape a single URL", + "description": "Scrape a URL. Auto-bypasses Cloudflare. Returns markdown or JSON.", + "operationId": "scrape_v1_scrape_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScrapeRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Scrape V1 Scrape Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/detect-block": { + "post": { + "tags": [ + "Scraping" + ], + "summary": "Detect if a site is blocking the scraper", + "description": "Detect what kind of anti-bot protection a site is using.\n\nReturns detection tier, vendor (Cloudflare/DataDome/etc.), and confidence.\nUseful for debugging scraping issues.", + "operationId": "detect_block_v1_detect_block_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Detect Block V1 Detect Block Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/ultimate-scrape": { + "post": { + "tags": [ + "Scraping" + ], + "summary": "Scrape with 10-tier anti-bot fallback system", + "description": "Scrape any URL using Pry's ultimate 10-tier anti-detection system.\n\nAutomatically tries: direct \u2192 cloudscraper \u2192 FlareSolverr \u2192\nundetected-chromedriver \u2192 Playwright \u2192 Googlebot \u2192 Archive.org \u2192 Google Cache\n\nReturns the first successful result with the method used.", + "operationId": "ultimate_scrape_v1_ultimate_scrape_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_ultimate_scrape_v1_ultimate_scrape_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Ultimate Scrape V1 Ultimate Scrape Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/capture/network": { + "post": { + "tags": [ + "Scraping" + ], + "summary": "Extract API calls and network patterns from a page", + "description": "Extract API calls, GraphQL queries, and network patterns from a page.\n\nUseful for understanding how SPAs load data and finding hidden API endpoints.", + "operationId": "capture_network_v1_capture_network_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Capture Network V1 Capture Network Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/capture/lazy": { + "post": { + "tags": [ + "Scraping" + ], + "summary": "Detect and handle lazy-loaded content", + "description": "Detect lazy loading and infinite scroll patterns on a page.\n\nOptionally generate JS to auto-scroll and load all content.", + "operationId": "detect_lazy_content_v1_capture_lazy_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_detect_lazy_content_v1_capture_lazy_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Detect Lazy Content V1 Capture Lazy Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" } } } @@ -58,230 +615,7243 @@ }, "/v1/crawl": { "post": { + "tags": [ + "Scraping" + ], "summary": "Crawl multiple pages from a URL", - "description": "Crawl a website starting from a seed URL. Discovers and scrapes linked pages up to maxPages.", - "operationId": "crawl", - "tags": ["Scraping"], + "description": "Crawl multiple pages from a URL. Supports async webhooks.", + "operationId": "crawl_v1_crawl_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CrawlRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Crawl V1 Crawl Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/crawl/adaptive": { + "post": { + "tags": [ + "Scraping" + ], + "summary": "Crawl with adaptive stopping based on content relevance", + "description": "Crawl a website with adaptive stopping.\n\nUses information foraging theory to decide when to stop:\n- Stops when content relevance drops below threshold\n- Stops when information gain diminishes\n- Respects max_pages and max_depth limits\n- Ideal for targeted data collection (pricing, docs, products)", + "operationId": "adaptive_crawl_v1_crawl_adaptive_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_adaptive_crawl_v1_crawl_adaptive_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Adaptive Crawl V1 Crawl Adaptive Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/map": { + "post": { + "tags": [ + "Scraping" + ], + "summary": "Discover URLs on a site", + "description": "Discover URLs on a site.", + "operationId": "map_pages_v1_map_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MapRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Map Pages V1 Map Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/parse": { + "post": { + "tags": [ + "Parsing" + ], + "summary": "Parse a document (PDF, DOCX, image, CSV, JSON)", + "description": "Parse a document (PDF, DOCX, image, CSV, JSON) to text.", + "operationId": "parse_document_v1_parse_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ParseRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Parse Document V1 Parse Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/markdown": { + "post": { + "tags": [ + "Parsing" + ], + "summary": "Generate markdown with content filtering strategies", + "description": "Generate markdown with configurable content filtering.\n\nModes:\n- raw: Unfiltered markdown\n- fit: Prune boilerplate (nav, ads, footers)\n- bm25: Filter by BM25 relevance to query (requires query param)", + "operationId": "generate_markdown_v1_markdown_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_generate_markdown_v1_markdown_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Generate Markdown V1 Markdown Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/automate": { + "post": { + "tags": [ + "Automation" + ], + "summary": "Execute browser automation steps", + "description": "Execute browser automation steps. Sessions persist for login flows.", + "operationId": "automate_v1_automate_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutomateRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Automate V1 Automate Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/screenshot": { + "post": { + "tags": [ + "Automation" + ], + "summary": "Take a screenshot of a URL", + "description": "Take a screenshot of a URL. Returns base64 PNG.", + "operationId": "screenshot_v1_screenshot_post", + "parameters": [ + { + "name": "session_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Session Id" + } + } + ], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "type": "object", - "required": ["url"], - "properties": { - "url": {"type": "string", "example": "https://example.com"}, - "maxPages": {"type": "integer", "default": 10}, - "maxDepth": {"type": "integer", "default": 2} - } + "$ref": "#/components/schemas/Body_screenshot_v1_screenshot_post" } } } }, "responses": { "200": { - "description": "Crawl result with array of pages", - "content": {"application/json": {"schema": {"type": "object"}}} + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Screenshot V1 Screenshot Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/vision": { + "post": { + "tags": [ + "Vision" + ], + "summary": "Analyze an image with a free vision model", + "description": "Analyze an image with a free vision model.\n\nProvide ONE of: image (base64 or data URI), url (auto-screenshot),\nor file_path (local PNG/JPG).\n\nAuto-falls-back across 5 free OpenRouter vision models if the\nrequested one is rate-limited.", + "operationId": "vision_v1_vision_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_vision_v1_vision_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Vision V1 Vision Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/vision/models": { + "get": { + "tags": [ + "Vision" + ], + "summary": "List free vision-capable models on OpenRouter", + "description": "List free vision-capable models on OpenRouter.", + "operationId": "vision_models_v1_vision_models_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Vision Models V1 Vision Models Get" + } + } + } + } + } + } + }, + "/v1/session/create": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Create a persistent browser session", + "description": "Create a persistent browser session.", + "operationId": "create_session_v1_session_create_post", + "parameters": [ + { + "name": "persist", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true, + "title": "Persist" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Create Session V1 Session Create Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/session/destroy": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Destroy a browser session with optional save", + "description": "Destroy a browser session. Optionally save state first.", + "operationId": "destroy_session_v1_session_destroy_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_destroy_session_v1_session_destroy_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Destroy Session V1 Session Destroy Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/sessions": { + "get": { + "tags": [ + "Sessions" + ], + "summary": "List all persistent sessions", + "description": "List all persistent sessions (active + saved).", + "operationId": "list_sessions_v1_sessions_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Sessions V1 Sessions Get" + } + } + } + } + } + } + }, + "/v1/session/save": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Save current session state to disk", + "description": "Save a session's current state (cookies, storage) to disk.", + "operationId": "save_session_state_v1_session_save_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Session Id" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Save Session State V1 Session Save Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/session/restore": { + "post": { + "tags": [ + "Sessions" + ], + "summary": "Restore a saved session", + "description": "Restore a session from disk into a browser context.", + "operationId": "restore_session_v1_session_restore_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Session Id" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Restore Session V1 Session Restore Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/batch": { + "post": { + "tags": [ + "Batch" + ], + "summary": "Scrape multiple URLs in parallel", + "description": "Scrape multiple URLs in parallel. Firecrawl charges extra for batch.", + "operationId": "batch_scrape_v1_batch_post", + "parameters": [ + { + "name": "timeout", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 30, + "title": "Timeout" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Urls" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Batch Scrape V1 Batch Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/compare": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "Compare content of two URLs", + "description": "Scrape two URLs and compare their content. Shows additions, deletions, changes.", + "operationId": "compare_v1_compare_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_compare_v1_compare_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Compare V1 Compare Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/watch": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "Watch a page for changes", + "description": "Watch a page for changes. Accepts a webhook URL for notification.\nFirst call registers the watch, subsequent calls compare and notify.\nFirecrawl charges $99/mo for this feature.", + "operationId": "watch_page_v1_watch_post", + "parameters": [ + { + "name": "interval", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 3600, + "title": "Interval" + } + }, + { + "name": "selector", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "", + "title": "Selector" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_watch_page_v1_watch_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Watch Page V1 Watch Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/export": { + "post": { + "tags": [ + "Export" + ], + "summary": "Export scraped content in multiple formats", + "description": "Export scraped content in multiple formats: json, csv, txt, rss.\nFirecrawl only does markdown.", + "operationId": "export_data_v1_export_post", + "parameters": [ + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "json", + "title": "Format" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Export Data V1 Export Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/shadow-dom": { + "post": { + "tags": [ + "Parsing" + ], + "summary": "Extract content from Shadow DOM", + "description": "Scrape a page and extract content from Shadow DOM components.\n\nUseful for modern web apps built with Lit, web components, or\nframeworks that use Shadow DOM encapsulation.", + "operationId": "extract_shadow_dom_v1_shadow_dom_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_extract_shadow_dom_v1_shadow_dom_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Extract Shadow Dom V1 Shadow Dom Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/extract-table": { + "post": { + "tags": [ + "Extraction" + ], + "summary": "Extract HTML tables as structured data", + "description": "Extract HTML tables from a page as structured data.\nFirecrawl doesn't support table extraction at all.", + "operationId": "extract_table_v1_extract_table_post", + "parameters": [ + { + "name": "table_index", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 0, + "title": "Table Index" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Extract Table V1 Extract Table Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/links": { + "post": { + "tags": [ + "Extraction" + ], + "summary": "Analyze links on a page", + "description": "Analyze all links on a page \u2014 internal, external, broken, social.\nFirecrawl only has basic map functionality.", + "operationId": "analyze_links_v1_links_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Analyze Links V1 Links Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/seo": { + "post": { + "tags": [ + "Extraction" + ], + "summary": "SEO analysis of a page", + "description": "SEO analysis of a page: title, description, headings, images, keywords, readability.\nFirecrawl has zero SEO features.", + "operationId": "analyze_seo_v1_seo_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Analyze Seo V1 Seo Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/summarize": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "AI summarize scraped content", + "description": "Scrape + AI summarize using local Ollama. Free, private.", + "operationId": "summarize_v1_summarize_post", + "parameters": [ + { + "name": "max_words", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 100, + "title": "Max Words" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Summarize V1 Summarize Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/diff": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "Track page changes over time", + "description": "Track page changes over time. Returns diff from last scrape.", + "operationId": "diff_v1_diff_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_diff_v1_diff_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Diff V1 Diff Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/schema": { + "post": { + "tags": [ + "Extraction" + ], + "summary": "Extract Schema.org/JSON-LD structured data", + "description": "Extract Schema.org/JSON-LD structured data from a page.", + "operationId": "extract_schema_v1_schema_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Extract Schema V1 Schema Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/emails": { + "post": { + "tags": [ + "Extraction" + ], + "summary": "Find email addresses on a page", + "description": "Find all email addresses on a page.", + "operationId": "find_emails_v1_emails_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Find Emails V1 Emails Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/email/scrape": { + "post": { + "tags": [ + "Email" + ], + "summary": "Extract data from an email (subject + body)", + "description": "Extract structured data from an email subject and body.\n\nAuto-classifies as: order_confirmation, invoice, receipt,\nshipping_notification, subscription, or other.\n\nExtracts: order numbers, amounts, tracking numbers, dates, addresses.", + "operationId": "scrape_email_v1_email_scrape_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_scrape_email_v1_email_scrape_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Scrape Email V1 Email Scrape Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/email/gmail": { + "post": { + "tags": [ + "Email" + ], + "summary": "Fetch and extract data from Gmail inbox", + "description": "Connect to Gmail and extract structured data from emails.\n\nRequires a Gmail OAuth2 access token with scope:\nhttps://www.googleapis.com/auth/gmail.readonly\n\nExtracts order confirmations, invoices, receipts, shipping notifications.", + "operationId": "fetch_gmail_v1_email_gmail_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_fetch_gmail_v1_email_gmail_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Fetch Gmail V1 Email Gmail Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/email/outlook": { + "post": { + "tags": [ + "Email" + ], + "summary": "Fetch and extract data from Outlook inbox", + "description": "Connect to Outlook/Office 365 and extract structured data from emails.\n\nRequires a Microsoft Graph OAuth2 access token with scope:\nhttps://graph.microsoft.com/Mail.Read\n\nExtracts order confirmations, invoices, receipts, shipping notifications.", + "operationId": "fetch_outlook_v1_email_outlook_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_fetch_outlook_v1_email_outlook_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Fetch Outlook V1 Email Outlook Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/categorize": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "AI-categorize scraped content", + "description": "AI-categorize scraped content into topic tags.", + "operationId": "categorize_v1_categorize_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Categorize V1 Categorize Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/destinations": { + "get": { + "tags": [ + "Integrations" + ], + "summary": "List supported data destinations", + "description": "List all supported data destinations and their config requirements.", + "operationId": "list_destinations_v1_destinations_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Destinations V1 Destinations Get" + } + } + } + } + } + } + }, + "/v1/destination/send": { + "post": { + "tags": [ + "Integrations" + ], + "summary": "Send scraped data to a business destination", + "description": "Send extracted data to a business destination in one click.\n\nDestinations:\n- slack: Send to Slack channel via webhook\n- googlesheets: Write to Google Sheets (requires credentials)\n- airtable: Write to Airtable base (requires API key)\n- email: Send via email (requires SMTP config)\n\nConfig varies by destination:\n- slack: {\"webhook_url\": \"https://hooks.slack.com/...\"}\n- googlesheets: {\"spreadsheet_id\": \"...\", \"credentials_json\": \"...\"}\n- airtable: {\"base_id\": \"...\", \"table_name\": \"Table 1\", \"api_key\": \"...\"}\n- email: {\"recipient\": \"user@example.com\", \"subject\": \"Data Export\"}", + "operationId": "send_to_destination_v1_destination_send_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_send_to_destination_v1_destination_send_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Send To Destination V1 Destination Send Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/scrape-and-send": { + "post": { + "tags": [ + "Integrations" + ], + "summary": "Scrape a URL and send to a destination", + "description": "Scrape a URL and send the results to a business destination in one step.\n\nCombines /v1/scrape + /v1/destination/send into a single call.\nPerfect for non-technical users who just want data in their tools.", + "operationId": "scrape_and_send_v1_scrape_and_send_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_scrape_and_send_v1_scrape_and_send_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Scrape And Send V1 Scrape And Send Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/alert/send": { + "post": { + "tags": [ + "Alerts" + ], + "summary": "Send an alert to any channel", + "description": "Send an alert to Slack, Discord, Teams, Telegram, SMS, or Email.\n\nConfig varies by channel:\n- slack: {\"webhook_url\": \"...\"}\n- discord: {\"webhook_url\": \"...\"}\n- teams: {\"webhook_url\": \"...\"}\n- telegram: {\"bot_token\": \"...\", \"chat_id\": \"...\"}\n- sms: {\"phone\": \"+1234567890\", \"twilio_sid\": \"...\", \"twilio_token\": \"...\", \"twilio_from\": \"...\"}\n- email: {\"recipient\": \"user@example.com\", \"smtp_host\": \"...\", \"smtp_user\": \"...\"}", + "operationId": "send_alert_endpoint_v1_alert_send_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_send_alert_endpoint_v1_alert_send_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Send Alert Endpoint V1 Alert Send Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/alert/channels": { + "get": { + "tags": [ + "Alerts" + ], + "summary": "List supported alert channels", + "description": "List all supported alert channels and their config requirements.", + "operationId": "list_channels_v1_alert_channels_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Channels V1 Alert Channels Get" + } + } + } + } + } + } + }, + "/v1/job/{job_id}": { + "get": { + "tags": [ + "Jobs" + ], + "summary": "Get async job status and result", + "description": "Get async job status and result.", + "operationId": "get_job_v1_job__job_id__get", + "parameters": [ + { + "name": "job_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Job Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Job V1 Job Job Id Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/config": { + "get": { + "tags": [ + "Config" + ], + "summary": "Get current Pry configuration", + "description": "Get current Pry configuration.", + "operationId": "get_config_v1_config_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Get Config V1 Config Get" + } + } + } + } + } + }, + "post": { + "tags": [ + "Config" + ], + "summary": "Update Pry configuration at runtime", + "description": "Update Pry configuration at runtime.", + "operationId": "update_config_v1_config_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Updates" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Update Config V1 Config Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/config/profile/tor": { + "post": { + "tags": [ + "Config" + ], + "summary": "Enable Tor routing for all requests", + "description": "Enable Tor routing for all requests.", + "operationId": "enable_tor_v1_config_profile_tor_post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Enable Tor V1 Config Profile Tor Post" + } + } + } + } + } + } + }, + "/v1/batch-file": { + "post": { + "tags": [ + "Batch" + ], + "summary": "Batch scrape URLs from a file with templates", + "operationId": "batch_from_file_v1_batch_file_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BatchFileRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Batch From File V1 Batch File Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/record/start": { + "post": { + "tags": [ + "Recorder" + ], + "summary": "Start recording browser actions", + "operationId": "start_recording_v1_record_start_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Session Id" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Start Recording V1 Record Start Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/record/step": { + "post": { + "tags": [ + "Recorder" + ], + "summary": "Record a browser action step", + "operationId": "record_step_v1_record_step_post", + "parameters": [ + { + "name": "selector", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "", + "title": "Selector" + } + }, + { + "name": "value", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "", + "title": "Value" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_record_step_v1_record_step_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Record Step V1 Record Step Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/record/export": { + "post": { + "tags": [ + "Recorder" + ], + "summary": "Export recording as script", + "operationId": "export_recording_v1_record_export_post", + "parameters": [ + { + "name": "fmt", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "json", + "title": "Fmt" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Session Id" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Export Recording V1 Record Export Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/record/clear": { + "post": { + "tags": [ + "Recorder" + ], + "summary": "Clear recorded actions", + "operationId": "clear_recording_v1_record_clear_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Session Id" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Clear Recording V1 Record Clear Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/transform": { + "post": { + "tags": [ + "Transform" + ], + "summary": "Transform data to multiple formats", + "operationId": "transform_data_v1_transform_post", + "parameters": [ + { + "name": "format", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "csv", + "title": "Format" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": true + }, + "title": "Data" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Transform Data V1 Transform Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/run": { + "post": { + "tags": [ + "Execute" + ], + "summary": "Execute a Pryfile", + "operationId": "run_pryfile_v1_run_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Path", + "default": "pry.yml" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Run Pryfile V1 Run Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/jobs": { + "get": { + "tags": [ + "Jobs" + ], + "summary": "List jobs in a Pryfile", + "operationId": "list_jobs_v1_jobs_get", + "parameters": [ + { + "name": "path", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "pry.yml", + "title": "Path" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response List Jobs V1 Jobs Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/dashboard": { + "get": { + "tags": [ + "Dashboard" + ], + "summary": "Pry health and performance dashboard", + "operationId": "dashboard_dashboard_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/v1/suggest": { + "post": { + "tags": [ + "Analysis" + ], + "summary": "AI-suggest schema fields for a URL", + "operationId": "suggest_schema_v1_suggest_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Data" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Suggest Schema V1 Suggest Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/breaker/status": { + "post": { + "tags": [ + "Circuit Breaker" + ], + "summary": "Get circuit breaker status", + "operationId": "breaker_status_v1_breaker_status_post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Breaker Status V1 Breaker Status Post" + } + } + } + } + } + } + }, + "/v1/breaker/reset": { + "post": { + "tags": [ + "Circuit Breaker" + ], + "summary": "Reset circuit breaker for a domain", + "operationId": "breaker_reset_v1_breaker_reset_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Domain", + "default": "" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Breaker Reset V1 Breaker Reset Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/extract": { + "post": { + "tags": [ + "Extraction" + ], + "summary": "Extract structured fields from a URL", + "operationId": "extract_stable_v1_extract_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Data" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Extract Stable V1 Extract Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } } } } }, "/v1/extract/css": { "post": { - "summary": "Extract structured data with CSS selectors", - "description": "Extract structured JSON from any URL using CSS selectors. No LLM needed — 100x cheaper than AI extraction. Define a schema with selectors and get clean data back.", - "operationId": "extractCss", - "tags": ["Extraction"], + "tags": [ + "Extraction" + ], + "summary": "Extract structured data with CSS selectors (no LLM)", + "description": "Extract structured JSON from a URL using CSS selector schema.\n\nSchema format:\n{\n \"name\": \"products\",\n \"base_selector\": \".product-card\",\n \"fields\": [\n {\"name\": \"title\", \"selector\": \"h3\", \"type\": \"text\"},\n {\"name\": \"price\", \"selector\": \".price\", \"type\": \"text\", \"transform\": \"float\"},\n {\"name\": \"link\", \"selector\": \"a\", \"type\": \"attribute\", \"attribute\": \"href\"},\n {\"name\": \"in_stock\", \"selector\": \".stock\", \"type\": \"exists\"},\n ]\n}", + "operationId": "extract_css_v1_extract_css_post", "requestBody": { - "required": true, "content": { "application/json": { "schema": { - "type": "object", - "required": ["url", "schema"], - "properties": { - "url": {"type": "string", "example": "https://www.amazon.com/dp/B0ABC123"}, - "schema": { - "type": "object", - "description": "Extraction schema with CSS selectors", - "example": { - "name": "products", - "baseSelector": ".product-card", - "fields": [{"name": "title", "selector": "h3", "type": "text"}, {"name": "price", "selector": ".price", "type": "text", "transform": "float"}] - } - } - } + "$ref": "#/components/schemas/Body_extract_css_v1_extract_css_post" } } - } + }, + "required": true }, "responses": { "200": { - "description": "Extracted structured data", - "content": {"application/json": {"schema": {"type": "object"}}} + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Extract Css V1 Extract Css Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } } } } }, "/v1/extract/llm": { "post": { - "summary": "Extract with LLM + chunking", - "description": "Extract structured data using AI with intelligent chunking. Automatically chunks content by topic/sentence/regex and extracts relevant information.", - "operationId": "extractLlm", - "tags": ["Extraction"], + "tags": [ + "Extraction" + ], + "summary": "Extract with LLM + chunking strategies", + "description": "Extract structured data using LLM with intelligent chunking.\n\nChunks content by strategy (topic/sentence/regex), optionally filters\nby relevance to query, then extracts from each chunk.", + "operationId": "extract_llm_v1_extract_llm_post", "requestBody": { - "required": true, "content": { "application/json": { "schema": { - "type": "object", - "required": ["url"], - "properties": { - "url": {"type": "string"}, - "instruction": {"type": "string", "example": "Extract all product prices and discounts"}, - "chunk_strategy": {"type": "string", "enum": ["topic", "sentence", "regex"], "default": "topic"} + "$ref": "#/components/schemas/Body_extract_llm_v1_extract_llm_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Extract Llm V1 Extract Llm Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" } } } } - }, - "responses": {"200": {"description": "Extraction result"}} + } } }, - "/v1/map": { + "/v1/pipeline/hook": { "post": { - "summary": "Discover URLs on a site", - "description": "Discover all URLs on a website. Returns a list of internal links found on the page.", - "operationId": "mapUrls", - "tags": ["Scraping"], + "tags": [ + "Pipeline" + ], + "summary": "Register a hook function", + "description": "Register a JavaScript hook function at a pipeline hook point.\n\nHook points: before_scrape, after_response, before_parse, after_parse,\n before_extract, after_extract, before_return, on_error", + "operationId": "register_hook_v1_pipeline_hook_post", "requestBody": { - "required": true, "content": { "application/json": { "schema": { - "type": "object", - "required": ["url"], - "properties": { - "url": {"type": "string"}, - "limit": {"type": "integer", "default": 50} + "$ref": "#/components/schemas/Body_register_hook_v1_pipeline_hook_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Register Hook V1 Pipeline Hook Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" } } } } + } + } + }, + "/v1/pipeline/hooks": { + "get": { + "tags": [ + "Pipeline" + ], + "summary": "List all registered hooks", + "description": "List all registered hooks in the pipeline.", + "operationId": "list_pipeline_hooks_v1_pipeline_hooks_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Pipeline Hooks V1 Pipeline Hooks Get" + } + } + } + } + } + } + }, + "/v1/pipeline/run": { + "post": { + "tags": [ + "Pipeline" + ], + "summary": "Run pipeline hooks for testing", + "description": "Run hooks at a given pipeline point for testing.", + "operationId": "run_pipeline_test_v1_pipeline_run_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_run_pipeline_test_v1_pipeline_run_post" + } + } + }, + "required": true }, - "responses": {"200": {"description": "List of discovered URLs"}} + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Run Pipeline Test V1 Pipeline Run Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/pipe": { + "post": { + "tags": [ + "Transform" + ], + "summary": "Scrape and transform via data pipeline", + "operationId": "data_pipeline_v1_pipe_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Data" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Data Pipeline V1 Pipe Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/share": { + "post": { + "tags": [ + "Share" + ], + "summary": "Share scraped content via link", + "operationId": "share_scrape_v1_share_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Data" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Share Scrape V1 Share Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/share/{share_id}": { + "get": { + "tags": [ + "Share" + ], + "summary": "View shared content", + "operationId": "view_share_share__share_id__get", + "parameters": [ + { + "name": "share_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Share Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } } }, "/v1/compliance/check": { - "post": { - "summary": "Legal compliance check for a URL", - "description": "Check if scraping a URL is legally compliant. Analyzes robots.txt, Terms of Service, GDPR/CCPA jurisdiction, and sensitive data. Returns green/yellow/red risk level with recommendations.", - "operationId": "complianceCheck", - "tags": ["Compliance"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["url"], - "properties": { - "url": {"type": "string"} - } - } - } - } - }, - "responses": {"200": {"description": "Compliance check result with risk level"}} - } - }, - "/v1/monitor": { - "post": { - "summary": "Create a content change monitor", - "description": "Create a scheduled monitor that tracks content changes on a URL. Get notified when content changes with AI-powered meaningful-change detection.", - "operationId": "createMonitor", - "tags": ["Monitoring"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["name", "url"], - "properties": { - "name": {"type": "string", "example": "Competitor Pricing Page"}, - "url": {"type": "string", "example": "https://competitor.com/pricing"}, - "schedule_cron": {"type": "string", "default": "0 */6 * * *", "description": "Cron schedule (default: every 6 hours)"}, - "goal": {"type": "string", "description": "Natural language description of what changes matter"} - } - } - } - } - }, - "responses": {"200": {"description": "Created monitor"}} - } - }, - "/v1/search": { "get": { - "summary": "Search for templates and sites", - "description": "Search for available scraper templates and sites by keyword. Returns matching templates and their schemas.", - "operationId": "search", - "tags": ["Discovery"], - "parameters": [ - {"name": "q", "in": "query", "required": true, "schema": {"type": "string"}} + "tags": [ + "Compliance" ], - "responses": {"200": {"description": "Search results"}} - } - }, - "/v1/templates": { - "get": { - "summary": "List all pre-built scraper templates", - "description": "Get one-click scraper templates for Amazon, Walmart, LinkedIn, GitHub, Twitter, and 15+ other sites. Each template is a ready-to-use extraction schema.", - "operationId": "listTemplates", - "tags": ["Templates"], - "responses": {"200": {"description": "List of available templates"}} - } - }, - "/v1/templates/execute": { - "post": { - "summary": "Execute a scraper template", - "description": "Scrape a URL using a pre-built template. For example, use 'amazon-product' to extract product data from any Amazon product page.", - "operationId": "executeTemplate", - "tags": ["Templates"], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": ["template_id", "url"], - "properties": { - "template_id": {"type": "string", "example": "amazon-product"}, - "url": {"type": "string", "example": "https://www.amazon.com/dp/B0ABC123"} - } - } - } - } - }, - "responses": {"200": {"description": "Extracted template data"}} - } - }, - "/health": { - "get": { - "summary": "Health check", - "description": "Check if the Pry service is running and healthy.", - "operationId": "health", - "tags": ["System"], + "summary": "Get compliance check documentation", + "description": "Get information about the compliance check endpoint.", + "operationId": "compliance_docs_v1_compliance_check_get", "responses": { "200": { - "description": "Service is healthy", + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Compliance Docs V1 Compliance Check Get" + } + } + } + } + } + }, + "post": { + "tags": [ + "Compliance" + ], + "summary": "Run full compliance check on a URL", + "description": "Run a full legal compliance check on a target URL.\n\nAnalyzes:\n- robots.txt crawl permissions\n- Terms of Service classification (restrictive/permissive/moderate)\n- Jurisdiction detection (GDPR, CCPA, LGPD)\n- Sensitive data detection (PII, financial, health, contact)\n\nReturns a green/yellow/red risk score with recommendations.", + "operationId": "compliance_check_v1_compliance_check_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Compliance Check V1 Compliance Check Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/gdpr/consent": { + "post": { + "tags": [ + "GDPR" + ], + "summary": "Record user consent for data processing", + "description": "Record a user's consent for data processing (GDPR Art. 7).\n\nStores: user hash, purpose, timestamp, IP, user agent.\nConsent expires after 365 days.", + "operationId": "record_consent_endpoint_v1_gdpr_consent_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_record_consent_endpoint_v1_gdpr_consent_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Record Consent Endpoint V1 Gdpr Consent Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/gdpr/consent/{user_id}": { + "get": { + "tags": [ + "GDPR" + ], + "summary": "Check user consent status", + "description": "Check if a user has given valid consent for data processing.", + "operationId": "check_consent_endpoint_v1_gdpr_consent__user_id__get", + "parameters": [ + { + "name": "user_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "User Id" + } + }, + { + "name": "purpose", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "data_collection", + "title": "Purpose" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", "content": { "application/json": { "schema": { "type": "object", - "properties": { - "status": {"type": "string", "example": "ok"} + "additionalProperties": true, + "title": "Response Check Consent Endpoint V1 Gdpr Consent User Id Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/gdpr/consent/revoke": { + "post": { + "tags": [ + "GDPR" + ], + "summary": "Revoke user consent", + "description": "Revoke a user's consent for a processing purpose (GDPR Art. 7(3)).", + "operationId": "revoke_consent_endpoint_v1_gdpr_consent_revoke_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_revoke_consent_endpoint_v1_gdpr_consent_revoke_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Revoke Consent Endpoint V1 Gdpr Consent Revoke Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/gdpr/deletion/request": { + "post": { + "tags": [ + "GDPR" + ], + "summary": "Request data deletion (right to erasure)", + "description": "Request deletion of all data associated with a user (GDPR Art. 17).\n\nCreates a deletion request that can be executed immediately or\nafter a holding period.", + "operationId": "request_deletion_endpoint_v1_gdpr_deletion_request_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_request_deletion_endpoint_v1_gdpr_deletion_request_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Request Deletion Endpoint V1 Gdpr Deletion Request Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/gdpr/deletion/execute": { + "post": { + "tags": [ + "GDPR" + ], + "summary": "Execute data deletion request", + "description": "Execute a pending deletion request, removing all user data.", + "operationId": "execute_deletion_endpoint_v1_gdpr_deletion_execute_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Request Id" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Execute Deletion Endpoint V1 Gdpr Deletion Execute Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/gdpr/retention": { + "get": { + "tags": [ + "GDPR" + ], + "summary": "Get data retention policy", + "description": "Get the current data retention policy.", + "operationId": "get_retention_policy_endpoint_v1_gdpr_retention_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Get Retention Policy Endpoint V1 Gdpr Retention Get" + } + } + } + } + } + } + }, + "/v1/gdpr/retention/apply": { + "post": { + "tags": [ + "GDPR" + ], + "summary": "Apply retention policy to remove expired data", + "description": "Apply the retention policy, removing all expired data.", + "operationId": "apply_retention_v1_gdpr_retention_apply_post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Apply Retention V1 Gdpr Retention Apply Post" + } + } + } + } + } + } + }, + "/v1/gdpr/audit": { + "get": { + "tags": [ + "GDPR" + ], + "summary": "Get compliance audit log", + "description": "Get the compliance audit log for the specified period.", + "operationId": "get_audit_log_endpoint_v1_gdpr_audit_get", + "parameters": [ + { + "name": "days_back", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 7, + "title": "Days Back" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Audit Log Endpoint V1 Gdpr Audit Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/training/classify-license": { + "post": { + "tags": [ + "Training" + ], + "summary": "Classify content license for AI training", + "description": "Classify the license of scraped content for AI training compliance.\n\nReturns license type (CC0, CC-BY, MIT, Apache, GPL, Proprietary, Fair Use),\ntier (permissive/copyleft/restrictive/conditional), and confidence.", + "operationId": "classify_license_endpoint_v1_training_classify_license_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Text" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Classify License Endpoint V1 Training Classify License Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/training/clean": { + "post": { + "tags": [ + "Training" + ], + "summary": "Strip PII and copyright from content", + "description": "Strip PII and copyright content for AI training clean room.\n\nRemoves emails, phones, SSNs, credit cards, IPs, and (optionally) names.\nAlso strips copyright notices and near-verbatim copyright content.", + "operationId": "clean_content_v1_training_clean_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_clean_content_v1_training_clean_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Clean Content V1 Training Clean Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/training/export": { + "post": { + "tags": [ + "Training" + ], + "summary": "Export a clean AI training dataset", + "description": "Export scraped content as a clean AI training dataset.\n\nEach record should have: content, url, and optional metadata.\n\nFeatures:\n- Per-record provenance tracking (source URL, timestamp, extraction method)\n- PII stripping (email, phone, SSN, CC, IP)\n- Copyright verbatim text removal\n- License classification\n- Compliance report generation", + "operationId": "export_dataset_v1_training_export_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_export_dataset_v1_training_export_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Export Dataset V1 Training Export Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/training/compliance/{dataset_id}": { + "get": { + "tags": [ + "Training" + ], + "summary": "Generate compliance report for a dataset", + "description": "Generate a compliance report for an exported training dataset.\n\nReport includes: data provenance, PII/copyright removal stats,\nlicense classification, and legal recommendations.", + "operationId": "compliance_report_v1_training_compliance__dataset_id__get", + "parameters": [ + { + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Dataset Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Compliance Report V1 Training Compliance Dataset Id Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/monitor": { + "post": { + "tags": [ + "Monitoring" + ], + "summary": "Create a scheduled content monitor", + "description": "Create a scheduled monitor that tracks content changes.\n\nArgs:\n name: Human-readable monitor name\n url: Target URL to monitor\n schedule_cron: Cron expression (default: every 6 hours)\n goal: Natural language goal for meaningful-change detection\n webhook: URL to notify on meaningful changes\n use_llm: Use LLM for change judging (slower but smarter)", + "operationId": "create_monitor_endpoint_v1_monitor_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_create_monitor_endpoint_v1_monitor_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Create Monitor Endpoint V1 Monitor Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/monitor/run": { + "post": { + "tags": [ + "Monitoring" + ], + "summary": "Run a single monitor check", + "description": "Execute a monitor check immediately (outside of schedule).", + "operationId": "run_monitor_endpoint_v1_monitor_run_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Monitor Id" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Run Monitor Endpoint V1 Monitor Run Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/monitors": { + "get": { + "tags": [ + "Monitoring" + ], + "summary": "List all monitors", + "description": "List all registered monitors.", + "operationId": "list_monitors_endpoint_v1_monitors_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Monitors Endpoint V1 Monitors Get" + } + } + } + } + } + } + }, + "/v1/monitor/{monitor_id}": { + "delete": { + "tags": [ + "Monitoring" + ], + "summary": "Delete a monitor", + "description": "Delete a monitor and its snapshots.", + "operationId": "delete_monitor_endpoint_v1_monitor__monitor_id__delete", + "parameters": [ + { + "name": "monitor_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Monitor Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Delete Monitor Endpoint V1 Monitor Monitor Id Delete" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/monitor/check": { + "post": { + "tags": [ + "Monitoring" + ], + "summary": "Run all due monitors", + "description": "Check all monitors and run any that are due based on their cron schedule.", + "operationId": "run_due_monitors_v1_monitor_check_post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Run Due Monitors V1 Monitor Check Post" + } + } + } + } + } + } + }, + "/v1/structure/check": { + "post": { + "tags": [ + "Structure" + ], + "summary": "Check if CSS selectors still match on a page", + "description": "Check if CSS selectors still match on a page.\n\nUse this to verify your scraper templates still work after\na site redesign. Returns per-selector match status.\n\nSelectors format: [{\"name\": \"title\", \"selector\": \"h1\", \"type\": \"css\"}]", + "operationId": "structure_check_v1_structure_check_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_structure_check_v1_structure_check_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Structure Check V1 Structure Check Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/structure/monitor": { + "post": { + "tags": [ + "Structure" + ], + "summary": "Monitor page structure changes over time", + "description": "Monitor page structure changes and detect broken selectors.\n\nCompares current selector match status to previous checks.\nAlerts when selectors stop matching (site redesign detected).\n\nUse this as a pre-scrape health check for your templates.", + "operationId": "structure_monitor_v1_structure_monitor_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_structure_monitor_v1_structure_monitor_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Structure Monitor V1 Structure Monitor Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/structure/check-template": { + "post": { + "tags": [ + "Structure" + ], + "summary": "Verify a scraper template still works", + "description": "Check if a pre-built scraper template still works against a URL.\n\nExtracts the template's selectors and checks each one.\nIf selectors fail, the template needs updating.", + "operationId": "structure_check_template_v1_structure_check_template_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_structure_check_template_v1_structure_check_template_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Structure Check Template V1 Structure Check Template Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/intel/snapshot": { + "post": { + "tags": [ + "Intelligence" + ], + "summary": "Record a competitor data snapshot", + "description": "Record a data snapshot for a competitor.\n\nSnapshots are stored with timestamps and used for trend analysis,\nanomaly detection, and report generation.", + "operationId": "record_intel_snapshot_v1_intel_snapshot_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_record_intel_snapshot_v1_intel_snapshot_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Record Intel Snapshot V1 Intel Snapshot Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/intel/snapshots/{competitor_id}": { + "get": { + "tags": [ + "Intelligence" + ], + "summary": "Get competitor snapshots", + "description": "Get historical snapshots for a competitor.", + "operationId": "get_intel_snapshots_v1_intel_snapshots__competitor_id__get", + "parameters": [ + { + "name": "competitor_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Competitor Id" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 50, + "title": "Limit" + } + }, + { + "name": "since_hours", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Since Hours" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Intel Snapshots V1 Intel Snapshots Competitor Id Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/intel/analyze": { + "post": { + "tags": [ + "Intelligence" + ], + "summary": "Analyze competitor field for anomalies", + "description": "Analyze a specific field across a competitor's snapshots for anomalies.\n\nReturns statistics, z-score analysis, and anomaly detection.", + "operationId": "analyze_field_v1_intel_analyze_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_analyze_field_v1_intel_analyze_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Analyze Field V1 Intel Analyze Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/intel/report": { + "post": { + "tags": [ + "Intelligence" + ], + "summary": "Generate a competitive intelligence report", + "description": "Generate a competitive intelligence report for tracked competitors.\n\nAnalyzes changes over the specified period and returns a structured report\nwith a natural-language summary.", + "operationId": "generate_report_v1_intel_report_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_generate_report_v1_intel_report_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Generate Report V1 Intel Report Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/quality/check": { + "post": { + "tags": [ + "Quality" + ], + "summary": "Run data quality check on extraction results", + "description": "Run a full data quality check on extraction results.\n\nMetrics:\n- Completeness: what % of expected fields have values\n- Schema adherence: field types match expectations\n- Freshness: how old is the data\n- Anomaly detection: what changed since last extraction\n\nUse this to validate data BEFORE sending to downstream systems.", + "operationId": "quality_check_v1_quality_check_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_quality_check_v1_quality_check_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Quality Check V1 Quality Check Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/quality/stats": { + "get": { + "tags": [ + "Quality" + ], + "summary": "Get quality statistics for all checked URLs", + "description": "Get aggregate quality statistics across all checked URLs.", + "operationId": "quality_stats_v1_quality_stats_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Quality Stats V1 Quality Stats Get" + } + } + } + } + } + } + }, + "/v1/reconcile": { + "post": { + "tags": [ + "Reconciliation" + ], + "summary": "Reconcile records from multiple sources into unified entities", + "description": "Reconcile records from multiple sources into matched entities.\n\nMatches records across sources using identity field similarity,\nnormalizes to a unified vertical schema, and returns entity groups\nwith confidence scores.\n\nVerticals: product, job, real_estate, review", + "operationId": "reconcile_endpoint_v1_reconcile_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_reconcile_endpoint_v1_reconcile_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Reconcile Endpoint V1 Reconcile Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/reconcile/schemas": { + "get": { + "tags": [ + "Reconciliation" + ], + "summary": "List supported reconciliation schemas", + "description": "List all supported vertical schemas for entity reconciliation.", + "operationId": "list_schemas_v1_reconcile_schemas_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Schemas V1 Reconcile Schemas Get" + } + } + } + } + } + } + }, + "/v1/auth/credentials": { + "get": { + "tags": [ + "Auth" + ], + "summary": "List stored credentials", + "description": "List all stored credentials (without exposing secrets).", + "operationId": "list_credentials_endpoint_v1_auth_credentials_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Credentials Endpoint V1 Auth Credentials Get" + } + } + } + } + } + }, + "post": { + "tags": [ + "Auth" + ], + "summary": "Store credentials in the vault", + "description": "Store credentials in the encrypted vault for authenticated scraping.\n\nCredential types: password, api_key, cookie, token, sso", + "operationId": "store_credentials_v1_auth_credentials_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_store_credentials_v1_auth_credentials_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Store Credentials V1 Auth Credentials Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/auth/credentials/{credential_id}": { + "delete": { + "tags": [ + "Auth" + ], + "summary": "Delete stored credentials", + "description": "Delete stored credentials from the vault.", + "operationId": "delete_credentials_endpoint_v1_auth_credentials__credential_id__delete", + "parameters": [ + { + "name": "credential_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Credential Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Delete Credentials Endpoint V1 Auth Credentials Credential Id Delete" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/auth/sso": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Generate SSO login script", + "description": "Generate a browser automation script for SSO login.\n\nSupports: okta, azure_ad, google_workspace, onelogin", + "operationId": "generate_sso_v1_auth_sso_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_generate_sso_v1_auth_sso_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Generate Sso V1 Auth Sso Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/auth/captcha": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Solve a CAPTCHA using third-party service", + "description": "Solve a CAPTCHA using Capsolver or 2Captcha.\n\nProvide either:\n- image_base64: Base64-encoded CAPTCHA image\n- site_key + page_url: For reCAPTCHA v2", + "operationId": "solve_captcha_endpoint_v1_auth_captcha_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_solve_captcha_endpoint_v1_auth_captcha_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Solve Captcha Endpoint V1 Auth Captcha Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/auth/session/health": { + "post": { + "tags": [ + "Auth" + ], + "summary": "Check authenticated session health", + "description": "Check the health of an authenticated session.\n\nReports cookie validity, session age, and whether re-auth is needed.", + "operationId": "check_session_v1_auth_session_health_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Session Id" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Check Session V1 Auth Session Health Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/review/submit": { + "post": { + "tags": [ + "Review" + ], + "summary": "Submit extracted data for human review", + "description": "Submit extracted data for human review before delivery.\n\nUse this when extraction confidence is low or anomalies were detected.\nData will be held in the review queue until approved or rejected.", + "operationId": "review_submit_v1_review_submit_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_review_submit_v1_review_submit_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Review Submit V1 Review Submit Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/review/{review_id}/approve": { + "post": { + "tags": [ + "Review" + ], + "summary": "Approve a review item", + "description": "Approve a review item, allowing data to proceed to delivery.", + "operationId": "review_approve_v1_review__review_id__approve_post", + "parameters": [ + { + "name": "review_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Review Id" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_review_approve_v1_review__review_id__approve_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Review Approve V1 Review Review Id Approve Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/review/{review_id}/reject": { + "post": { + "tags": [ + "Review" + ], + "summary": "Reject a review item", + "description": "Reject a review item, blocking data delivery.", + "operationId": "review_reject_v1_review__review_id__reject_post", + "parameters": [ + { + "name": "review_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Review Id" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_review_reject_v1_review__review_id__reject_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Review Reject V1 Review Review Id Reject Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/reviews": { + "get": { + "tags": [ + "Review" + ], + "summary": "List reviews in the queue", + "description": "List reviews, optionally filtered by status (pending/approved/rejected).", + "operationId": "list_reviews_v1_reviews_get", + "parameters": [ + { + "name": "status", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Status" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response List Reviews V1 Reviews Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/review/{review_id}": { + "get": { + "tags": [ + "Review" + ], + "summary": "Get review details", + "description": "Get full details of a review item including the data payload.", + "operationId": "get_review_v1_review__review_id__get", + "parameters": [ + { + "name": "review_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Review Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Review V1 Review Review Id Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/extract-with-review": { + "post": { + "tags": [ + "Review" + ], + "summary": "Extract with automatic human review routing", + "description": "Extract data with automatic quality check and human review routing.\n\nHigh-confidence results are auto-approved.\nLow-confidence results are auto-rejected.\nMedium-confidence results go to the human review queue with Slack notification.", + "operationId": "extract_with_review_v1_extract_with_review_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_extract_with_review_v1_extract_with_review_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Extract With Review V1 Extract With Review Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/commerce/sync": { + "post": { + "tags": [ + "Commerce" + ], + "summary": "Sync products to WooCommerce or Shopify", + "description": "Sync scraped products to your e-commerce platform.\n\nPlatforms:\n- woocommerce: credentials = {\"wp_url\": \"...\", \"consumer_key\": \"...\", \"consumer_secret\": \"...\"}\n- shopify: credentials = {\"shop_url\": \"...\", \"access_token\": \"...\"}\n\nProducts are imported as drafts for review before publishing.", + "operationId": "sync_commerce_v1_commerce_sync_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_sync_commerce_v1_commerce_sync_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Sync Commerce V1 Commerce Sync Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/commerce/platforms": { + "get": { + "tags": [ + "Commerce" + ], + "summary": "List supported commerce platforms", + "description": "List supported e-commerce platforms and their credential requirements.", + "operationId": "list_commerce_platforms_v1_commerce_platforms_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Commerce Platforms V1 Commerce Platforms Get" + } + } + } + } + } + } + }, + "/v1/crm/sync": { + "post": { + "tags": [ + "CRM" + ], + "summary": "Sync scraped data to CRM", + "description": "Sync scraped data to your CRM.\n\nPlatforms:\n- salesforce: credentials={\"instance_url\": \"...\", \"access_token\": \"...\"}\n- hubspot: credentials={\"api_key\": \"...\"}\n- pipedrive: credentials={\"api_token\": \"...\", \"domain\": \"...\"}\n- close: credentials={\"api_key\": \"...\"}\n\nObject types vary by platform:\n- Salesforce: Lead, Contact, Account, Opportunity\n- HubSpot: contacts, companies, deals\n- Pipedrive: person, organization, deal, lead\n- Close: lead, contact", + "operationId": "sync_crm_v1_crm_sync_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_sync_crm_v1_crm_sync_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Sync Crm V1 Crm Sync Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/crm/platforms": { + "get": { + "tags": [ + "CRM" + ], + "summary": "List supported CRM platforms", + "description": "List supported CRM platforms and their credential requirements.", + "operationId": "list_crm_platforms_v1_crm_platforms_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Crm Platforms V1 Crm Platforms Get" + } + } + } + } + } + } + }, + "/v1/pipelines/steps": { + "get": { + "tags": [ + "Pipelines" + ], + "summary": "List all available pipeline step types", + "description": "List all available step types for the visual pipeline builder.\n\nEach step type includes: name, icon, description, required inputs with types,\nand expected outputs. A UI renders these as drag-and-drop blocks.", + "operationId": "list_step_types_v1_pipelines_steps_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Step Types V1 Pipelines Steps Get" + } + } + } + } + } + } + }, + "/v1/pipelines/validate": { + "post": { + "tags": [ + "Pipelines" + ], + "summary": "Validate a pipeline definition", + "description": "Validate a pipeline definition for correctness.", + "operationId": "validate_pipeline_endpoint_v1_pipelines_validate_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Pipeline" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Validate Pipeline Endpoint V1 Pipelines Validate Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/pipelines/run": { + "post": { + "tags": [ + "Pipelines" + ], + "summary": "Execute a pipeline", + "description": "Execute a pipeline definition.\n\nSteps run sequentially. Each step's output is available as\n{{step_id.output_key}} in subsequent step templates.\n\nExample pipeline:\n{\n \"name\": \"Monitor Competitor Pricing\",\n \"steps\": [\n {\"id\": \"scrape_amazon\", \"type\": \"scrape\", \"inputs\": {\"url\": \"https://amazon.com/product\"}},\n {\"id\": \"extract\", \"type\": \"extract_css\", \"inputs\": {\"url\": \"{{scrape_amazon.url}}\", \"schema\": {...}}},\n {\"id\": \"quality\", \"type\": \"quality_check\", \"inputs\": {\"url\": \"{{scrape_amazon.url}}\", \"data\": \"{{extract.items}}\"}},\n {\"id\": \"notify\", \"type\": \"send_slack\", \"inputs\": {\"webhook_url\": \"https://hooks.slack.com/...\", \"message\": \"{{quality.quality_score}}\"}},\n ]\n}", + "operationId": "run_pipeline_endpoint_v1_pipelines_run_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_run_pipeline_endpoint_v1_pipelines_run_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Run Pipeline Endpoint V1 Pipelines Run Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/pipelines/save": { + "post": { + "tags": [ + "Pipelines" + ], + "summary": "Save a pipeline definition", + "description": "Save a pipeline definition for later use.", + "operationId": "save_pipeline_endpoint_v1_pipelines_save_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Pipeline" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Save Pipeline Endpoint V1 Pipelines Save Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/pipelines": { + "get": { + "tags": [ + "Pipelines" + ], + "summary": "List saved pipelines", + "description": "List all saved pipeline definitions.", + "operationId": "list_pipelines_endpoint_v1_pipelines_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Pipelines Endpoint V1 Pipelines Get" + } + } + } + } + } + } + }, + "/v1/pipelines/{pipeline_id}": { + "get": { + "tags": [ + "Pipelines" + ], + "summary": "Get a saved pipeline", + "description": "Get a saved pipeline definition by ID.", + "operationId": "get_pipeline_endpoint_v1_pipelines__pipeline_id__get", + "parameters": [ + { + "name": "pipeline_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Pipeline Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Pipeline Endpoint V1 Pipelines Pipeline Id Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "delete": { + "tags": [ + "Pipelines" + ], + "summary": "Delete a saved pipeline", + "description": "Delete a saved pipeline definition.", + "operationId": "delete_pipeline_endpoint_v1_pipelines__pipeline_id__delete", + "parameters": [ + { + "name": "pipeline_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Pipeline Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Delete Pipeline Endpoint V1 Pipelines Pipeline Id Delete" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/agency/create": { + "post": { + "tags": [ + "Agency" + ], + "summary": "Create a white-label agency profile", + "description": "Create a white-label agency profile for reselling Pry.\n\nAgencies get:\n- Custom branding (colors, logo, domain)\n- Client management with sub-accounts\n- Usage analytics and quota management\n- API key management for each client", + "operationId": "create_agency_endpoint_v1_agency_create_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_create_agency_endpoint_v1_agency_create_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Create Agency Endpoint V1 Agency Create Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/agency/{agency_id}": { + "get": { + "tags": [ + "Agency" + ], + "summary": "Get agency profile", + "description": "Get agency profile details.", + "operationId": "get_agency_endpoint_v1_agency__agency_id__get", + "parameters": [ + { + "name": "agency_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Agency Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Agency Endpoint V1 Agency Agency Id Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/agency/{agency_id}/branding": { + "put": { + "tags": [ + "Agency" + ], + "summary": "Update agency branding", + "description": "Update white-label branding for an agency.", + "operationId": "update_branding_v1_agency__agency_id__branding_put", + "parameters": [ + { + "name": "agency_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Agency Id" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_update_branding_v1_agency__agency_id__branding_put" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Update Branding V1 Agency Agency Id Branding Put" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/agency/{agency_id}/clients": { + "post": { + "tags": [ + "Agency" + ], + "summary": "Create a client sub-account", + "description": "Create a client sub-account under an agency.\n\nEach client gets their own API key and usage quota.", + "operationId": "create_client_endpoint_v1_agency__agency_id__clients_post", + "parameters": [ + { + "name": "agency_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Agency Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_create_client_endpoint_v1_agency__agency_id__clients_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Create Client Endpoint V1 Agency Agency Id Clients Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "get": { + "tags": [ + "Agency" + ], + "summary": "List agency clients", + "description": "List all clients under an agency.", + "operationId": "list_clients_endpoint_v1_agency__agency_id__clients_get", + "parameters": [ + { + "name": "agency_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Agency Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response List Clients Endpoint V1 Agency Agency Id Clients Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/agency/{agency_id}/analytics": { + "get": { + "tags": [ + "Agency" + ], + "summary": "Get agency usage analytics", + "description": "Get aggregate usage analytics for an agency.", + "operationId": "get_analytics_v1_agency__agency_id__analytics_get", + "parameters": [ + { + "name": "agency_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Agency Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Analytics V1 Agency Agency Id Analytics Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/client/{client_id}/quota": { + "get": { + "tags": [ + "Agency" + ], + "summary": "Check client quota usage", + "description": "Check a client's current quota usage and remaining capacity.", + "operationId": "check_quota_v1_client__client_id__quota_get", + "parameters": [ + { + "name": "client_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Client Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Check Quota V1 Client Client Id Quota Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/seo/analyze": { + "post": { + "tags": [ + "SEO" + ], + "summary": "Analyze SEO elements from a URL", + "description": "Analyze all SEO elements from a URL.\n\nReturns: title, meta description, keywords, headings (H1/H2),\ncanonical, OG tags, Twitter cards, word count, link counts,\nschema markup, hreflang tags.", + "operationId": "seo_analyze_v1_seo_analyze_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Seo Analyze V1 Seo Analyze Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/seo/track": { + "post": { + "tags": [ + "SEO" + ], + "summary": "Track SEO changes since last scan", + "description": "Track SEO changes since the last scan of this URL.\n\nCompares current SEO elements to previous snapshot and reports\nwhat changed (title, description, headings, etc.).", + "operationId": "seo_track_v1_seo_track_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Seo Track V1 Seo Track Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/seo/keywords": { + "post": { + "tags": [ + "SEO" + ], + "summary": "Analyze keyword presence in URL content", + "description": "Analyze which keywords a URL targets.\n\nChecks each keyword for:\n- Presence in title tag\n- Presence in H1 headings\n- Presence in meta description\n- Frequency in body content\n- Keyword density percentage", + "operationId": "seo_keywords_v1_seo_keywords_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_seo_keywords_v1_seo_keywords_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Seo Keywords V1 Seo Keywords Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/reports/generate": { + "post": { + "tags": [ + "Reports" + ], + "summary": "Generate a white-label report from scraped data", + "description": "Generate a white-label report from scraped data.\n\nReport types:\n- competitive_analysis: Competitor pricing and activity overview\n- price_monitor: Product price change tracking with visual indicators\n- seo_audit: SEO element analysis with change detection\n- content_tracker: Content change monitoring across pages\n\nBranding (optional): {\"agency_name\": \"...\", \"brand_color\": \"#hex\", \"logo_url\": \"...\"}", + "operationId": "generate_report_endpoint_v1_reports_generate_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_generate_report_endpoint_v1_reports_generate_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Generate Report Endpoint V1 Reports Generate Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/reports": { + "get": { + "tags": [ + "Reports" + ], + "summary": "List generated reports", + "description": "List all previously generated reports.", + "operationId": "list_reports_endpoint_v1_reports_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Reports Endpoint V1 Reports Get" + } + } + } + } + } + } + }, + "/v1/report/{report_id}": { + "get": { + "tags": [ + "Reports" + ], + "summary": "Get a generated report", + "description": "Get the HTML content of a generated report.", + "operationId": "get_report_v1_report__report_id__get", + "parameters": [ + { + "name": "report_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Report Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "title": "Response Get Report V1 Report Report Id Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/enrich": { + "post": { + "tags": [ + "Enrichment" + ], + "summary": "Enrich scraped data with company info, tech stack, social profiles", + "description": "Enrich a URL with supplemental business intelligence.\n\nReturns:\n- Tech stack detection (CMS, framework, CDN, analytics, payments)\n- Social media profiles (Twitter, LinkedIn, Facebook, Instagram, GitHub, etc.)\n- Company information (email, phone, address, founded year, team size)", + "operationId": "enrich_data_v1_enrich_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_enrich_data_v1_enrich_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Enrich Data V1 Enrich Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/enrich/tech-stack": { + "post": { + "tags": [ + "Enrichment" + ], + "summary": "Detect technologies used on a website", + "description": "Detect what technologies a website is built with.\n\nDetects: CMS (WordPress, Shopify, Wix), frameworks (Next.js, Django, Rails),\nfrontend (React, Vue, Angular), CDN (Cloudflare, Fastly), analytics (GA, Hotjar),\npayments (Stripe, PayPal).", + "operationId": "detect_tech_v1_enrich_tech_stack_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Detect Tech V1 Enrich Tech Stack Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/templates": { + "get": { + "tags": [ + "Templates" + ], + "summary": "List all pre-built scraper templates", + "description": "List all available pre-built scraper templates.\n\nTemplates are one-click extractors for popular websites:\nAmazon, Walmart, Target, Best Buy, LinkedIn, Indeed, GitHub, etc.", + "operationId": "list_templates_endpoint_v1_templates_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Templates Endpoint V1 Templates Get" + } + } + } + } + } + } + }, + "/v1/templates/{template_id}": { + "get": { + "tags": [ + "Templates" + ], + "summary": "Get a scraper template", + "description": "Get a specific scraper template with full schema details.", + "operationId": "get_template_endpoint_v1_templates__template_id__get", + "parameters": [ + { + "name": "template_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Template Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Template Endpoint V1 Templates Template Id Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/templates/execute": { + "post": { + "tags": [ + "Templates" + ], + "summary": "Execute a scraper template against a URL", + "description": "Execute a pre-built scraper template against any URL.\n\nExample: use \"amazon_product\" template with an Amazon product URL\nto get structured title, price, rating, description, etc.\n\nTemplates auto-detect the page structure using pre-configured CSS selectors.", + "operationId": "execute_template_endpoint_v1_templates_execute_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_execute_template_endpoint_v1_templates_execute_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Execute Template Endpoint V1 Templates Execute Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/ai/gpt-manifest": { + "get": { + "tags": [ + "AI" + ], + "summary": "Get GPT Action manifest for ChatGPT", + "description": "Get the GPT Action manifest for ChatGPT integration.\n\nAdd this to your GPT configuration in ChatGPT to give it\nweb scraping capabilities through Pry.", + "operationId": "get_gpt_manifest_v1_ai_gpt_manifest_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/v1/ai/mcp-config": { + "get": { + "tags": [ + "AI" + ], + "summary": "Get MCP server config for Claude/Cursor", + "description": "Get the MCP server configuration for Claude/Cursor.\n\nAdd this to your AI tool's MCP configuration file to let\nClaude and Cursor scrape the web through Pry.", + "operationId": "get_mcp_config_v1_ai_mcp_config_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/v1/referrals/catalog": { + "get": { + "tags": [ + "Referrals" + ], + "summary": "Get all available referral/affiliate programs", + "description": "List all referral programs Pry supports.\n\n60+ providers across categories: LLM, hosting, domains, CDN, email,\nmonitoring, proxies, voice, media, devtools, search, CAPTCHA.", + "operationId": "get_referral_catalog_v1_referrals_catalog_get", + "parameters": [ + { + "name": "category", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "", + "title": "Category" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Referral Catalog V1 Referrals Catalog Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/referrals/stats": { + "get": { + "tags": [ + "Referrals" + ], + "summary": "Get referral click and conversion stats", + "description": "Get referral tracking statistics for the last N days.", + "operationId": "get_referral_stats_v1_referrals_stats_get", + "parameters": [ + { + "name": "days_back", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 30, + "title": "Days Back" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Referral Stats V1 Referrals Stats Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/referrals/click": { + "post": { + "tags": [ + "Referrals" + ], + "summary": "Record a referral link click", + "description": "Record when a user clicks a referral link. Returns tracking ID.", + "operationId": "record_referral_click_v1_referrals_click_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_record_referral_click_v1_referrals_click_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Record Referral Click V1 Referrals Click Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/referrals/convert": { + "post": { + "tags": [ + "Referrals" + ], + "summary": "Record a referral conversion", + "description": "Record that a referral click resulted in a conversion.", + "operationId": "record_referral_conversion_v1_referrals_convert_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_record_referral_conversion_v1_referrals_convert_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Record Referral Conversion V1 Referrals Convert Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/x402/pricing": { + "get": { + "tags": [ + "x402" + ], + "summary": "Get x402 pricing for all paid operations", + "description": "Get the price list for pay-per-scrape operations.", + "operationId": "x402_pricing_v1_x402_pricing_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response X402 Pricing V1 X402 Pricing Get" + } + } + } + } + } + } + }, + "/v1/x402/payment": { + "post": { + "tags": [ + "x402" + ], + "summary": "Create a x402 payment request", + "description": "Create a x402 payment request for a paid operation.\n\nReturns payment details (wallet, amount, asset) for the client to pay.", + "operationId": "x402_payment_request_v1_x402_payment_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_x402_payment_request_v1_x402_payment_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response X402 Payment Request V1 X402 Payment Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/x402/verify": { + "post": { + "tags": [ + "x402" + ], + "summary": "Verify a x402 payment was settled", + "description": "Verify a x402 payment has been settled on-chain via facilitator router.", + "operationId": "x402_verify_payment_v1_x402_verify_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_x402_verify_payment_v1_x402_verify_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response X402 Verify Payment V1 X402 Verify Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/x402/require-payment": { + "post": { + "tags": [ + "x402" + ], + "summary": "Generate a 402 Payment Required response", + "description": "Generate a 402 Payment Required response for a paid endpoint.", + "operationId": "x402_require_payment_v1_x402_require_payment_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_x402_require_payment_v1_x402_require_payment_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response X402 Require Payment V1 X402 Require Payment Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/x402/batch-payment": { + "post": { + "tags": [ + "x402" + ], + "summary": "Create a batch x402 payment", + "description": "Create a single x402 payment covering multiple operations.\n\nReturns a PaymentRequired body with the combined amount. After paying,\nsubmit the tx to POST /v1/x402/batch-verify.", + "operationId": "x402_batch_payment_v1_x402_batch_payment_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Payload" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response X402 Batch Payment V1 X402 Batch Payment Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/x402/batch-verify": { + "post": { + "tags": [ + "x402" + ], + "summary": "Verify a batch x402 payment", + "description": "Verify the on-chain payment for a batch and mark it paid.", + "operationId": "x402_batch_verify_v1_x402_batch_verify_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Payload" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response X402 Batch Verify V1 X402 Batch Verify Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/proxy/providers": { + "get": { + "tags": [ + "Proxy" + ], + "summary": "List all available proxy providers", + "description": "List free + premium proxy providers with affiliate details.", + "operationId": "list_proxy_providers_v1_proxy_providers_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Proxy Providers V1 Proxy Providers Get" + } + } + } + } + } + } + }, + "/v1/proxy/signup": { + "post": { + "tags": [ + "Proxy" + ], + "summary": "Open affiliate signup link for a provider", + "description": "Get the affiliate signup URL for a proxy provider.\n\nRecords a click for revenue tracking. The user can then sign up at that URL\nand come back to configure credentials.", + "operationId": "proxy_signup_v1_proxy_signup_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Provider" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Proxy Signup V1 Proxy Signup Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/proxy/configure": { + "post": { + "tags": [ + "Proxy" + ], + "summary": "Configure proxy credentials", + "description": "Configure credentials for a premium proxy provider.\n\nAfter signing up via /v1/proxy/signup, the user provides their credentials here.", + "operationId": "proxy_configure_v1_proxy_configure_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_proxy_configure_v1_proxy_configure_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Proxy Configure V1 Proxy Configure Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/proxy/test": { + "get": { + "tags": [ + "Proxy" + ], + "summary": "Test the active proxy", + "description": "Test the currently configured proxy and return its public IP.", + "operationId": "proxy_test_v1_proxy_test_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Proxy Test V1 Proxy Test Get" + } + } + } + } + } + } + }, + "/v1/proxy/status": { + "get": { + "tags": [ + "Proxy" + ], + "summary": "Get current proxy status", + "description": "Get current proxy configuration and available providers.", + "operationId": "proxy_status_v1_proxy_status_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Proxy Status V1 Proxy Status Get" + } + } + } + } + } + } + }, + "/v1/proxy/recommend": { + "post": { + "tags": [ + "Proxy" + ], + "summary": "Get proxy recommendation after a block", + "description": "After a scrape fails with anti-bot detection, get a recommendation\nfor which premium proxy provider to sign up with.", + "operationId": "proxy_recommend_v1_proxy_recommend_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Last Error", + "default": "" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Proxy Recommend V1 Proxy Recommend Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/proxy/clicks": { + "get": { + "tags": [ + "Proxy" + ], + "summary": "Get recent proxy referral clicks", + "description": "Get recent proxy referral clicks for revenue tracking.", + "operationId": "proxy_clicks_v1_proxy_clicks_get", + "parameters": [ + { + "name": "days_back", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 30, + "title": "Days Back" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Proxy Clicks V1 Proxy Clicks Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/tls/impersonate": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Fetch a URL with TLS fingerprint impersonation", + "description": "Fetch a URL while impersonating a real browser's TLS fingerprint.\nBypasses JA3/JA4 fingerprinting that blocks 80%+ of bot traffic.", + "operationId": "tls_impersonate_v1_tls_impersonate_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_tls_impersonate_v1_tls_impersonate_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Tls Impersonate V1 Tls Impersonate Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/tls/rotate": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Try multiple browser fingerprints until one succeeds", + "description": "Try multiple browser fingerprints until one succeeds (anti-fingerprint rotation).", + "operationId": "tls_rotate_v1_tls_rotate_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_tls_rotate_v1_tls_rotate_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Tls Rotate V1 Tls Rotate Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/camoufox/fetch": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Fetch with Camoufox anti-detection Firefox", + "description": "Fetch a URL using Camoufox (Firefox anti-detection browser).\n\nCamoufox patches Firefox at the source level for maximum stealth.\nThis is more effective than Playwright for sites with advanced\nfingerprinting (DataDome, PerimeterX, advanced Cloudflare).", + "operationId": "camoufox_fetch_v1_camoufox_fetch_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_camoufox_fetch_v1_camoufox_fetch_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Camoufox Fetch V1 Camoufox Fetch Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/graphql/discover": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Discover GraphQL endpoints for a site", + "description": "Auto-discover GraphQL endpoints for a website.", + "operationId": "graphql_discover_v1_graphql_discover_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Base Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Graphql Discover V1 Graphql Discover Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/graphql/introspect": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Run GraphQL introspection on an endpoint", + "description": "Run GraphQL introspection query against a discovered endpoint.", + "operationId": "graphql_introspect_v1_graphql_introspect_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Endpoint" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Graphql Introspect V1 Graphql Introspect Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/graphql/query": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Execute a GraphQL query", + "description": "Execute a GraphQL query against a discovered endpoint.", + "operationId": "graphql_query_v1_graphql_query_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_graphql_query_v1_graphql_query_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Graphql Query V1 Graphql Query Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/schema/extract": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Extract Schema.org structured data from a page", + "description": "Extract Schema.org/JSON-LD/Microdata/RDFa structured data from a URL.\nMost modern sites embed structured data \u2014 extract it directly instead of\nscraping HTML. 100x faster and more accurate.", + "operationId": "schema_extract_v1_schema_extract_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Url" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Schema Extract V1 Schema Extract Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/schema/extract-html": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Extract Schema.org structured data from raw HTML", + "description": "Extract Schema.org/JSON-LD/Microdata/RDFa from a raw HTML string.\nUseful when you've already fetched the page and want to extract structured data.", + "operationId": "schema_extract_html_v1_schema_extract_html_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Html" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Schema Extract Html V1 Schema Extract Html Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/ws/scrape": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Scrape data from a WebSocket endpoint", + "description": "Connect to a WebSocket and capture the data stream.\nUseful for SPAs and real-time apps that load data via WebSocket.", + "operationId": "ws_scrape_v1_ws_scrape_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_ws_scrape_v1_ws_scrape_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Ws Scrape V1 Ws Scrape Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/sse/scrape": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Scrape data from a Server-Sent Events endpoint", + "description": "Connect to a Server-Sent Events endpoint and capture events.", + "operationId": "sse_scrape_v1_sse_scrape_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_sse_scrape_v1_sse_scrape_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Sse Scrape V1 Sse Scrape Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/cookies/warm": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Warm cookies for a domain by browsing legitimate pages", + "description": "Pre-age cookies for a domain to bypass anti-bot detection.\nVisits legitimate pages first to build realistic browsing history.", + "operationId": "warm_cookies_v1_cookies_warm_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_warm_cookies_v1_cookies_warm_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Warm Cookies V1 Cookies Warm Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/cookies/sessions": { + "get": { + "tags": [ + "Advanced" + ], + "summary": "List all warmed cookie sessions", + "operationId": "list_cookie_sessions_v1_cookies_sessions_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response List Cookie Sessions V1 Cookies Sessions Get" + } + } + } + } + } + } + }, + "/v1/pdf/extract": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Extract tables and text from a PDF", + "description": "Download a PDF and extract structured tables and text.", + "operationId": "extract_pdf_v1_pdf_extract_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_extract_pdf_v1_pdf_extract_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Extract Pdf V1 Pdf Extract Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/ocr/extract": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Extract text from an image using Tesseract", + "description": "Extract text from an image via URL or base64.", + "operationId": "ocr_extract_v1_ocr_extract_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_ocr_extract_v1_ocr_extract_post" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Ocr Extract V1 Ocr Extract Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/dedup/check": { + "post": { + "tags": [ + "Advanced" + ], + "summary": "Check if content is a near-duplicate using SimHash", + "description": "Check if text is a near-duplicate of recently seen content using SimHash.", + "operationId": "check_duplicate_v1_dedup_check_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_check_duplicate_v1_dedup_check_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Check Duplicate V1 Dedup Check Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/behavior/simulate": { + "get": { + "tags": [ + "Advanced" + ], + "summary": "Generate human-like behavior patterns for testing", + "description": "Generate realistic human behavior patterns (mouse path, scroll, typing, etc.)", + "operationId": "get_behavior_simulation_v1_behavior_simulate_get", + "parameters": [ + { + "name": "action", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "mouse", + "title": "Action" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Get Behavior Simulation V1 Behavior Simulate Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/x402/pay": { + "post": { + "tags": [ + "x402" + ], + "summary": "Process x402 payment and get access token", + "description": "Process an x402 payment and return an access token.\n\nFlow:\n1. User gets 402 from a paid endpoint\n2. User sends USDC to the wallet in the 402 response\n3. User calls this endpoint with the tx_hash\n4. Pry verifies the transaction through the facilitator router\n5. Returns access token (payment_id) to use in X-Payment-Hash header", + "operationId": "x402_pay_v1_x402_pay_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_x402_pay_v1_x402_pay_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response X402 Pay V1 X402 Pay Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/actors/create": { + "post": { + "tags": [ + "Marketplace" + ], + "summary": "Create a new actor", + "description": "Create a new actor in the marketplace.", + "operationId": "create_actor_v1_actors_create_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_create_actor_v1_actors_create_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Create Actor V1 Actors Create Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/actors": { + "get": { + "tags": [ + "Marketplace" + ], + "summary": "List actors in the marketplace", + "description": "List actors. Filter by visibility (public/private) and tag.", + "operationId": "list_actors_v1_actors_get", + "parameters": [ + { + "name": "visibility", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "", + "title": "Visibility" + } + }, + { + "name": "tag", + "in": "query", + "required": false, + "schema": { + "type": "string", + "default": "", + "title": "Tag" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response List Actors V1 Actors Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/actors/{actor_id}/run": { + "post": { + "tags": [ + "Marketplace" + ], + "summary": "Run an actor", + "description": "Run an actor with the provided inputs.", + "operationId": "run_actor_v1_actors__actor_id__run_post", + "parameters": [ + { + "name": "actor_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Actor Id" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "object", + "additionalProperties": true + }, + { + "type": "null" } + ], + "title": "Inputs" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true, + "title": "Response Run Actor V1 Actors Actor Id Run Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/webhooks/test": { + "post": { + "tags": [ + "Webhooks" + ], + "summary": "Test webhook delivery", + "description": "Test webhook delivery to a URL with HMAC signing.", + "operationId": "test_webhook_v1_webhooks_test_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_test_webhook_v1_webhooks_test_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Test Webhook V1 Webhooks Test Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/v1/webhooks/dead-letter": { + "get": { + "tags": [ + "Webhooks" + ], + "summary": "Get failed webhook deliveries", + "description": "Get the dead letter queue of failed webhook deliveries.", + "operationId": "get_dead_letter_v1_webhooks_dead_letter_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Response Get Dead Letter V1 Webhooks Dead Letter Get" } } } @@ -289,5 +7859,2501 @@ } } } + }, + "components": { + "schemas": { + "AutomateRequest": { + "properties": { + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Session Id" + }, + "steps": { + "items": { + "$ref": "#/components/schemas/AutomateStep" + }, + "type": "array", + "title": "Steps" + }, + "headless": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Headless", + "default": true + }, + "viewport": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Viewport" + } + }, + "type": "object", + "required": [ + "steps" + ], + "title": "AutomateRequest" + }, + "AutomateStep": { + "properties": { + "action": { + "type": "string", + "title": "Action" + }, + "selector": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Selector" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Value" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "timeout": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Timeout", + "default": 30000 + }, + "wait_until": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Wait Until", + "default": "networkidle" + } + }, + "type": "object", + "required": [ + "action" + ], + "title": "AutomateStep" + }, + "BatchFileRequest": { + "properties": { + "filepath": { + "type": "string", + "title": "Filepath" + }, + "template": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Template" + }, + "timeout": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Timeout", + "default": 30 + }, + "max_urls": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Max Urls", + "default": 1000 + } + }, + "type": "object", + "required": [ + "filepath", + "template" + ], + "title": "BatchFileRequest" + }, + "Body_adaptive_crawl_v1_crawl_adaptive_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "query": { + "type": "string", + "title": "Query", + "default": "" + }, + "max_pages": { + "type": "integer", + "title": "Max Pages", + "default": 50 + }, + "max_depth": { + "type": "integer", + "title": "Max Depth", + "default": 3 + }, + "relevance_threshold": { + "type": "number", + "title": "Relevance Threshold", + "default": 0.3 + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_adaptive_crawl_v1_crawl_adaptive_post" + }, + "Body_analyze_field_v1_intel_analyze_post": { + "properties": { + "competitor_id": { + "type": "string", + "title": "Competitor Id" + }, + "field": { + "type": "string", + "title": "Field", + "default": "price" + } + }, + "type": "object", + "required": [ + "competitor_id" + ], + "title": "Body_analyze_field_v1_intel_analyze_post" + }, + "Body_camoufox_fetch_v1_camoufox_fetch_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "profile": { + "type": "string", + "title": "Profile", + "default": "chrome_windows" + }, + "wait_selector": { + "type": "string", + "title": "Wait Selector", + "default": "" + }, + "proxy": { + "type": "string", + "title": "Proxy", + "default": "" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_camoufox_fetch_v1_camoufox_fetch_post" + }, + "Body_check_duplicate_v1_dedup_check_post": { + "properties": { + "text": { + "type": "string", + "title": "Text" + }, + "threshold": { + "type": "number", + "title": "Threshold", + "default": 0.85 + } + }, + "type": "object", + "required": [ + "text" + ], + "title": "Body_check_duplicate_v1_dedup_check_post" + }, + "Body_clean_content_v1_training_clean_post": { + "properties": { + "text": { + "type": "string", + "title": "Text" + }, + "strip_names": { + "type": "boolean", + "title": "Strip Names", + "default": false + }, + "strip_copyright": { + "type": "boolean", + "title": "Strip Copyright", + "default": true + } + }, + "type": "object", + "required": [ + "text" + ], + "title": "Body_clean_content_v1_training_clean_post" + }, + "Body_compare_v1_compare_post": { + "properties": { + "url1": { + "type": "string", + "title": "Url1" + }, + "url2": { + "type": "string", + "title": "Url2" + } + }, + "type": "object", + "required": [ + "url1", + "url2" + ], + "title": "Body_compare_v1_compare_post" + }, + "Body_create_actor_v1_actors_create_post": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "template_id": { + "type": "string", + "title": "Template Id", + "default": "" + }, + "code": { + "type": "string", + "title": "Code", + "default": "" + }, + "price_per_run": { + "type": "number", + "title": "Price Per Run", + "default": 0.0 + }, + "visibility": { + "type": "string", + "title": "Visibility", + "default": "private" + }, + "schedule_cron": { + "type": "string", + "title": "Schedule Cron", + "default": "" + }, + "tags": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tags" + } + }, + "type": "object", + "required": [ + "name", + "description" + ], + "title": "Body_create_actor_v1_actors_create_post" + }, + "Body_create_agency_endpoint_v1_agency_create_post": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "owner_email": { + "type": "string", + "title": "Owner Email" + }, + "custom_domain": { + "type": "string", + "title": "Custom Domain", + "default": "" + }, + "brand_color": { + "type": "string", + "title": "Brand Color", + "default": "#f59e0b" + }, + "logo_url": { + "type": "string", + "title": "Logo Url", + "default": "" + } + }, + "type": "object", + "required": [ + "name", + "owner_email" + ], + "title": "Body_create_agency_endpoint_v1_agency_create_post" + }, + "Body_create_client_endpoint_v1_agency__agency_id__clients_post": { + "properties": { + "client_name": { + "type": "string", + "title": "Client Name" + }, + "client_email": { + "type": "string", + "title": "Client Email" + }, + "monthly_quota": { + "type": "integer", + "title": "Monthly Quota", + "default": 10000 + } + }, + "type": "object", + "required": [ + "client_name", + "client_email" + ], + "title": "Body_create_client_endpoint_v1_agency__agency_id__clients_post" + }, + "Body_create_monitor_endpoint_v1_monitor_post": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "url": { + "type": "string", + "title": "Url" + }, + "schedule_cron": { + "type": "string", + "title": "Schedule Cron", + "default": "0 */6 * * *" + }, + "goal": { + "type": "string", + "title": "Goal", + "default": "" + }, + "webhook": { + "type": "string", + "title": "Webhook", + "default": "" + }, + "use_llm": { + "type": "boolean", + "title": "Use Llm", + "default": false + } + }, + "type": "object", + "required": [ + "name", + "url" + ], + "title": "Body_create_monitor_endpoint_v1_monitor_post" + }, + "Body_destroy_session_v1_session_destroy_post": { + "properties": { + "session_id": { + "type": "string", + "title": "Session Id" + }, + "save_state": { + "type": "boolean", + "title": "Save State", + "default": false + } + }, + "type": "object", + "required": [ + "session_id" + ], + "title": "Body_destroy_session_v1_session_destroy_post" + }, + "Body_detect_lazy_content_v1_capture_lazy_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "auto_scroll": { + "type": "boolean", + "title": "Auto Scroll", + "default": true + }, + "max_scrolls": { + "type": "integer", + "title": "Max Scrolls", + "default": 5 + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_detect_lazy_content_v1_capture_lazy_post" + }, + "Body_diff_v1_diff_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "content": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Content" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_diff_v1_diff_post" + }, + "Body_enrich_data_v1_enrich_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "include_tech_stack": { + "type": "boolean", + "title": "Include Tech Stack", + "default": true + }, + "include_social": { + "type": "boolean", + "title": "Include Social", + "default": true + }, + "include_company": { + "type": "boolean", + "title": "Include Company", + "default": true + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_enrich_data_v1_enrich_post" + }, + "Body_execute_template_endpoint_v1_templates_execute_post": { + "properties": { + "template_id": { + "type": "string", + "title": "Template Id" + }, + "url": { + "type": "string", + "title": "Url" + } + }, + "type": "object", + "required": [ + "template_id", + "url" + ], + "title": "Body_execute_template_endpoint_v1_templates_execute_post" + }, + "Body_export_dataset_v1_training_export_post": { + "properties": { + "records": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Records" + }, + "output_format": { + "type": "string", + "title": "Output Format", + "default": "jsonl" + }, + "clean_room": { + "type": "boolean", + "title": "Clean Room", + "default": true + }, + "strip_names": { + "type": "boolean", + "title": "Strip Names", + "default": false + } + }, + "type": "object", + "required": [ + "records" + ], + "title": "Body_export_dataset_v1_training_export_post" + }, + "Body_extract_css_v1_extract_css_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "schema": { + "additionalProperties": true, + "type": "object", + "title": "Schema" + }, + "bypass_cloudflare": { + "type": "boolean", + "title": "Bypass Cloudflare", + "default": true + } + }, + "type": "object", + "required": [ + "url", + "schema" + ], + "title": "Body_extract_css_v1_extract_css_post" + }, + "Body_extract_llm_v1_extract_llm_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "instruction": { + "type": "string", + "title": "Instruction", + "default": "Extract all key information from this content." + }, + "schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "chunk_strategy": { + "type": "string", + "title": "Chunk Strategy", + "default": "topic" + }, + "query": { + "type": "string", + "title": "Query", + "default": "" + }, + "top_k": { + "type": "integer", + "title": "Top K", + "default": 5 + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_extract_llm_v1_extract_llm_post" + }, + "Body_extract_pdf_v1_pdf_extract_post": { + "properties": { + "pdf_url": { + "type": "string", + "title": "Pdf Url" + }, + "method": { + "type": "string", + "title": "Method", + "default": "pdfplumber" + } + }, + "type": "object", + "required": [ + "pdf_url" + ], + "title": "Body_extract_pdf_v1_pdf_extract_post" + }, + "Body_extract_shadow_dom_v1_shadow_dom_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "flatten": { + "type": "boolean", + "title": "Flatten", + "default": true + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_extract_shadow_dom_v1_shadow_dom_post" + }, + "Body_extract_with_review_v1_extract_with_review_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "expected_types": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Expected Types" + }, + "slack_webhook": { + "type": "string", + "title": "Slack Webhook", + "default": "" + }, + "auto_approve_threshold": { + "type": "number", + "title": "Auto Approve Threshold", + "default": 0.8 + }, + "auto_reject_threshold": { + "type": "number", + "title": "Auto Reject Threshold", + "default": 0.2 + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_extract_with_review_v1_extract_with_review_post" + }, + "Body_fetch_gmail_v1_email_gmail_post": { + "properties": { + "access_token": { + "type": "string", + "title": "Access Token" + }, + "max_results": { + "type": "integer", + "title": "Max Results", + "default": 20 + }, + "query": { + "type": "string", + "title": "Query", + "default": "" + }, + "since_days": { + "type": "integer", + "title": "Since Days", + "default": 7 + } + }, + "type": "object", + "required": [ + "access_token" + ], + "title": "Body_fetch_gmail_v1_email_gmail_post" + }, + "Body_fetch_outlook_v1_email_outlook_post": { + "properties": { + "access_token": { + "type": "string", + "title": "Access Token" + }, + "max_results": { + "type": "integer", + "title": "Max Results", + "default": 20 + }, + "query": { + "type": "string", + "title": "Query", + "default": "" + }, + "since_days": { + "type": "integer", + "title": "Since Days", + "default": 7 + } + }, + "type": "object", + "required": [ + "access_token" + ], + "title": "Body_fetch_outlook_v1_email_outlook_post" + }, + "Body_freshness_check_v1_freshness_check_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "content": { + "type": "string", + "title": "Content", + "default": "" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_freshness_check_v1_freshness_check_post" + }, + "Body_freshness_frequency_v1_freshness_frequency_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "base_interval": { + "type": "integer", + "title": "Base Interval", + "default": 60 + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_freshness_frequency_v1_freshness_frequency_post" + }, + "Body_generate_markdown_v1_markdown_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "mode": { + "type": "string", + "title": "Mode", + "default": "raw" + }, + "query": { + "type": "string", + "title": "Query", + "default": "" + }, + "threshold": { + "type": "number", + "title": "Threshold", + "default": 0.3 + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_generate_markdown_v1_markdown_post" + }, + "Body_generate_report_endpoint_v1_reports_generate_post": { + "properties": { + "report_type": { + "type": "string", + "title": "Report Type" + }, + "data": { + "additionalProperties": true, + "type": "object", + "title": "Data" + }, + "branding": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Branding" + }, + "output_format": { + "type": "string", + "title": "Output Format", + "default": "html" + } + }, + "type": "object", + "required": [ + "report_type", + "data" + ], + "title": "Body_generate_report_endpoint_v1_reports_generate_post" + }, + "Body_generate_report_v1_intel_report_post": { + "properties": { + "competitors": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Competitors" + }, + "days_back": { + "type": "integer", + "title": "Days Back", + "default": 7 + } + }, + "type": "object", + "required": [ + "competitors" + ], + "title": "Body_generate_report_v1_intel_report_post" + }, + "Body_generate_sso_v1_auth_sso_post": { + "properties": { + "provider": { + "type": "string", + "title": "Provider", + "default": "okta" + }, + "username": { + "type": "string", + "title": "Username" + }, + "password": { + "type": "string", + "title": "Password" + }, + "target_url": { + "type": "string", + "title": "Target Url" + }, + "tenant": { + "type": "string", + "title": "Tenant", + "default": "" + } + }, + "type": "object", + "required": [ + "username", + "password", + "target_url" + ], + "title": "Body_generate_sso_v1_auth_sso_post" + }, + "Body_graphql_query_v1_graphql_query_post": { + "properties": { + "endpoint": { + "type": "string", + "title": "Endpoint" + }, + "query": { + "type": "string", + "title": "Query" + }, + "variables": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Variables" + } + }, + "type": "object", + "required": [ + "endpoint", + "query" + ], + "title": "Body_graphql_query_v1_graphql_query_post" + }, + "Body_ocr_extract_v1_ocr_extract_post": { + "properties": { + "image_url": { + "type": "string", + "title": "Image Url", + "default": "" + }, + "image_base64": { + "type": "string", + "title": "Image Base64", + "default": "" + } + }, + "type": "object", + "title": "Body_ocr_extract_v1_ocr_extract_post" + }, + "Body_proxy_configure_v1_proxy_configure_post": { + "properties": { + "provider": { + "type": "string", + "title": "Provider" + }, + "username": { + "type": "string", + "title": "Username", + "default": "" + }, + "password": { + "type": "string", + "title": "Password", + "default": "" + }, + "api_key": { + "type": "string", + "title": "Api Key", + "default": "" + }, + "proxy_url": { + "type": "string", + "title": "Proxy Url", + "default": "" + } + }, + "type": "object", + "required": [ + "provider" + ], + "title": "Body_proxy_configure_v1_proxy_configure_post" + }, + "Body_quality_check_v1_quality_check_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "data": { + "additionalProperties": true, + "type": "object", + "title": "Data" + }, + "schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "expected_types": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Expected Types" + } + }, + "type": "object", + "required": [ + "url", + "data" + ], + "title": "Body_quality_check_v1_quality_check_post" + }, + "Body_reconcile_endpoint_v1_reconcile_post": { + "properties": { + "records": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Records" + }, + "vertical": { + "type": "string", + "title": "Vertical", + "default": "product" + }, + "threshold": { + "type": "number", + "title": "Threshold", + "default": 0.7 + } + }, + "type": "object", + "required": [ + "records" + ], + "title": "Body_reconcile_endpoint_v1_reconcile_post" + }, + "Body_record_consent_endpoint_v1_gdpr_consent_post": { + "properties": { + "user_id": { + "type": "string", + "title": "User Id" + }, + "purpose": { + "type": "string", + "title": "Purpose", + "default": "data_collection" + }, + "consent_given": { + "type": "boolean", + "title": "Consent Given", + "default": true + }, + "ip_address": { + "type": "string", + "title": "Ip Address", + "default": "" + }, + "user_agent": { + "type": "string", + "title": "User Agent", + "default": "" + } + }, + "type": "object", + "required": [ + "user_id" + ], + "title": "Body_record_consent_endpoint_v1_gdpr_consent_post" + }, + "Body_record_intel_snapshot_v1_intel_snapshot_post": { + "properties": { + "competitor_id": { + "type": "string", + "title": "Competitor Id" + }, + "competitor_name": { + "type": "string", + "title": "Competitor Name" + }, + "url": { + "type": "string", + "title": "Url" + }, + "fields": { + "additionalProperties": true, + "type": "object", + "title": "Fields" + } + }, + "type": "object", + "required": [ + "competitor_id", + "competitor_name", + "url", + "fields" + ], + "title": "Body_record_intel_snapshot_v1_intel_snapshot_post" + }, + "Body_record_referral_click_v1_referrals_click_post": { + "properties": { + "provider_tag": { + "type": "string", + "title": "Provider Tag" + }, + "source": { + "type": "string", + "title": "Source", + "default": "api" + }, + "user_id": { + "type": "string", + "title": "User Id", + "default": "" + } + }, + "type": "object", + "required": [ + "provider_tag" + ], + "title": "Body_record_referral_click_v1_referrals_click_post" + }, + "Body_record_referral_conversion_v1_referrals_convert_post": { + "properties": { + "click_id": { + "type": "string", + "title": "Click Id" + }, + "revenue_usd": { + "type": "number", + "title": "Revenue Usd", + "default": 0.0 + }, + "notes": { + "type": "string", + "title": "Notes", + "default": "" + } + }, + "type": "object", + "required": [ + "click_id" + ], + "title": "Body_record_referral_conversion_v1_referrals_convert_post" + }, + "Body_record_step_v1_record_step_post": { + "properties": { + "session_id": { + "type": "string", + "title": "Session Id" + }, + "action": { + "type": "string", + "title": "Action" + } + }, + "type": "object", + "required": [ + "session_id", + "action" + ], + "title": "Body_record_step_v1_record_step_post" + }, + "Body_record_usage_endpoint_v1_costing_record_post": { + "properties": { + "operation": { + "type": "string", + "title": "Operation" + }, + "quantity": { + "type": "number", + "title": "Quantity", + "default": 1.0 + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + } + }, + "type": "object", + "required": [ + "operation" + ], + "title": "Body_record_usage_endpoint_v1_costing_record_post" + }, + "Body_register_hook_v1_pipeline_hook_post": { + "properties": { + "hook_point": { + "type": "string", + "title": "Hook Point" + }, + "javascript_fn": { + "type": "string", + "title": "Javascript Fn" + } + }, + "type": "object", + "required": [ + "hook_point", + "javascript_fn" + ], + "title": "Body_register_hook_v1_pipeline_hook_post" + }, + "Body_request_deletion_endpoint_v1_gdpr_deletion_request_post": { + "properties": { + "user_id": { + "type": "string", + "title": "User Id" + }, + "reason": { + "type": "string", + "title": "Reason", + "default": "user_request" + } + }, + "type": "object", + "required": [ + "user_id" + ], + "title": "Body_request_deletion_endpoint_v1_gdpr_deletion_request_post" + }, + "Body_review_approve_v1_review__review_id__approve_post": { + "properties": { + "reviewer": { + "type": "string", + "title": "Reviewer", + "default": "api" + }, + "notes": { + "type": "string", + "title": "Notes", + "default": "" + } + }, + "type": "object", + "title": "Body_review_approve_v1_review__review_id__approve_post" + }, + "Body_review_reject_v1_review__review_id__reject_post": { + "properties": { + "reviewer": { + "type": "string", + "title": "Reviewer", + "default": "api" + }, + "notes": { + "type": "string", + "title": "Notes", + "default": "" + } + }, + "type": "object", + "title": "Body_review_reject_v1_review__review_id__reject_post" + }, + "Body_review_submit_v1_review_submit_post": { + "properties": { + "data": { + "additionalProperties": true, + "type": "object", + "title": "Data" + }, + "url": { + "type": "string", + "title": "Url" + }, + "schema_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema Name" + }, + "confidence_score": { + "type": "number", + "title": "Confidence Score", + "default": 0.0 + }, + "flagged_fields": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Flagged Fields" + } + }, + "type": "object", + "required": [ + "data", + "url" + ], + "title": "Body_review_submit_v1_review_submit_post" + }, + "Body_revoke_consent_endpoint_v1_gdpr_consent_revoke_post": { + "properties": { + "user_id": { + "type": "string", + "title": "User Id" + }, + "purpose": { + "type": "string", + "title": "Purpose", + "default": "data_collection" + } + }, + "type": "object", + "required": [ + "user_id" + ], + "title": "Body_revoke_consent_endpoint_v1_gdpr_consent_revoke_post" + }, + "Body_run_pipeline_endpoint_v1_pipelines_run_post": { + "properties": { + "pipeline": { + "additionalProperties": true, + "type": "object", + "title": "Pipeline" + }, + "context": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Context" + } + }, + "type": "object", + "required": [ + "pipeline" + ], + "title": "Body_run_pipeline_endpoint_v1_pipelines_run_post" + }, + "Body_run_pipeline_test_v1_pipeline_run_post": { + "properties": { + "hook_point": { + "type": "string", + "title": "Hook Point" + }, + "url": { + "type": "string", + "title": "Url", + "default": "" + }, + "html": { + "type": "string", + "title": "Html", + "default": "" + } + }, + "type": "object", + "required": [ + "hook_point" + ], + "title": "Body_run_pipeline_test_v1_pipeline_run_post" + }, + "Body_scrape_and_send_v1_scrape_and_send_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "destination": { + "type": "string", + "title": "Destination" + }, + "destination_config": { + "additionalProperties": true, + "type": "object", + "title": "Destination Config" + } + }, + "type": "object", + "required": [ + "url", + "destination", + "destination_config" + ], + "title": "Body_scrape_and_send_v1_scrape_and_send_post" + }, + "Body_scrape_email_v1_email_scrape_post": { + "properties": { + "subject": { + "type": "string", + "title": "Subject", + "default": "" + }, + "body": { + "type": "string", + "title": "Body", + "default": "" + }, + "sender": { + "type": "string", + "title": "Sender", + "default": "" + } + }, + "type": "object", + "title": "Body_scrape_email_v1_email_scrape_post" + }, + "Body_screenshot_v1_screenshot_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_screenshot_v1_screenshot_post" + }, + "Body_send_alert_endpoint_v1_alert_send_post": { + "properties": { + "channel": { + "type": "string", + "title": "Channel" + }, + "title": { + "type": "string", + "title": "Title", + "default": "Pry Alert" + }, + "message": { + "type": "string", + "title": "Message" + }, + "config": { + "additionalProperties": true, + "type": "object", + "title": "Config" + }, + "severity": { + "type": "string", + "title": "Severity", + "default": "info" + } + }, + "type": "object", + "required": [ + "channel", + "message", + "config" + ], + "title": "Body_send_alert_endpoint_v1_alert_send_post" + }, + "Body_send_to_destination_v1_destination_send_post": { + "properties": { + "destination": { + "type": "string", + "title": "Destination" + }, + "data": { + "additionalProperties": true, + "type": "object", + "title": "Data" + }, + "config": { + "additionalProperties": true, + "type": "object", + "title": "Config" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + } + }, + "type": "object", + "required": [ + "destination", + "data", + "config" + ], + "title": "Body_send_to_destination_v1_destination_send_post" + }, + "Body_seo_keywords_v1_seo_keywords_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "keywords": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Keywords" + } + }, + "type": "object", + "required": [ + "url", + "keywords" + ], + "title": "Body_seo_keywords_v1_seo_keywords_post" + }, + "Body_solve_captcha_endpoint_v1_auth_captcha_post": { + "properties": { + "image_base64": { + "type": "string", + "title": "Image Base64", + "default": "" + }, + "site_key": { + "type": "string", + "title": "Site Key", + "default": "" + }, + "page_url": { + "type": "string", + "title": "Page Url", + "default": "" + }, + "service": { + "type": "string", + "title": "Service", + "default": "capsolver" + }, + "api_key": { + "type": "string", + "title": "Api Key", + "default": "" + } + }, + "type": "object", + "title": "Body_solve_captcha_endpoint_v1_auth_captcha_post" + }, + "Body_sse_scrape_v1_sse_scrape_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "max_events": { + "type": "integer", + "title": "Max Events", + "default": 50 + }, + "timeout": { + "type": "integer", + "title": "Timeout", + "default": 30 + }, + "event_filter": { + "type": "string", + "title": "Event Filter", + "default": "" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_sse_scrape_v1_sse_scrape_post" + }, + "Body_store_credentials_v1_auth_credentials_post": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "credential_type": { + "type": "string", + "title": "Credential Type", + "default": "password" + }, + "credentials": { + "additionalProperties": true, + "type": "object", + "title": "Credentials" + }, + "target_url": { + "type": "string", + "title": "Target Url", + "default": "" + } + }, + "type": "object", + "required": [ + "name", + "credentials" + ], + "title": "Body_store_credentials_v1_auth_credentials_post" + }, + "Body_structure_check_template_v1_structure_check_template_post": { + "properties": { + "template_id": { + "type": "string", + "title": "Template Id" + }, + "url": { + "type": "string", + "title": "Url", + "default": "" + } + }, + "type": "object", + "required": [ + "template_id" + ], + "title": "Body_structure_check_template_v1_structure_check_template_post" + }, + "Body_structure_check_v1_structure_check_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "selectors": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Selectors" + } + }, + "type": "object", + "required": [ + "url", + "selectors" + ], + "title": "Body_structure_check_v1_structure_check_post" + }, + "Body_structure_monitor_v1_structure_monitor_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "selectors": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Selectors" + }, + "template_id": { + "type": "string", + "title": "Template Id", + "default": "" + } + }, + "type": "object", + "required": [ + "url", + "selectors" + ], + "title": "Body_structure_monitor_v1_structure_monitor_post" + }, + "Body_sync_commerce_v1_commerce_sync_post": { + "properties": { + "platform": { + "type": "string", + "title": "Platform" + }, + "products": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Products" + }, + "credentials": { + "additionalProperties": true, + "type": "object", + "title": "Credentials" + } + }, + "type": "object", + "required": [ + "platform", + "products", + "credentials" + ], + "title": "Body_sync_commerce_v1_commerce_sync_post" + }, + "Body_sync_crm_v1_crm_sync_post": { + "properties": { + "platform": { + "type": "string", + "title": "Platform" + }, + "object_type": { + "type": "string", + "title": "Object Type", + "default": "lead" + }, + "objects": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array", + "title": "Objects" + }, + "credentials": { + "additionalProperties": true, + "type": "object", + "title": "Credentials" + } + }, + "type": "object", + "required": [ + "platform", + "objects", + "credentials" + ], + "title": "Body_sync_crm_v1_crm_sync_post" + }, + "Body_test_webhook_v1_webhooks_test_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "payload": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Payload" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_test_webhook_v1_webhooks_test_post" + }, + "Body_tls_impersonate_v1_tls_impersonate_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "impersonate": { + "type": "string", + "title": "Impersonate", + "default": "chrome131" + }, + "proxy": { + "type": "string", + "title": "Proxy", + "default": "" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_tls_impersonate_v1_tls_impersonate_post" + }, + "Body_tls_rotate_v1_tls_rotate_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "proxy": { + "type": "string", + "title": "Proxy", + "default": "" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_tls_rotate_v1_tls_rotate_post" + }, + "Body_ultimate_scrape_v1_ultimate_scrape_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_ultimate_scrape_v1_ultimate_scrape_post" + }, + "Body_update_branding_v1_agency__agency_id__branding_put": { + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "brand_color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Brand Color" + }, + "logo_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Logo Url" + }, + "custom_domain": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Custom Domain" + } + }, + "type": "object", + "title": "Body_update_branding_v1_agency__agency_id__branding_put" + }, + "Body_vision_v1_vision_post": { + "properties": { + "question": { + "type": "string", + "title": "Question", + "default": "Describe what is visible in this image." + }, + "image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Image" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "file_path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "File Path" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Model" + }, + "max_tokens": { + "type": "integer", + "title": "Max Tokens", + "default": 800 + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Session Id" + }, + "no_fallback": { + "type": "boolean", + "title": "No Fallback", + "default": false + } + }, + "type": "object", + "title": "Body_vision_v1_vision_post" + }, + "Body_warm_cookies_v1_cookies_warm_post": { + "properties": { + "target_domain": { + "type": "string", + "title": "Target Domain" + }, + "pages_to_visit": { + "type": "integer", + "title": "Pages To Visit", + "default": 3 + } + }, + "type": "object", + "required": [ + "target_domain" + ], + "title": "Body_warm_cookies_v1_cookies_warm_post" + }, + "Body_watch_page_v1_watch_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "webhook": { + "type": "string", + "title": "Webhook" + } + }, + "type": "object", + "required": [ + "url", + "webhook" + ], + "title": "Body_watch_page_v1_watch_post" + }, + "Body_ws_scrape_v1_ws_scrape_post": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "max_messages": { + "type": "integer", + "title": "Max Messages", + "default": 100 + }, + "timeout": { + "type": "integer", + "title": "Timeout", + "default": 30 + }, + "message_filter": { + "type": "string", + "title": "Message Filter", + "default": "" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "Body_ws_scrape_v1_ws_scrape_post" + }, + "Body_x402_pay_v1_x402_pay_post": { + "properties": { + "operation": { + "type": "string", + "title": "Operation" + }, + "tx_hash": { + "type": "string", + "title": "Tx Hash" + }, + "payer_wallet": { + "type": "string", + "title": "Payer Wallet" + }, + "network": { + "type": "string", + "title": "Network", + "default": "" + }, + "asset": { + "type": "string", + "title": "Asset", + "default": "" + }, + "amount_usd": { + "type": "number", + "title": "Amount Usd", + "default": 0.0 + } + }, + "type": "object", + "required": [ + "operation", + "tx_hash", + "payer_wallet" + ], + "title": "Body_x402_pay_v1_x402_pay_post" + }, + "Body_x402_payment_request_v1_x402_payment_post": { + "properties": { + "operation": { + "type": "string", + "title": "Operation" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + } + }, + "type": "object", + "required": [ + "operation" + ], + "title": "Body_x402_payment_request_v1_x402_payment_post" + }, + "Body_x402_require_payment_v1_x402_require_payment_post": { + "properties": { + "operation": { + "type": "string", + "title": "Operation" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + } + }, + "type": "object", + "required": [ + "operation" + ], + "title": "Body_x402_require_payment_v1_x402_require_payment_post" + }, + "Body_x402_verify_payment_v1_x402_verify_post": { + "properties": { + "payment_id": { + "type": "string", + "title": "Payment Id" + }, + "tx_hash": { + "type": "string", + "title": "Tx Hash" + }, + "network": { + "type": "string", + "title": "Network", + "default": "" + }, + "asset": { + "type": "string", + "title": "Asset", + "default": "" + }, + "amount_usd": { + "type": "number", + "title": "Amount Usd", + "default": 0.0 + } + }, + "type": "object", + "required": [ + "payment_id", + "tx_hash" + ], + "title": "Body_x402_verify_payment_v1_x402_verify_post" + }, + "CrawlRequest": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "maxPages": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Maxpages", + "default": 10 + }, + "maxDepth": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Maxdepth", + "default": 2 + }, + "scrapeOptions": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Scrapeoptions" + }, + "webhook": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Webhook" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "CrawlRequest" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "MapRequest": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "search": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search" + }, + "ignoreSitemap": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Ignoresitemap", + "default": true + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Limit", + "default": 50 + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "MapRequest" + }, + "ParseRequest": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "timeout": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Timeout", + "default": 60 + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "ParseRequest" + }, + "ScrapeRequest": { + "properties": { + "url": { + "type": "string", + "title": "Url" + }, + "formats": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Formats" + }, + "onlyMainContent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Onlymaincontent", + "default": true + }, + "timeout": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Timeout", + "default": 30 + }, + "bypassCloudflare": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Bypasscloudflare", + "default": true + }, + "jsRender": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Jsrender", + "default": false + }, + "jsonSchema": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Jsonschema" + } + }, + "type": "object", + "required": [ + "url" + ], + "title": "ScrapeRequest" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + } + } } }