openapi: 3.1.0
info:
title: SnapAPI - Screenshot & Web Data Analyze Storage 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: Storage
description: File storage — list, retrieve, delete stored files; configure custom S3
paths:
/storage/overview:
get:
operationId: getStorageOverview
summary: Storage Overview
description: Returns vault usage, S3 configuration status, and plan-based storage limits.
tags:
- Storage
security:
- BearerAuth: []
responses:
'200':
description: Storage overview
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
vault:
type: object
properties:
enabled:
type: boolean
active:
type: boolean
used:
type: integer
limit:
type: integer
userS3:
type: object
properties:
configured:
type: boolean
bucket:
type: string
nullable: true
region:
type: string
nullable: true
plan:
type: string
/storage/vault-preference:
post:
operationId: setVaultPreference
summary: Set Vault Preference
description: Enable or disable SnapAPI cloud storage (Vault). Requires a paid plan.
tags:
- Storage
security:
- BearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
required:
- enabled
properties:
enabled:
type: boolean
responses:
'200':
description: Preference saved
'403':
description: Premium Vault requires a paid plan
/storage/files:
get:
operationId: listStoredFiles
summary: List Stored Files
description: Paginated list of stored screenshots with signed download URLs.
tags:
- Storage
security:
- BearerAuth: []
parameters:
- name: limit
in: query
schema:
type: integer
default: 50
maximum: 100
- name: offset
in: query
schema:
type: integer
default: 0
- name: type
in: query
schema:
type: string
enum:
- local
- user_s3
description: Filter by storage type
responses:
'200':
description: Files list
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
files:
type: array
items:
$ref: '#/components/schemas/StoredFile'
total:
type: integer
hasMore:
type: boolean
/storage/files/{id}:
get:
operationId: getStoredFile
summary: Get Stored File
description: Serve a stored file directly (local storage) or redirect to a signed S3 URL. Supports JWT auth via `token` query parameter for use in `
` tags.
tags:
- Storage
security:
- BearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: thumb
in: query
schema:
type: string
enum:
- '0'
- '1'
description: Return thumbnail instead of full file
- name: token
in: query
schema:
type: string
description: JWT token as alternative to Authorization header (for
tags)
responses:
'200':
description: File content
'302':
description: Redirect to S3 signed URL
'401':
description: Unauthorized
'404':
description: File not found
delete:
operationId: deleteStoredFile
summary: Delete Stored File
description: Permanently delete a stored file.
tags:
- Storage
security:
- BearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: File deleted
'404':
description: File not found
/storage/user-s3:
get:
operationId: getUserS3Config
summary: Get S3 Configuration
description: Returns the user's custom S3 configuration (access key ID masked).
tags:
- Storage
security:
- BearerAuth: []
responses:
'200':
description: S3 config (access key masked)
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
configured:
type: boolean
bucket:
type: string
nullable: true
region:
type: string
nullable: true
accessKeyId:
type: string
nullable: true
description: Partially masked
endpoint:
type: string
nullable: true
post:
operationId: saveUserS3Config
summary: Save S3 Configuration
description: Save custom S3 credentials for storing screenshots in your own bucket.
tags:
- Storage
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- bucket
- region
- accessKeyId
properties:
bucket:
type: string
region:
type: string
accessKeyId:
type: string
secretAccessKey:
type: string
description: Required for new configs; optional to preserve existing value
endpoint:
type: string
description: Custom S3 endpoint for non-AWS providers (e.g., Cloudflare R2)
examples:
aws:
summary: AWS S3
value:
bucket: my-screenshots
region: us-east-1
accessKeyId: AKIA...
secretAccessKey: '...'
r2:
summary: Cloudflare R2
value:
bucket: my-screenshots
region: auto
accessKeyId: '...'
secretAccessKey: '...'
endpoint: https://.r2.cloudflarestorage.com
responses:
'200':
description: S3 settings saved
'400':
description: Validation error
delete:
operationId: deleteUserS3Config
summary: Delete S3 Configuration
description: Remove the custom S3 configuration.
tags:
- Storage
security:
- BearerAuth: []
responses:
'200':
description: S3 settings removed
/storage/user-s3/test:
post:
operationId: testUserS3Connection
summary: Test S3 Connection
description: Test connectivity to the configured S3 bucket by attempting a put/get/delete operation.
tags:
- Storage
security:
- BearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
required:
- bucket
- region
- accessKeyId
properties:
bucket:
type: string
region:
type: string
accessKeyId:
type: string
secretAccessKey:
type: string
endpoint:
type: string
responses:
'200':
description: Connection test passed
'400':
description: Connection test failed — check credentials and bucket name
components:
schemas:
StoredFile:
type: object
properties:
id:
type: string
storageType:
type: string
enum:
- local
- user_s3
originalUrl:
type: string
format:
type: string
fileSize:
type: integer
width:
type: integer
nullable: true
height:
type: integer
nullable: true
url:
type: string
nullable: true
description: Signed URL to access the file
thumbnailUrl:
type: string
nullable: true
createdAt:
type: string
format: date-time
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