{
  "info": {
    "name": "crawlcrawl API",
    "_postman_id": "crawlcrawl-api-2026-05-13",
    "description": "Auto-generated from openapi.json. Set base_url and api_key in collection variables.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://api.crawlcrawl.com"
    },
    {
      "key": "api_key",
      "value": "crk_REPLACE_ME"
    }
  ],
  "item": [
    {
      "name": "Signup & billing",
      "item": [
        {
          "name": "GET /v1/billing/checkout",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/billing/checkout",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "billing",
                "checkout"
              ],
              "query": [
                {
                  "key": "intent_id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Create a Stripe Checkout session for a paid signup intent\n\nCreates a Stripe Checkout session for an existing signup_intents row and returns the hosted-checkout URL. The dashboard then redirects the browser there. When the server is running with a placeholder Stripe key, returns a synthetic URL that the dashboard recognises and routes through a mock-checkout flow."
          }
        },
        {
          "name": "GET /v1/billing/status",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/billing/status",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "billing",
                "status"
              ]
            },
            "description": "Get billing state for the authenticated project\n\nReturns tier, stripe customer/subscription IDs, and whether the server is in mock or live billing mode."
          }
        },
        {
          "name": "POST /v1/billing/webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/billing/webhook",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "billing",
                "webhook"
              ]
            },
            "description": "Stripe webhook endpoint (checkout.session.completed)\n\nReceives Stripe webhook events. Verifies the Stripe-Signature header using the STRIPE_WEBHOOK_SECRET configured on the server. On checkout.session.completed, looks up the signup intent by client_reference_id, provisions the project + key at the desired tier, marks the intent fulfilled, and emails the key to the customer. Other event types are acknowledged with `{ignored: <type>}`."
          }
        },
        {
          "name": "POST /v1/signup",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/signup",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "signup"
              ]
            },
            "description": "Self-serve free-tier signup (public, no auth)\n\nMints a project and API key in one call. Free tier auto-mints and emails the key. Paid tiers (pro/agency/studio) record an intent and return a checkout_url for Stripe. Requires a Cloudflare Turnstile token when CF_TURNSTILE_SECRET is set on the server (production: yes). Rate limited: 3 attempts per IP per 24h + 100 successful signups per day globally.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"project_name\": \"string\",\n  \"email\": \"string\",\n  \"tier\": \"string\",\n  \"turnstile_token\": \"string\"\n}"
            }
          }
        }
      ]
    },
    {
      "name": "Crawls",
      "item": [
        {
          "name": "POST /v1/crawls",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crawls",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crawls"
              ]
            },
            "description": "Start an asynchronous multi-page crawl",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"max_pages\": 1,\n  \"depth\": 1,\n  \"concurrency\": 1,\n  \"delay_ms\": 1,\n  \"subdomains\": false,\n  \"respect_robots\": false,\n  \"store_html\": false,\n  \"seed_kind\": \"string\",\n  \"headers\": {},\n  \"cookies\": \"string\",\n  \"exclude_paths\": [],\n  \"include_paths\": [],\n  \"webhook_url\": \"string\",\n  \"max_age_seconds\": 1,\n  \"user_agent\": \"string\",\n  \"proxy_url\": \"string\",\n  \"webhook_events\": [],\n  \"return_only_changed\": false,\n  \"cron\": \"string\",\n  \"aggressive\": false\n}"
            }
          }
        },
        {
          "name": "GET /v1/crawls/{id}",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crawls/{id}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crawls",
                "{id}"
              ]
            },
            "description": "Crawl status"
          }
        },
        {
          "name": "DELETE /v1/crawls/{id}",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crawls/{id}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crawls",
                "{id}"
              ]
            },
            "description": "Cancel + cascade-delete the crawl"
          }
        },
        {
          "name": "GET /v1/crawls/{id}/links",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crawls/{id}/links",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crawls",
                "{id}",
                "links"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "from_page_id",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Internal link graph (lazy-extracted)"
          }
        },
        {
          "name": "GET /v1/crawls/{id}/orphans",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crawls/{id}/orphans",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crawls",
                "{id}",
                "orphans"
              ]
            },
            "description": "Pages with zero inbound internal links"
          }
        },
        {
          "name": "GET /v1/crawls/{id}/pages",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crawls/{id}/pages",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crawls",
                "{id}",
                "pages"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "status",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "format",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "List pages from a crawl run"
          }
        },
        {
          "name": "GET /v1/crawls/{old_id}/diff/{new_id}",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crawls/{old_id}/diff/{new_id}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crawls",
                "{old_id}",
                "diff",
                "{new_id}"
              ]
            },
            "description": "Compare two crawl runs by content_hash"
          }
        }
      ]
    },
    {
      "name": "Scan",
      "item": [
        {
          "name": "POST /v1/scan",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/scan",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "scan"
              ]
            },
            "description": "Synchronous single-URL scan \u2192 markdown + signals + AI bot policy + llms.txt",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"user_agent\": \"string\",\n  \"max_age_seconds\": 1,\n  \"cloud_mode\": \"string\",\n  \"metadata_only\": false,\n  \"only_main_content\": false,\n  \"include_links\": false,\n  \"screenshot_inline\": false\n}"
            }
          }
        },
        {
          "name": "POST /v1/scan/bulk",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/scan/bulk",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "scan",
                "bulk"
              ]
            },
            "description": "Parallel multi-URL scan (max 100 URLs per call)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"urls\": [],\n  \"user_agent\": \"string\",\n  \"max_age_seconds\": 1,\n  \"concurrency\": 1\n}"
            }
          }
        }
      ]
    },
    {
      "name": "Pages",
      "item": [
        {
          "name": "GET /v1/pages/{id}",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/pages/{id}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "pages",
                "{id}"
              ],
              "query": [
                {
                  "key": "format",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Fetch one stored page"
          }
        }
      ]
    },
    {
      "name": "Anti-bot cloud",
      "item": [
        {
          "name": "GET /v1/cloud/balance",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/balance",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "balance"
              ]
            },
            "description": "Remaining cloud-backend balance for the account"
          }
        },
        {
          "name": "POST /v1/cloud/crawl",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/crawl",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "crawl"
              ]
            },
            "description": "Multi-page anti-bot crawl via cloud backend",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"limit\": 1,\n  \"return_format\": \"string\",\n  \"chrome\": false\n}"
            }
          }
        },
        {
          "name": "POST /v1/cloud/fetch/{domain}",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/fetch/{domain}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "fetch",
                "{domain}"
              ]
            },
            "description": "Run a per-domain pre-configured fetcher (root path)"
          }
        },
        {
          "name": "POST /v1/cloud/fetch/{domain}/{path}",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/fetch/{domain}/{path}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "fetch",
                "{domain}",
                "{path}"
              ]
            },
            "description": "Run a per-domain pre-configured fetcher (sub-path)\n\nNote: axum routes use a wildcard segment `{*path}`; OpenAPI shows `{path}` for clarity, but the actual path is matched literally including slashes."
          }
        },
        {
          "name": "POST /v1/cloud/links",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/links",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "links"
              ]
            },
            "description": "Fast link discovery on a domain (anti-bot)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"limit\": 1\n}"
            }
          }
        },
        {
          "name": "POST /v1/cloud/render",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/render",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "render"
              ]
            },
            "description": "Render a URL in a real Chrome and return the resolved page (expect 30-60s)\n\nRenders any URL through a real headless Chrome and returns the post-JavaScript HTML. **Typical latency: 30-60 seconds.** Set your client timeout to at least 90s. Counts as 1 cloud-page against your daily cap. For static sites where you don't need JavaScript execution, use /v1/cloud/scrape (smart mode, ~1s) instead.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"return_format\": \"string\"\n}"
            }
          }
        },
        {
          "name": "POST /v1/cloud/scrape",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/scrape",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "scrape"
              ]
            },
            "description": "Direct anti-bot scrape via cloud backend",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"return_format\": \"string\",\n  \"chrome\": false\n}"
            }
          }
        },
        {
          "name": "GET /v1/cloud/scrapers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/scrapers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "scrapers"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "List available per-domain scraper configs"
          }
        },
        {
          "name": "POST /v1/cloud/screenshot",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/screenshot",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "screenshot"
              ]
            },
            "description": "Full-page screenshot PNG (deprecated \u2014 use /v1/cloud/render)\n\nDeprecated alias of /v1/cloud/render. Returns the rendered HTML (not a binary image). New code should call /v1/cloud/render directly. Response carries `Deprecation: true` and a `Link: </v1/cloud/render>; rel=\"successor-version\"` header.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\"\n}"
            }
          }
        },
        {
          "name": "POST /v1/cloud/search",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/search",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "search"
              ]
            },
            "description": "SERP-style search across the open web",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"query\": \"string\",\n  \"limit\": 1,\n  \"return_format\": \"string\"\n}"
            }
          }
        },
        {
          "name": "POST /v1/cloud/transform",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/transform",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "transform"
              ]
            },
            "description": "Transform HTML or PDF into clean markdown/text",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"data\": \"string\",\n  \"input_kind\": \"string\",\n  \"return_format\": \"string\",\n  \"readability\": false\n}"
            }
          }
        },
        {
          "name": "POST /v1/cloud/unblock",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/cloud/unblock",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "cloud",
                "unblock"
              ]
            },
            "description": "Bypass anti-bot protections (Cloudflare, Akamai, PerimeterX, captchas)",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"return_format\": \"string\"\n}"
            }
          }
        }
      ]
    },
    {
      "name": "Monitors",
      "item": [
        {
          "name": "GET /v1/crons",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crons",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crons"
              ]
            },
            "description": "List active recurring monitors"
          }
        },
        {
          "name": "DELETE /v1/crons/{id}",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crons/{id}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crons",
                "{id}"
              ]
            },
            "description": "Delete a recurring monitor"
          }
        },
        {
          "name": "PATCH /v1/crons/{id}",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/crons/{id}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "crons",
                "{id}"
              ]
            },
            "description": "Edit a monitor's schedule or enabled state",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"schedule\": \"string\",\n  \"enabled\": false\n}"
            }
          }
        }
      ]
    },
    {
      "name": "Usage",
      "item": [
        {
          "name": "GET /v1/usage",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/usage",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "usage"
              ]
            },
            "description": "Current period usage + tier caps + retry guidance"
          }
        },
        {
          "name": "GET /v1/usage/history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/usage/history",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "usage",
                "history"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Daily usage buckets"
          }
        }
      ]
    },
    {
      "name": "Keys",
      "item": [
        {
          "name": "GET /v1/keys",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/keys",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "keys"
              ]
            },
            "description": "List API keys (active, expired, revoked)"
          }
        },
        {
          "name": "POST /v1/keys/rotate",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/keys/rotate",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "keys",
                "rotate"
              ]
            },
            "description": "Issue new key, set grace period on existing keys",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"label\": \"string\",\n  \"grace_seconds\": 1\n}"
            }
          }
        },
        {
          "name": "DELETE /v1/keys/{prefix}",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/keys/{prefix}",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "keys",
                "{prefix}"
              ]
            },
            "description": "Revoke a key by its 12-char prefix"
          }
        }
      ]
    },
    {
      "name": "Utilities",
      "item": [
        {
          "name": "GET /v1/health",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/health",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "health"
              ]
            },
            "description": "Liveness check"
          }
        },
        {
          "name": "GET /v1/health/cloud",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/health/cloud",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "health",
                "cloud"
              ]
            },
            "description": "Cloud backend balance + this project's last-24h cloud usage"
          }
        },
        {
          "name": "POST /v1/llms-txt-build",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/llms-txt-build",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "llms-txt-build"
              ]
            },
            "description": "Crawl a domain and emit a llms.txt file ready to publish",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"string\",\n  \"max_pages\": 1,\n  \"site_name\": \"string\",\n  \"summary\": \"string\",\n  \"wait_seconds\": 1\n}"
            }
          }
        },
        {
          "name": "GET /v1/logs",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/logs",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "logs"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "offset",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "status_min",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "status_max",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Audit log \u2014 last N requests for this project"
          }
        },
        {
          "name": "GET /v1/ready",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/ready",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "ready"
              ]
            },
            "description": "Readiness check (DB + worker heartbeat)"
          }
        },
        {
          "name": "GET /v1/robots-policy",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/robots-policy",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "robots-policy"
              ],
              "query": [
                {
                  "key": "url",
                  "value": "",
                  "description": ""
                },
                {
                  "key": "user_agent",
                  "value": "",
                  "description": ""
                }
              ]
            },
            "description": "Parsed AI-bot policy + raw robots.txt + llms.txt for any host"
          }
        },
        {
          "name": "GET /v1/webhook/secret",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{api_key}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/webhook/secret",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "webhook",
                "secret"
              ]
            },
            "description": "HMAC-SHA256 secret for verifying webhook signatures"
          }
        }
      ]
    }
  ]
}