OpenAPI Specification
openapi: 3.1.0
info:
title: SnapAPI - Screenshot & Web Data Analyze Video 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: Video
description: Video recording of webpages
paths:
/v1/video:
post:
operationId: recordVideo
summary: Record Video
description: Record a video of a webpage with optional scrolling. Supports WebM, MP4, and GIF output. Costs 5 credits per recording.
tags:
- Video
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VideoRequest'
examples:
basic:
summary: 5-second recording
value:
url: https://example.com
duration: 5
format: mp4
scrolling:
summary: Scrolling video
value:
url: https://example.com
duration: 10
scrolling: true
scrollSpeed: 150
format: webm
responses:
'200':
description: Video recorded
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
video/webm:
schema:
type: string
format: binary
video/mp4:
schema:
type: string
format: binary
image/gif:
schema:
type: string
format: binary
application/json:
schema:
type: object
properties:
success:
type: boolean
data:
type: string
format:
type: string
width:
type: integer
height:
type: integer
duration:
type: integer
fileSize:
type: integer
took:
type: integer
'400':
description: Validation error
'429':
description: Quota exceeded
'503':
description: Server busy (max concurrent videos reached)
components:
headers:
X-Request-Id:
schema:
type: string
description: Unique request identifier for debugging
schemas:
VideoRequest:
type: object
required:
- url
properties:
url:
type: string
format: uri
format:
type: string
enum:
- webm
- mp4
- gif
default: webm
width:
type: integer
minimum: 320
maximum: 1920
default: 1280
height:
type: integer
minimum: 240
maximum: 1080
default: 720
duration:
type: integer
minimum: 1
maximum: 30
default: 5
description: Duration in seconds
fps:
type: integer
minimum: 10
maximum: 30
default: 25
scrolling:
type: boolean
default: false
scrollSpeed:
type: integer
default: 100
darkMode:
type: boolean
default: false
blockAds:
type: boolean
default: false
blockCookieBanners:
type: boolean
default: false
delay:
type: integer
default: 0
responseType:
type: string
enum:
- binary
- base64
- json
default: binary
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