{
  "info": {
    "_postman_id": "snapapi-collection-v2",
    "name": "SnapAPI \u2014 Complete API",
    "description": "Complete collection for the SnapAPI REST API v2.0.0.\n\n**Base URL:** `https://api.snapapi.pics`\n\n## Authentication\n\nSet environment variables:\n- `SNAPAPI_KEY` \u2014 your API key (for screenshot/scrape/extract/video/analyze endpoints)\n- `ACCESS_TOKEN` \u2014 JWT token (auto-set by Login request, for dashboard/storage endpoints)\n\nAll screenshot/scrape/extract endpoints authenticate via `X-Api-Key` header.\nDashboard/Storage endpoints use `Authorization: Bearer {{ACCESS_TOKEN}}`.\n\n**Get an API key:** https://snapapi.pics/register\n\n**Full docs:** https://snapapi.pics/docs",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "version": {
      "major": 2,
      "minor": 0,
      "patch": 0
    }
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-Api-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{SNAPAPI_KEY}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "SNAPAPI_BASE_URL",
      "value": "https://api.snapapi.pics",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Health",
      "description": "Health check endpoints \u2014 no authentication required.",
      "item": [
        {
          "name": "Ping",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/ping",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "ping"
              ]
            },
            "description": "Returns `{\"status\":\"ok\"}`. No auth required.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Health Check",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/health",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "health"
              ]
            },
            "description": "Basic health check.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Detailed Health",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/health/detailed",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "health",
                "detailed"
              ]
            },
            "description": "Returns status of database, Redis, and BullMQ queue.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "Screenshot",
      "description": "Capture screenshots of any URL, HTML, or Markdown. Supports full-page, device emulation, PDF, async, webhooks, and cloud storage.",
      "item": [
        {
          "name": "Take Screenshot (POST)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot"
              ]
            },
            "description": "Capture a screenshot. Returns binary image by default. Set `responseType: json` for base64 + metadata.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"format\": \"png\",\n  \"width\": 1280,\n  \"height\": 800,\n  \"fullPage\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status 200', () => pm.response.to.have.status(200));",
                  "pm.test('Success true', () => { const r = pm.response.json(); pm.expect(r.success).to.be.true; });"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Take Screenshot \u2014 Full Page Dark Mode",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot"
              ]
            },
            "description": "Full-page screenshot with dark mode and ad blocking.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"fullPage\": true,\n  \"darkMode\": true,\n  \"blockAds\": true,\n  \"blockCookieBanners\": true,\n  \"format\": \"webp\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take Screenshot \u2014 Mobile Device",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot"
              ]
            },
            "description": "Capture using iPhone 15 Pro device preset.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"device\": \"iphone-15-pro\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take Screenshot \u2014 Render HTML",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot"
              ]
            },
            "description": "Render custom HTML to a screenshot.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"html\": \"<html><body style='background:#1a1a2e;color:#fff;font-family:sans-serif;padding:40px'><h1>Hello from SnapAPI</h1><p>Rendered from raw HTML.</p></body></html>\",\n  \"format\": \"png\",\n  \"width\": 800,\n  \"height\": 400\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take Screenshot \u2014 PDF",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot"
              ]
            },
            "description": "Generate PDF from URL.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"format\": \"pdf\",\n  \"pdfOptions\": {\n    \"pageSize\": \"a4\",\n    \"printBackground\": true,\n    \"landscape\": false\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take Screenshot \u2014 Async + Webhook",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot"
              ]
            },
            "description": "Submit async job. Returns jobId immediately. Result delivered to webhookUrl.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"async\": true,\n  \"webhookUrl\": \"https://your-server.com/webhook\",\n  \"format\": \"png\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take Screenshot \u2014 With Storage",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot"
              ]
            },
            "description": "Capture and save to SnapAPI Vault storage.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"format\": \"png\",\n  \"storage\": {\n    \"enabled\": true,\n    \"destination\": \"snapapi\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take Screenshot \u2014 Direct S3 Upload",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot"
              ]
            },
            "description": "Capture and upload directly to your own S3 bucket.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"format\": \"png\",\n  \"s3\": {\n    \"bucket\": \"my-screenshots\",\n    \"region\": \"us-east-1\",\n    \"access_key_id\": \"AKIA...\",\n    \"secret_access_key\": \"...\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Take Screenshot (GET)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot"
              ],
              "query": [
                {
                  "key": "url",
                  "value": "https://example.com",
                  "description": "URL to capture"
                },
                {
                  "key": "format",
                  "value": "png",
                  "description": "Output format"
                },
                {
                  "key": "width",
                  "value": "1280",
                  "description": "Viewport width"
                },
                {
                  "key": "height",
                  "value": "800",
                  "description": "Viewport height"
                },
                {
                  "key": "full_page",
                  "value": "false",
                  "description": "Capture full page"
                },
                {
                  "key": "dark_mode",
                  "value": "false",
                  "description": "Dark mode"
                },
                {
                  "key": "block_ads",
                  "value": "false",
                  "description": "Block ads"
                },
                {
                  "key": "response_type",
                  "value": "binary",
                  "description": "binary|base64|json"
                }
              ]
            },
            "description": "Simple GET endpoint for screenshots via query parameters."
          }
        },
        {
          "name": "Get Async Job Status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot/async/:jobId",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot",
                "async",
                ":jobId"
              ],
              "query": [
                {
                  "key": "includeData",
                  "value": "false",
                  "description": "Include base64 image data in response"
                }
              ],
              "variable": [
                {
                  "key": "jobId",
                  "value": "{{ASYNC_JOB_ID}}",
                  "description": "Path parameter"
                }
              ]
            },
            "description": "Poll for async screenshot job status. Keep polling until status is 'completed' or 'failed'."
          }
        },
        {
          "name": "Batch Screenshots",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot/batch",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot",
                "batch"
              ]
            },
            "description": "Submit up to 100 URLs for batch processing. Returns jobId to poll.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"urls\": [\n    \"https://example.com\",\n    \"https://google.com\",\n    \"https://github.com\"\n  ],\n  \"format\": \"png\",\n  \"width\": 1280,\n  \"height\": 800,\n  \"blockAds\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Get Batch Job Status",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/screenshot/batch/:jobId",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "screenshot",
                "batch",
                ":jobId"
              ],
              "variable": [
                {
                  "key": "jobId",
                  "value": "{{BATCH_JOB_ID}}",
                  "description": "Path parameter"
                }
              ]
            },
            "description": "Check batch job status and retrieve results."
          }
        }
      ]
    },
    {
      "name": "PDF",
      "description": "PDF generation from URLs and HTML.",
      "item": [
        {
          "name": "Generate PDF from URL",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/pdf",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "pdf"
              ]
            },
            "description": "Generate a PDF from any URL. Returns binary PDF.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"pdfOptions\": {\n    \"pageSize\": \"a4\",\n    \"printBackground\": true,\n    \"landscape\": false,\n    \"marginTop\": \"10mm\",\n    \"marginBottom\": \"10mm\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Generate PDF from HTML",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/pdf",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "pdf"
              ]
            },
            "description": "Generate a PDF from raw HTML.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"html\": \"<h1>Invoice #1234</h1><p>Amount: $99.00</p>\",\n  \"pdfOptions\": {\n    \"pageSize\": \"letter\",\n    \"printBackground\": true\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Video",
      "description": "Record webpage videos as MP4, WebM, or GIF. Costs 5 credits per recording.",
      "item": [
        {
          "name": "Record Video",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/video",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "video"
              ]
            },
            "description": "Record a 5-second video. Costs 5 API credits. Returns binary video file.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"duration\": 5,\n  \"format\": \"mp4\",\n  \"width\": 1280,\n  \"height\": 720\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Record Scrolling Video",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/video",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "video"
              ]
            },
            "description": "Record a scrolling page walkthrough.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"duration\": 10,\n  \"scrolling\": true,\n  \"scrollSpeed\": 150,\n  \"scrollBy\": 800,\n  \"format\": \"webm\",\n  \"width\": 1280,\n  \"height\": 720\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Record as GIF",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/video",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "video"
              ]
            },
            "description": "Record an animated GIF.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"duration\": 3,\n  \"format\": \"gif\",\n  \"fps\": 15,\n  \"width\": 800,\n  \"height\": 600\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Scrape",
      "description": "Scrape web content as text, HTML, markdown, links, or metadata.",
      "item": [
        {
          "name": "Scrape as Text",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/scrape",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "scrape"
              ]
            },
            "description": "Extract clean text content from a webpage.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"text\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Scrape as Markdown (LLM-ready)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/scrape",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "scrape"
              ]
            },
            "description": "Extract content as markdown \u2014 ideal for feeding to LLMs.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"markdown\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Scrape Links",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/scrape",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "scrape"
              ]
            },
            "description": "Extract all hyperlinks from a page.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"links\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Scrape Metadata",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/scrape",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "scrape"
              ]
            },
            "description": "Extract page metadata: title, description, OG tags, canonical, favicon.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"metadata\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Scrape Multi-page",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/scrape",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "scrape"
              ]
            },
            "description": "Scrape multiple paginated pages in one request.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/blog\",\n  \"type\": \"text\",\n  \"pages\": 3,\n  \"waitMs\": 1000,\n  \"blockResources\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Scrape with Premium Proxy",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/scrape",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "scrape"
              ]
            },
            "description": "Use managed residential proxy to bypass blocks. Requires Pro plan.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"text\",\n  \"premiumProxy\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Scrape (GET)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/scrape",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "scrape"
              ],
              "query": [
                {
                  "key": "url",
                  "value": "https://example.com",
                  "description": "URL to scrape"
                },
                {
                  "key": "type",
                  "value": "text",
                  "description": "text|html|links|markdown|metadata"
                },
                {
                  "key": "pages",
                  "value": "1",
                  "description": "Number of pages"
                }
              ]
            },
            "description": "GET version of the scrape endpoint."
          }
        }
      ]
    },
    {
      "name": "Extract",
      "description": "Extract structured content for LLMs \u2014 article, markdown, links, images, metadata.",
      "item": [
        {
          "name": "Extract as Markdown",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/extract",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "extract"
              ]
            },
            "description": "Extract content optimized for LLM consumption.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"markdown\",\n  \"cleanOutput\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Extract Article (Readability)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/extract",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "extract"
              ]
            },
            "description": "Extract main article content using Mozilla Readability \u2014 removes nav/ads/sidebar.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://blog.example.com/post\",\n  \"type\": \"article\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Extract Structured Data",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/extract",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "extract"
              ]
            },
            "description": "Extract structured data including title, author, publish date, word count, and content.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"structured\",\n  \"maxLength\": 20000\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Extract Links",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/extract",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "extract"
              ]
            },
            "description": "Extract all links with text and href.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"links\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Extract Images",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/extract",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "extract"
              ]
            },
            "description": "Extract all images with src, alt, title, and dimensions.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"images\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Extract Metadata",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/extract",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "extract"
              ]
            },
            "description": "Extract full page metadata including OG, Twitter Card, canonical, favicon.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"type\": \"metadata\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Extract \u2014 Custom Fields",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/extract",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "extract"
              ]
            },
            "description": "Extract specific named fields from page content.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/pricing\",\n  \"type\": \"structured\",\n  \"fields\": {\n    \"price\": \"monthly subscription price\",\n    \"plan_name\": \"name of the pricing tier\",\n    \"features\": \"main included features\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Extract (GET)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/extract",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "extract"
              ],
              "query": [
                {
                  "key": "url",
                  "value": "https://example.com",
                  "description": "URL"
                },
                {
                  "key": "type",
                  "value": "markdown",
                  "description": "html|text|markdown|article|links|images|metadata|structured"
                },
                {
                  "key": "max_length",
                  "value": "10000",
                  "description": "Max content length"
                },
                {
                  "key": "clean",
                  "value": "true",
                  "description": "Clean output"
                }
              ]
            },
            "description": "GET version of the extract endpoint."
          }
        }
      ]
    },
    {
      "name": "Analyze (BYOK)",
      "description": "AI-powered webpage analysis using your own LLM API key (Bring Your Own Key).",
      "item": [
        {
          "name": "Analyze with OpenAI",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/analyze",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "analyze"
              ]
            },
            "description": "Analyze a webpage using your own OpenAI API key.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"prompt\": \"Summarize the main purpose of this website in 2-3 sentences.\",\n  \"provider\": \"openai\",\n  \"apiKey\": \"sk-...\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Analyze with Anthropic",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/analyze",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "analyze"
              ]
            },
            "description": "Analyze a webpage using your own Anthropic API key.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"prompt\": \"What are the key features offered on this page?\",\n  \"provider\": \"anthropic\",\n  \"apiKey\": \"sk-ant-...\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Analyze \u2014 Structured Output (JSON Schema)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/analyze",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "analyze"
              ]
            },
            "description": "Get structured JSON output by providing a JSON Schema.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/pricing\",\n  \"prompt\": \"Extract all pricing plans from this page.\",\n  \"provider\": \"openai\",\n  \"apiKey\": \"sk-...\",\n  \"jsonSchema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"plans\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\"\n            },\n            \"price\": {\n              \"type\": \"string\"\n            },\n            \"features\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\"\n              }\n            }\n          },\n          \"required\": [\n            \"name\",\n            \"price\"\n          ]\n        }\n      }\n    },\n    \"required\": [\n      \"plans\"\n    ],\n    \"additionalProperties\": false\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Analyze \u2014 With Screenshot Context",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/analyze",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "analyze"
              ]
            },
            "description": "Include a screenshot in the LLM context for visual analysis.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com\",\n  \"prompt\": \"Describe what you see on this webpage.\",\n  \"provider\": \"openai\",\n  \"apiKey\": \"sk-...\",\n  \"includeScreenshot\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Usage",
      "description": "Usage and quota endpoints.",
      "item": [
        {
          "name": "Get API Usage",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/usage",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "usage"
              ]
            },
            "description": "Get current API usage and remaining quota."
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status 200', () => pm.response.to.have.status(200));",
                  "pm.test('Success true', () => { const r = pm.response.json(); pm.expect(r.success).to.be.true; });"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "List Device Presets",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/devices",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "devices"
              ]
            },
            "description": "Get all available device presets for screenshot emulation.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Get API Capabilities",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/v1/capabilities",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "v1",
                "capabilities"
              ]
            },
            "description": "Get supported formats, features, and limits.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "Auth",
      "description": "Authentication \u2014 register, login, OAuth (Google/GitHub/Apple), password reset, email verification.",
      "item": [
        {
          "name": "Register",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/register",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "register"
              ]
            },
            "description": "Create a new account. A verification email will be sent.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"user@example.com\",\n  \"password\": \"securepass123\",\n  \"name\": \"Jane Developer\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Login",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/login",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "login"
              ]
            },
            "description": "Returns accessToken (store in memory) and sets refresh_token HttpOnly cookie.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"user@example.com\",\n  \"password\": \"securepass123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "noauth"
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status 200', () => pm.response.to.have.status(200));",
                  "const r = pm.response.json();",
                  "if (r.accessToken) { pm.environment.set('ACCESS_TOKEN', r.accessToken); console.log('Token saved'); }",
                  "pm.test('Has accessToken', () => pm.expect(r.accessToken).to.be.a('string'));"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Google OAuth",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/google",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "google"
              ]
            },
            "description": "Sign in with Google. Pass the ID token from Google Sign-In.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"credential\": \"eyJhb...\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "GitHub OAuth",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/github",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "github"
              ]
            },
            "description": "Sign in with GitHub. Pass the OAuth authorization code.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"code\": \"abc123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Refresh Token",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/refresh",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "refresh"
              ]
            },
            "description": "Exchange refresh_token cookie for a new access token.",
            "auth": {
              "type": "noauth"
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status 200', () => pm.response.to.have.status(200));",
                  "const r = pm.response.json();",
                  "if (r.accessToken) { pm.environment.set('ACCESS_TOKEN', r.accessToken); console.log('Token saved'); }",
                  "pm.test('Has accessToken', () => pm.expect(r.accessToken).to.be.a('string'));"
                ],
                "type": "text/javascript"
              }
            }
          ]
        },
        {
          "name": "Logout",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/logout",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "logout"
              ]
            },
            "description": "Invalidate session and clear refresh cookie.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Get Current User",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/me",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "me"
              ]
            },
            "description": "Get authenticated user profile. Requires Authorization: Bearer {{ACCESS_TOKEN}}"
          }
        },
        {
          "name": "Forgot Password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/forgot-password",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "forgot-password"
              ]
            },
            "description": "Send password reset email (always returns success).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"user@example.com\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Reset Password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/reset-password",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "reset-password"
              ]
            },
            "description": "Set new password using reset token.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"token\": \"reset-token-from-email\",\n  \"password\": \"newpassword123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Verify Email",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/auth/verify-email",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "auth",
                "verify-email"
              ],
              "query": [
                {
                  "key": "token",
                  "value": "{{EMAIL_VERIFY_TOKEN}}",
                  "description": "Email verification token"
                }
              ]
            },
            "description": "Verify email \u2014 redirects to dashboard.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "Dashboard",
      "description": "User dashboard \u2014 requires JWT Bearer token from /auth/login.",
      "item": [
        {
          "name": "Dashboard Overview",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/overview",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "overview"
              ]
            },
            "description": "Returns user profile, quota usage, stats, daily chart data, and subscription info."
          }
        },
        {
          "name": "List API Keys",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/api-keys",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "api-keys"
              ]
            },
            "description": "List all API keys including full key values."
          }
        },
        {
          "name": "Create API Key",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/api-keys",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "api-keys"
              ]
            },
            "description": "Create a new API key. Max 10 per user.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Production Key\",\n  \"permissions\": [\n    \"screenshot\",\n    \"pdf\",\n    \"metadata\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Update API Key",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/api-keys/:id",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "api-keys",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "{{API_KEY_ID}}",
                  "description": "Path parameter"
                }
              ]
            },
            "description": "Update key name or active status.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Renamed Key\",\n  \"isActive\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete API Key",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/api-keys/:id",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "api-keys",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "{{API_KEY_ID}}",
                  "description": "Path parameter"
                }
              ]
            },
            "description": "Delete an API key. Cannot delete the last remaining key."
          }
        },
        {
          "name": "Regenerate API Key",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/api-keys/:id/regenerate",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "api-keys",
                ":id",
                "regenerate"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "{{API_KEY_ID}}",
                  "description": "Path parameter"
                }
              ]
            },
            "description": "Rotate key value. Old key immediately invalidated."
          }
        },
        {
          "name": "Usage History",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/usage",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "usage"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50",
                  "description": "Max results"
                },
                {
                  "key": "offset",
                  "value": "0",
                  "description": "Pagination offset"
                }
              ]
            },
            "description": "Paginated API call history with response times, status codes, and errors."
          }
        },
        {
          "name": "Billing Info",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/billing",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "billing"
              ]
            },
            "description": "Current subscription and payment history."
          }
        },
        {
          "name": "Available Plans",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/plans",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "plans"
              ]
            },
            "description": "All subscription plans with pricing, quotas, and features."
          }
        },
        {
          "name": "Create Checkout",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/create-checkout",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "create-checkout"
              ]
            },
            "description": "Returns Paddle price ID for the frontend to open a checkout overlay.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"planId\": \"starter\",\n  \"interval\": \"monthly\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Cancel Subscription",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/cancel-subscription",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "cancel-subscription"
              ]
            },
            "description": "Cancel active subscription at period end."
          }
        },
        {
          "name": "Update Profile",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/profile",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "profile"
              ]
            },
            "description": "Update display name.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"New Display Name\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Change Password",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/dashboard/change-password",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "dashboard",
                "change-password"
              ]
            },
            "description": "Change password for email/password accounts.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"currentPassword\": \"old_password\",\n  \"newPassword\": \"new_secure_password\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Storage",
      "description": "File storage \u2014 manage stored screenshots, configure custom S3. Requires JWT Bearer token.",
      "item": [
        {
          "name": "Storage Overview",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/storage/overview",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "storage",
                "overview"
              ]
            },
            "description": "Vault usage, S3 configuration status, and plan storage limits."
          }
        },
        {
          "name": "Set Vault Preference",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/storage/vault-preference",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "storage",
                "vault-preference"
              ]
            },
            "description": "Enable or disable SnapAPI Vault cloud storage.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"enabled\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "List Stored Files",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/storage/files",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "storage",
                "files"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "50",
                  "description": "Max results"
                },
                {
                  "key": "offset",
                  "value": "0",
                  "description": "Pagination"
                },
                {
                  "key": "type",
                  "value": "",
                  "description": "Filter: local|user_s3"
                }
              ]
            },
            "description": "List stored screenshots with signed download URLs."
          }
        },
        {
          "name": "Get File",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/storage/files/:id",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "storage",
                "files",
                ":id"
              ],
              "query": [
                {
                  "key": "thumb",
                  "value": "0",
                  "description": "Return thumbnail (1) or full file (0)"
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "{{FILE_ID}}",
                  "description": "Path parameter"
                }
              ]
            },
            "description": "Serve file directly (local) or redirect to S3 signed URL."
          }
        },
        {
          "name": "Delete File",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/storage/files/:id",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "storage",
                "files",
                ":id"
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "{{FILE_ID}}",
                  "description": "Path parameter"
                }
              ]
            },
            "description": "Permanently delete a stored file."
          }
        },
        {
          "name": "Get S3 Configuration",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/storage/user-s3",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "storage",
                "user-s3"
              ]
            },
            "description": "Returns S3 config with access key ID masked."
          }
        },
        {
          "name": "Save S3 Configuration",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/storage/user-s3",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "storage",
                "user-s3"
              ]
            },
            "description": "Configure your own S3 bucket for file storage.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"bucket\": \"my-screenshots\",\n  \"region\": \"us-east-1\",\n  \"accessKeyId\": \"AKIAIOSFODNN7EXAMPLE\",\n  \"secretAccessKey\": \"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Test S3 Connection",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/storage/user-s3/test",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "storage",
                "user-s3",
                "test"
              ]
            },
            "description": "Test S3 connectivity before saving credentials.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"bucket\": \"my-screenshots\",\n  \"region\": \"us-east-1\",\n  \"accessKeyId\": \"AKIAIOSFODNN7EXAMPLE\",\n  \"secretAccessKey\": \"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Delete S3 Configuration",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{SNAPAPI_BASE_URL}}/storage/user-s3",
              "host": [
                "{{SNAPAPI_BASE_URL}}"
              ],
              "path": [
                "storage",
                "user-s3"
              ]
            },
            "description": "Remove custom S3 configuration."
          }
        }
      ]
    }
  ]
}