Files
Upload File
Upload images and videos to Genviral CDN for use in TikTok slideshows, Instagram carousels, YouTube Shorts, Pinterest pins, LinkedIn posts, and Facebook content. Supports programmatic uploads from OpenClaw agents and automation pipelines.
POST
Upload media files directly to Genviral’s CDN. The returnedDocumentation Index
Fetch the complete documentation index at: https://docs.genviral.io/llms.txt
Use this file to discover all available pages before exploring further.
url can then be used when creating posts via /posts or attaching images to packs via /packs/{packId}/images. The stored path is derived from key scope (partner-api/workspaces/{workspaceId} or partner-api/users/{ownerUserId}).
How It Works
- Call this endpoint with the file’s content type
- Receive a presigned
uploadUrland the finalurl(CDN URL) - Upload your file directly to the
uploadUrlusing a PUT request - Use the
urlin post creation requests or pack-image attachment requests
Body Parameters
MIME type of the file. Supported types:
- Images:
image/jpeg,image/png,image/gif,image/webp,image/heic,image/heif - Videos:
video/mp4,video/quicktime,video/x-msvideo,video/webm,video/x-m4v
Original filename for reference (optional). Used for display purposes only.
Optional video duration in seconds. Also accepts
duration_seconds, duration, durationSec,
or video_duration_sec. Stored with the CDN file record so /posts can hydrate validation
metadata when you use the returned url.Optional file size in bytes. Also accepts
size.Response
Successful requests return201 with:
uploadUrl- Presigned URL to upload your file (expires in 10 minutes)url- CDN URL where your file will be accessible after uploadcontentType- The content type you specifiedexpiresIn- Seconds until the upload URL expires (600)
Using With Packs
If your goal is to add a local file to a pack:- Call this endpoint and capture
data.uploadUrl+data.url. - Upload your bytes to
data.uploadUrlwithPUT. - Call Add Pack Image with
image_url = data.url.
Examples
Upload a video
Error Responses
400 invalid_json- Request body is not valid JSON422 invalid_payload- Invalid content type or missing required fields401- authentication failed (missing/invalid/revoked token)402 subscription_required- active Creator/Professional/Business plan required403 tier_not_allowed- Scheduler tier cannot use Partner API500 create_failed- Failed to initialize upload (retry)
The presigned upload URL expires after 10 minutes. If it expires before you upload,
simply request a new one.
