{ "openapi": "3.1.0", "info": { "version": "1.0.0", "title": "Crawl4AI API", "description": "AI-powered web scraping and crawling API" }, "paths": { "/crawl/job": { "post": { "summary": "Submit Crawl Job", "description": "Submit a new web crawling job", "operationId": "submitCrawlJob", "x-zuplo-route": { "corsPolicy": "none", "handler": { "export": "default", "module": "$import(./modules/backend-proxy)" }, "policies": { "inbound": ["api-key-auth", "quota-enforcement", "rate-limit"], "outbound": ["add-rate-limit-headers", "quota-headers", "billing-track"] } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "urls": { "type": "array", "items": { "type": "string" }, "description": "List of URLs to crawl" } }, "required": ["urls"] } } } }, "responses": { "200": { "description": "Job submitted successfully" }, "401": { "description": "Unauthorized - Invalid API key" }, "429": { "description": "Rate limit exceeded" } } } }, "/crawl/job/{jobId}": { "get": { "summary": "Get Crawl Job Status", "description": "Get the status and results of a crawl job", "operationId": "getCrawlJob", "x-zuplo-route": { "corsPolicy": "none", "handler": { "export": "default", "module": "$import(./modules/backend-proxy)" }, "policies": { "inbound": ["api-key-auth", "quota-enforcement", "rate-limit"], "outbound": ["add-rate-limit-headers", "quota-headers", "billing-track"] } }, "parameters": [ { "name": "jobId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Job ID" } ], "responses": { "200": { "description": "Job status and results" }, "401": { "description": "Unauthorized - Invalid API key" }, "404": { "description": "Job not found" } } } } } }