openapi: 3.1.0 info: title: SnapAPI - Screenshot & Web Data Analyze PDF API version: 2.0.0 description: 'Professional screenshot, PDF, video, scraping, content extraction, and AI analysis API. Convert any URL into structured data or visual captures with a single API call. Powered by headless Chromium. ## Authentication All API endpoints (except Auth and Health) require one of: - `X-Api-Key: sk_live_xxx` header (recommended for server-side) - `Authorization: Bearer sk_live_xxx` header - `?access_key=sk_live_xxx` query parameter (for GET endpoints) Dashboard endpoints use JWT Bearer tokens obtained from `/auth/login`. ## Rate Limits | Plan | Requests/month | Rate | |------|---------------|------| | Free | 100 | 10/min | | Starter | 5,000 | 60/min | | Pro | 50,000 | 300/min | Rate limit headers: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`' contact: email: support@snapapi.pics url: https://snapapi.pics servers: - url: https://api.snapapi.pics description: Production security: - ApiKeyAuth: [] tags: - name: PDF description: PDF generation from URLs and HTML paths: /v1/pdf: post: operationId: generatePdf summary: Generate PDF description: Generate a PDF from any URL or HTML. Supports page sizes, margins, headers/footers, and scaling. tags: - PDF requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ScreenshotRequest' example: url: https://example.com pdfOptions: pageSize: a4 landscape: false printBackground: true responses: '200': description: PDF generated content: application/pdf: schema: type: string format: binary '400': description: Validation error '401': description: Invalid API key components: schemas: ScreenshotRequest: type: object properties: url: type: string format: uri example: https://example.com html: type: string maxLength: 5000000 description: Raw HTML to render markdown: type: string maxLength: 1000000 description: Markdown to render format: type: string enum: - png - jpeg - webp - avif - pdf default: png quality: type: integer minimum: 1 maximum: 100 default: 80 device: type: string enum: - desktop-1080p - desktop-1440p - desktop-4k - macbook-pro-13 - macbook-pro-16 - imac-24 - iphone-12 - iphone-13 - iphone-14 - iphone-14-pro - iphone-15 - iphone-15-pro - iphone-15-pro-max - iphone-se - ipad - ipad-mini - ipad-air - ipad-pro-11 - ipad-pro-12.9 - pixel-7 - pixel-8 - pixel-8-pro - samsung-galaxy-s23 - samsung-galaxy-s24 - samsung-galaxy-tab-s9 width: type: integer minimum: 100 maximum: 3840 default: 1280 height: type: integer minimum: 100 maximum: 2160 default: 800 deviceScaleFactor: type: number minimum: 1 maximum: 3 default: 1 isMobile: type: boolean default: false hasTouch: type: boolean default: false isLandscape: type: boolean default: false fullPage: type: boolean default: false fullPageScrollDelay: type: integer default: 400 fullPageMaxHeight: type: integer maximum: 50000 selector: type: string description: CSS selector to capture specific element clipX: type: integer clipY: type: integer clipWidth: type: integer clipHeight: type: integer delay: type: integer minimum: 0 maximum: 30000 default: 0 timeout: type: integer minimum: 1000 maximum: 60000 default: 30000 waitUntil: type: string enum: - load - domcontentloaded - networkidle default: load waitForSelector: type: string darkMode: type: boolean default: false reducedMotion: type: boolean default: false css: type: string maxLength: 100000 description: Custom CSS (Starter+) javascript: type: string maxLength: 100000 description: Custom JS (Pro+) hideSelectors: type: array items: type: string maxItems: 50 clickSelector: type: string clickDelay: type: integer blockAds: type: boolean default: false description: Block ads (Starter+) blockTrackers: type: boolean default: false description: Block trackers (Pro+) blockCookieBanners: type: boolean default: false blockChatWidgets: type: boolean default: false blockResources: type: array items: type: string enum: - document - stylesheet - image - media - font - script - xhr - fetch - websocket userAgent: type: string extraHeaders: type: object additionalProperties: type: string cookies: type: array items: type: object properties: name: type: string value: type: string domain: type: string path: type: string httpAuth: type: object properties: username: type: string password: type: string proxy: type: object properties: server: type: string format: uri username: type: string password: type: string geolocation: type: object properties: latitude: type: number longitude: type: number accuracy: type: number timezone: type: string example: America/New_York locale: type: string example: en-US pdfOptions: type: object properties: pageSize: type: string enum: - a4 - a3 - a5 - letter - legal - tabloid - custom landscape: type: boolean printBackground: type: boolean scale: type: number minimum: 0.1 maximum: 2 marginTop: type: string marginBottom: type: string marginLeft: type: string marginRight: type: string headerTemplate: type: string footerTemplate: type: string displayHeaderFooter: type: boolean pageRanges: type: string thumbnail: type: object properties: enabled: type: boolean width: type: integer height: type: integer fit: type: string enum: - cover - contain - fill failOnHttpError: type: boolean default: false failIfContentMissing: type: array items: type: string failIfContentContains: type: array items: type: string cache: type: boolean default: false description: Enable caching (Pro+) cacheTtl: type: integer minimum: 60 maximum: 2592000 default: 86400 responseType: type: string enum: - binary - base64 - json default: binary includeMetadata: type: boolean default: false extractMetadata: type: object properties: fonts: type: boolean colors: type: boolean links: type: boolean httpStatusCode: type: boolean storage: type: object properties: enabled: type: boolean destination: type: string enum: - snapapi - user_s3 async: type: boolean default: false webhookUrl: type: string format: uri webhookHeaders: type: object additionalProperties: type: string securitySchemes: ApiKeyAuth: type: apiKey in: header name: x-api-key description: Your SnapAPI API key BearerAuth: type: http scheme: bearer bearerFormat: JWT description: JWT access token obtained from /auth/login or /auth/refresh