{
    "schemes": ["https"],
    "swagger": "2.0",
    "info": {
        "description": "WebCrawler API is a powerful web crawling and data extraction service designed for developers who need to transform websites into LLM-ready structured data and RAG (Retrieval-Augmented Generation) pipelines. Extract clean markdown, HTML, or structured content from any website with enterprise-grade reliability. Features include intelligent content extraction, automatic link discovery, customizable crawling patterns, webhook notifications, and seamless integration with AI applications. Perfect for building knowledge bases, training datasets, content aggregation, competitive analysis, and powering LLM applications with fresh web data.",
        "title": "WebCrawler API",
        "termsOfService": "https://webcrawlerapi.com/tos",
        "contact": {
            "name": "API Support",
            "url": "https://webcrawlerapi.com/support",
            "email": "support@webcrawlerapi.com"
        },
        "license": {
            "name": "Commercial",
            "url": "https://webcrawlerapi.com/tos"
        },
        "version": "2.0"
    },
    "host": "api.webcrawlerapi.com",
    "basePath": "/",
    "paths": {
        "/markdown": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "GET counterpart of POST /markdown, taking the URL as a query parameter. Scrapes the given URL synchronously and returns LLM-cleaned markdown containing only the page's main content.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Markdown"
                ],
                "summary": "Extract cleaned article markdown from a URL (GET)",
                "parameters": [
                    {
                        "type": "string",
                        "example": "https://example.com",
                        "description": "The URL of the webpage to extract the article from",
                        "name": "url",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Cleaned markdown extracted successfully",
                        "schema": {
                            "$ref": "#/definitions/zeus.PostArticleResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    },
                    "402": {
                        "description": "Insufficient balance",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    },
                    "403": {
                        "description": "Organization suspended or URL blocked",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    },
                    "429": {
                        "description": "Rate limit exceeded",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Scrapes the given URL synchronously and returns LLM-cleaned markdown containing only the page's main content (article body, product details, docs content, etc). Navigation, ads, footers, and other boilerplate are stripped.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Markdown"
                ],
                "summary": "Extract cleaned article markdown from a URL",
                "parameters": [
                    {
                        "description": "URL to extract",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/zeus.PostArticleRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Cleaned markdown extracted successfully",
                        "schema": {
                            "$ref": "#/definitions/zeus.PostArticleResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    },
                    "402": {
                        "description": "Insufficient balance",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    },
                    "403": {
                        "description": "Organization suspended or URL blocked",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    },
                    "429": {
                        "description": "Rate limit exceeded",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "$ref": "#/definitions/zeus.ArticleResponseError"
                        }
                    }
                }
            }
        },
        "/ping": {
            "get": {
                "description": "Simple health check endpoint to verify the API is running and operational",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Status"
                ],
                "summary": "Ping API",
                "responses": {
                    "200": {
                        "description": "API is operational",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v1/agent": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Runs an agent and stores run record in database",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Agent"
                ],
                "summary": "Run an agent",
                "parameters": [
                    {
                        "description": "Agent request parameters",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/WagentRunRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Agent run",
                        "schema": {
                            "$ref": "#/definitions/AgentRunView"
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v1/agent/job/{id}": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Returns agent run info from database",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Agent"
                ],
                "summary": "Get agent job info",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job info",
                        "schema": {
                            "$ref": "#/definitions/AgentRunView"
                        }
                    },
                    "404": {
                        "description": "Job not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v1/agent/jobs": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Lists agent runs from database",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Agent"
                ],
                "summary": "List agent jobs",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Limit number of results",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Offset for pagination",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Jobs list",
                        "schema": {
                            "$ref": "#/definitions/AgentRunList"
                        }
                    }
                }
            }
        },
        "/v1/auth": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Verifies that the API key is valid and returns organization email",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Status"
                ],
                "summary": "Check authentication",
                "responses": {
                    "200": {
                        "description": "Authentication successful",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v1/crawl": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Creates a new web crawling job with specified parameters. This endpoint crawls websites and extracts content based on configuration.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Jobs"
                ],
                "summary": "Create a new crawl job",
                "parameters": [
                    {
                        "description": "Job parameters",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/PostJobRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job created successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "402": {
                        "description": "Insufficient balance",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Organization suspended or URL blocked",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v1/job/{id}": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Retrieves the details and status of a specific job including all items",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Jobs"
                ],
                "summary": "Get job details",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job details",
                        "schema": {
                            "$ref": "#/definitions/CrawlJobView"
                        }
                    },
                    "401": {
                        "description": "Access denied",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Job not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v1/job/{id}/cancel": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Cancels a running or pending job",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Jobs"
                ],
                "summary": "Cancel a job",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job cancelled successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Access denied",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Job not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v1/job/{id}/markdown": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Downloads all successful markdown job items, combines them with separators, caches and serves as single file",
                "produces": [
                    "text/markdown"
                ],
                "tags": [
                    "Jobs"
                ],
                "summary": "Get combined markdown for a job",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Combined markdown content",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Job is not a markdown type",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Access denied",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Job not found or no markdown content",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "422": {
                        "description": "Job not finished",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v1/job/{id}/urls": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Retrieves all URLs discovered by a crawl job with path clustering information",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Jobs"
                ],
                "summary": "Get job URLs",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "URLs and clusters",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "401": {
                        "description": "Access denied",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Job not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v1/job/{id}/webhook/resend": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Resends the webhook notification for a completed job",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Jobs"
                ],
                "summary": "Resend webhook",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Webhook resend status",
                        "schema": {
                            "$ref": "#/definitions/WebhookResendResponse"
                        }
                    },
                    "400": {
                        "description": "Job has no webhook URL",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Job not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/feed": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Creates a new feed for monitoring website changes. Feeds automatically crawl the specified URL at regular intervals and detect new or changed content.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "Create a new feed",
                "parameters": [
                    {
                        "description": "Feed parameters",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/PostFeedRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Feed created successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "402": {
                        "description": "Insufficient balance",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Organization suspended",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/feed/{id}": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Retrieves the details and recent runs of a specific feed including status, configuration, and execution history",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "Get feed details",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Feed ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Feed details with recent runs",
                        "schema": {
                            "$ref": "#/definitions/FeedResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Feed not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Permanently cancels and deletes a feed. This action cannot be undone.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "Delete a feed",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Feed ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Feed deleted successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Feed not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/feed/{id}/json": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Returns the feed content in JSON Feed format (https://jsonfeed.org/)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "Get feed in JSON format",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Feed ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Page number (default: 1)",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Items per page (default: 1000, max: 1000)",
                        "name": "page_size",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON Feed",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Feed not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/feed/{id}/pause": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Pauses an active feed to temporarily stop scheduled crawls",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "Pause a feed",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Feed ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Feed paused successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Invalid request or feed cannot be paused",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Feed not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/feed/{id}/resume": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Resumes a paused feed to restart scheduled crawls",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "Resume a paused feed",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Feed ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Feed resumed successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Invalid request or feed cannot be resumed",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Feed not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/feed/{id}/rss": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Returns the feed content in Atom 1.0 format with RFC 5005 pagination support",
                "produces": [
                    "text/xml"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "Get feed in Atom/RSS format",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Feed ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Page number (default: 1)",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Items per page (default: 1000, max: 1000)",
                        "name": "page_size",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Atom XML feed",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Feed not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/feed/{id}/run": {
            "put": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Triggers an immediate feed run outside of the regular schedule. Rate limited to one run per hour.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "Force run a feed",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Feed ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Feed run triggered successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Invalid request or rate limit exceeded",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "402": {
                        "description": "Insufficient balance",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Feed not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/feed/{id}/webhook/resend": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Resends the webhook notification for the latest completed feed run",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "Resend feed webhook",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Feed ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Webhook resent successfully",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Invalid request or no webhook configured",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Feed not found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Failed to send webhook",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/feeds": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Retrieves all feeds for the authenticated organization",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Feeds"
                ],
                "summary": "List all feeds",
                "responses": {
                    "200": {
                        "description": "List of feeds",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/definitions/FeedResponse"
                                }
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/organization/usage": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Retrieves usage statistics for the authenticated organization within a date range",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Organization"
                ],
                "summary": "Get organization usage",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Start date (YYYY-MM-DD format)",
                        "name": "from",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "End date (YYYY-MM-DD format)",
                        "name": "to",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "Include daily breakdown (default: false)",
                        "name": "include_daily",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Usage statistics",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Invalid request parameters",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/v2/scrape": {
            "post": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Creates a new V2 scrape job with improved output formats and optional async mode. Returns content directly in sync mode or job ID in async mode.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "V2 Scraping"
                ],
                "summary": "Create V2 scrape job",
                "parameters": [
                    {
                        "type": "boolean",
                        "description": "Run asynchronously (returns job ID instead of waiting)",
                        "name": "async",
                        "in": "query"
                    },
                    {
                        "description": "V2 Scrape parameters",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/PostScrapeRequestV2"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job ID (async mode)",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request",
                        "schema": {
                            "$ref": "#/definitions/ScrapeResponseError"
                        }
                    },
                    "402": {
                        "description": "Insufficient balance",
                        "schema": {
                            "$ref": "#/definitions/ScrapeResponseError"
                        }
                    },
                    "403": {
                        "description": "Organization suspended or URL blocked",
                        "schema": {
                            "$ref": "#/definitions/ScrapeResponseError"
                        }
                    }
                }
            }
        },
        "/v2/scrape/{id}": {
            "get": {
                "security": [
                    {
                        "ApiKeyAuth": []
                    }
                ],
                "description": "Retrieves the result of a V2 scrape job by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "V2 Scraping"
                ],
                "summary": "Get V2 scrape result",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Job ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Scrape result",
                        "schema": {
                            "$ref": "#/definitions/PostScrapeResponseV2"
                        }
                    },
                    "404": {
                        "description": "Job not found",
                        "schema": {
                            "$ref": "#/definitions/ScrapeResponseError"
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "$ref": "#/definitions/ScrapeResponseError"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "AgentRunList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/AgentRunView"
                    }
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "AgentRunView": {
            "type": "object",
            "properties": {
                "balance_used_usd": {
                    "type": "number"
                },
                "created_at": {
                    "type": "string"
                },
                "data": {
                    "type": "object"
                },
                "error_reason": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "max_spend_usd": {
                    "type": "number"
                },
                "model": {
                    "type": "string"
                },
                "prompt": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                },
                "urls": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "CrawlJobItemView": {
            "type": "object",
            "properties": {
                "cleaned_content_url": {
                    "type": "string"
                },
                "cost": {
                    "type": "number"
                },
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "job_id": {
                    "type": "string"
                },
                "last_error": {
                    "type": "string"
                },
                "markdown_content_url": {
                    "type": "string"
                },
                "original_url": {
                    "type": "string"
                },
                "page_status_code": {
                    "type": "integer"
                },
                "raw_content_url": {
                    "type": "string"
                },
                "referred_url": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "CrawlJobView": {
            "type": "object",
            "properties": {
                "blacklist_regexp": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "finished_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "items_limit": {
                    "type": "integer"
                },
                "job_items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/CrawlJobItemView"
                    }
                },
                "max_depth": {
                    "type": "integer"
                },
                "org_id": {
                    "type": "string"
                },
                "output_formats": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "recommended_pull_delay_ms": {
                    "type": "integer"
                },
                "respect_robots_txt": {
                    "type": "boolean"
                },
                "status": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                },
                "url": {
                    "type": "string"
                },
                "webhook_url": {
                    "type": "string"
                },
                "whitelist_regexp": {
                    "type": "string"
                }
            }
        },
        "FeedResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "include_errors": {
                    "type": "boolean"
                },
                "items_limit": {
                    "type": "integer"
                },
                "last_run_at": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "next_run_at": {
                    "type": "string"
                },
                "output_format": {
                    "type": "string"
                },
                "recent_runs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/FeedRunResponse"
                    }
                },
                "status": {
                    "type": "string"
                },
                "url": {
                    "type": "string"
                },
                "webhook_url": {
                    "type": "string"
                }
            }
        },
        "FeedRunResponse": {
            "type": "object",
            "properties": {
                "cost_usd": {
                    "type": "number"
                },
                "finished_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "pages_changed": {
                    "type": "integer"
                },
                "pages_crawled": {
                    "type": "integer"
                },
                "pages_errors": {
                    "type": "integer"
                },
                "pages_new": {
                    "type": "integer"
                },
                "pages_unavailable": {
                    "type": "integer"
                },
                "started_at": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                }
            }
        },
        "PostFeedRequest": {
            "type": "object",
            "required": [
                "url"
            ],
            "properties": {
                "blacklist_regexp": {
                    "type": "string"
                },
                "include_errors": {
                    "type": "boolean"
                },
                "items_limit": {
                    "type": "integer"
                },
                "main_content_only": {
                    "type": "boolean"
                },
                "max_depth": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "output_format": {
                    "type": "string"
                },
                "respect_robots_txt": {
                    "type": "boolean"
                },
                "url": {
                    "type": "string"
                },
                "webhook_url": {
                    "type": "string"
                },
                "whitelist_regexp": {
                    "type": "string"
                }
            }
        },
        "PostJobRequest": {
            "type": "object",
            "properties": {
                "blacklist_regexp": {
                    "type": "string",
                    "example": ".*\\/admin\\/.*"
                },
                "items_limit": {
                    "type": "integer",
                    "example": 10
                },
                "main_content_only": {
                    "type": "boolean",
                    "example": false
                },
                "max_age": {
                    "type": "integer",
                    "example": 604800
                },
                "max_depth": {
                    "type": "integer",
                    "example": 2
                },
                "output_formats": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "[\"markdown\"",
                        "\"html\"]"
                    ]
                },
                "respect_robots_txt": {
                    "type": "boolean",
                    "example": false
                },
                "url": {
                    "type": "string",
                    "example": "https://example.com"
                },
                "webhook_url": {
                    "type": "string",
                    "example": "https://your-domain.com/webhook"
                },
                "whitelist_regexp": {
                    "type": "string",
                    "example": ".*\\/blog\\/.*"
                }
            }
        },
        "PostScrapeRequestV2": {
            "type": "object",
            "properties": {
                "clean_selectors": {
                    "type": "string",
                    "example": ".ad,.sidebar"
                },
                "main_content_only": {
                    "type": "boolean",
                    "example": false
                },
                "max_age": {
                    "type": "integer",
                    "example": 604800
                },
                "output_format": {
                    "description": "Deprecated: use output_formats instead.",
                    "type": "string",
                    "example": "markdown"
                },
                "output_formats": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "example": [
                        "[\"markdown\"",
                        "\"html\"]"
                    ]
                },
                "prompt": {
                    "type": "string",
                    "example": "Extract all product prices"
                },
                "respect_robots_txt": {
                    "type": "boolean",
                    "example": false
                },
                "response_schema": {
                    "type": "object"
                },
                "url": {
                    "type": "string",
                    "example": "https://example.com"
                }
            }
        },
        "PostScrapeResponseV2": {
            "type": "object",
            "properties": {
                "cleaned_content": {
                    "type": "string"
                },
                "images": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "links": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "markdown": {
                    "type": "string"
                },
                "page_status_code": {
                    "type": "integer"
                },
                "page_title": {
                    "type": "string"
                },
                "raw_content": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "structured_data": {},
                "success": {
                    "type": "boolean"
                }
            }
        },
        "ScrapeResponseError": {
            "type": "object",
            "properties": {
                "error_code": {
                    "type": "string"
                },
                "error_message": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                }
            }
        },
        "WagentRunRequest": {
            "type": "object",
            "properties": {
                "max_age": {
                    "type": "integer",
                    "example": 604800
                },
                "max_spend_usd": {
                    "type": "number"
                },
                "model": {
                    "type": "string"
                },
                "output_schema": {
                    "type": "object",
                    "additionalProperties": true
                },
                "prompt": {
                    "type": "string"
                },
                "seed_urls_only": {
                    "type": "boolean"
                },
                "urls": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "WebhookResendResponse": {
            "type": "object",
            "properties": {
                "job_id": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "status_code": {
                    "type": "integer"
                },
                "success": {
                    "type": "boolean"
                },
                "webhook_error": {
                    "type": "string"
                },
                "webhook_url": {
                    "type": "string"
                }
            }
        },
        "zeus.ArticleResponseError": {
            "type": "object",
            "properties": {
                "error_code": {
                    "type": "string"
                },
                "error_message": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                }
            }
        },
        "zeus.PostArticleRequest": {
            "type": "object",
            "properties": {
                "url": {
                    "type": "string",
                    "example": "https://example.com"
                }
            }
        },
        "zeus.PostArticleResponse": {
            "type": "object",
            "properties": {
                "markdown": {
                    "type": "string"
                },
                "success": {
                    "type": "boolean"
                }
            }
        }
    },
    "securityDefinitions": {
        "ApiKeyAuth": {
            "description": "API key for authentication. Format: Bearer {api_key}",
            "type": "apiKey",
            "name": "Authorization",
            "in": "header"
        }
    }
}