Upload API
Upload images to Pixault via multipart form POST. All upload endpoints require API key authentication.
Authentication
Include your credentials in every request:
Legacy single-key authentication is also supported:
Upload an Image
POST /api/{project}/upload
Upload a single image with optional metadata.
Query Parameters
Parameter | Type | Required | Description |
|---|---|---|---|
| string | No | Virtual folder path for organization (e.g. |
Form Fields
Field | Type | Required | Description |
|---|---|---|---|
| File | Yes | Image file (JPEG, PNG, WebP, AVIF, GIF, SVG, EPS) |
| string | No | Image name / title |
| string | No | Image description |
| string | No | Accessible text alternative / alt text |
| string | No | Semantic category (e.g. portfolio, headshot) |
| string | No | Comma-separated searchable keywords |
| string | No | Creator/author name |
| boolean | No | Strip EXIF data from uploaded image |
Example
Response 201 Created
List Images
GET /api/{project}/images
Retrieve a paginated list of images.
Query Parameters
Parameter | Type | Default | Description |
|---|---|---|---|
| int | 50 | Results per page |
| string | — | Pagination cursor from previous response |
| string | — | Search across metadata fields |
| string | — | Filter by category |
| string | — | Filter by keyword |
| string | — | Filter by author |
| string | — | Filter by folder path |
| bool | — | Filter to videos only ( |
| bool |
| Include derived assets (EPS rasterizations, splits) |
Example
Response 200 OK
Get Image Metadata
GET /api/{project}/{imageId}/metadata
Returns the full metadata for a single image.
Response 200 OK
Delete an Image
DELETE /api/{project}/{imageId}
Permanently delete an image and all its cached variants.
Response 204 No Content
No body returned.
Supported Formats
Format | MIME Type | Upload | Max Size | Delivery |
|---|---|---|---|---|
JPEG |
| Yes | 20 MB | Yes |
PNG |
| Yes | 20 MB | Yes |
WebP |
| Yes | 20 MB | Yes |
AVIF |
| Yes | 20 MB | Yes |
GIF |
| Yes | 20 MB | Yes |
SVG |
| Yes | 20 MB | Yes (sanitized) |
EPS |
| Yes | 50 MB | Yes (rasterized to PNG) |
SVG Handling
SVGs are sanitized on upload to remove potentially dangerous elements (scripts, external references). SVGs can be served as-is or rasterized to bitmap format via transform parameters.
EPS Handling
EPS (Encapsulated PostScript) files are accepted for upload and automatically rasterized to high-resolution PNG in the background via Ghostscript. EPS support is designed for stock photo workflows — files from Shutterstock and similar services often contain multiple designs in a single EPS that are unusable without Illustrator.
Upload flow:
Upload an EPS file — validated via PostScript header and BoundingBox DSC comment
Background processing rasterizes the EPS to PNG at 300 DPI
Multi-page files produce one derived PNG per page
The upload response includes a
processingJobIdfor tracking progress
Derived assets:
Rasterized PNGs are linked to the parent EPS via
sourceAssetIdDerived assets are excluded from the main gallery listing by default (use
includeDerived=trueto include them)The parent EPS thumbnail automatically uses the first rasterized PNG
Design splitting:
For single-page EPS files containing multiple designs (common in stock vector packs), use
POST /api/{project}/{imageId}/splitto auto-detect and extract individual designsSplitting uses whitespace gap detection to partition the image into a grid of content regions
SVG extraction:
Use
POST /api/{project}/{imageId}/extract-svgto convert the EPS to a vector SVG, preserving all paths and shapesThe pipeline converts EPS → PDF (via Ghostscript) → SVG (via pdftocairo), then sanitizes the output
If multiple designs are detected, individual SVGs are also extracted (derivation types
svg-1,svg-2, etc.)The full-page SVG is saved with derivation type
svg
EPS API endpoints:
Method | Route | Description |
|---|---|---|
GET |
| List derived assets for an EPS parent |
GET |
| Check EPS processing job status |
POST |
| Trigger auto-split for multi-design files |
POST |
| Extract vector SVG from EPS |
On-demand delivery: EPS originals can also be requested via the standard transform URL pattern (e.g., /{project}/{epsId}/w_800.webp). The delivery pipeline rasterizes the EPS on-demand and caches the result, so subsequent requests are served from cache.
Video Upload
POST /api/{project}/upload
Upload video files using the same endpoint. Pixault auto-generates thumbnail frames.
Format | Supported |
|---|---|
MP4 | Yes |
WebM | Yes |
MOV | Yes |
Videos support range-request streaming for playback.
Rate Limits
Upload endpoints use per-API-key token bucket rate limiting:
Limit | Value |
|---|---|
Requests per minute | 100 per API key |
Queue depth | 10 |
Storage Quotas
Uploads are subject to your plan's storage limits. If you exceed your storage quota:
Paid plans: Overages accrue at your plan's overage rate
Trial/Free: Uploads are rejected with
413 Payload Too Large
Check your current usage in the billing dashboard.