Quick Start
Everything you need to start generating videos with the Golpo REST API.
Auth header
x-api-key: YOUR_API_KEYContent-Type
application/jsonBest for
Server-to-server integrations, automation workflows, internal dashboards, partner apps
Prerequisites
Valid API plan · API key issued per workspace · HTTPS requests only
Endpoints
Five REST endpoints covering the full video lifecycle — generate, list, retrieve, update, and delete.
Generate a video from a prompt or script with customizable voice, visuals, music, and branding.
import fetch from "node-fetch";
const API_KEY = "api-key"; // Replace with your Golpo API key
const payload = {
prompt: "Explain the quarterly roadmap",
bg_music: "engaging"
};
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const response = await fetch(`${BASE_URL}/api/v1/videos/generate`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": API_KEY
},
body: JSON.stringify(payload)
});
const data = await response.json();
console.log(data);Run with: node --env-file=.env generate.js
Retrieve videos belonging to the authenticated user. Supports limit and offset query params.
import fetch from "node-fetch";
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
// Query params:
// limit — max number of videos to return (optional)
// offset — number of videos to skip (optional, for pagination)
const response = await fetch(`${BASE_URL}/api/v1/videos?limit=10&offset=0`, {
headers: {
"x-api-key": "api-key"
}
});
const data = await response.json();
console.log(data.videos); // array of video objects
console.log(data.total); // total number of videosRun with: node --env-file=.env list-videos.js
Retrieve metadata for a single video by ID.
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const VIDEO_ID = "video_id";
const response = await fetch(`${BASE_URL}/api/v1/videos/${VIDEO_ID}`, {
headers: { "x-api-key": "api-key" }
});
console.log(await response.json());Run with: node --env-file=.env get-video.js <video_id>
Update video metadata. Only 'title' and 'is_public' can be updated.
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const VIDEO_ID = "video_id";
const payload = { title: "Updated internal briefing" };
const response = await fetch(`${BASE_URL}/api/v1/videos/${VIDEO_ID}`, {
method: "PATCH",
headers: {
"Content-Type": "application/json",
"x-api-key": "api-key"
},
body: JSON.stringify(payload)
});
console.log(await response.json());Run with: node --env-file=.env update-video.js <video_id>
Delete a generated video.
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const VIDEO_ID = "video_id";
const response = await fetch(`${BASE_URL}/api/v1/videos/${VIDEO_ID}`, {
method: "DELETE",
headers: { "x-api-key": "api-key" }
});
console.log(await response.json());Run with: node --env-file=.env delete-video.js <video_id>
Poll the status endpoint to track generation progress.
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const JOB_ID = "job-id";
const response = await fetch(`${BASE_URL}/api/v1/videos/status/${JOB_ID}`, {
headers: { "x-api-key": "api-key" }
});
console.log(await response.json());Run with: node --env-file=.env job-status.js <job_id>
Request Body
Full parameter reference for POST /api/v1/videos/generate.
prompt or audio_clip is required. All other parameters are optional.| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
| prompt | string | — | Required | Main prompt/script for the video |
| upload_urls | array[string] | None | Optional | URLs of uploaded documents/images or local file paths. Use /upload-file endpoint to get URLs, or provide local paths directly |
| voice_instructions | string | "" | Optional | Describe how the narration voice should sound — accent, tone, pace, and delivery style. Examples: "Speak in a warm British accent with a calm, professorial tone", "Fast-paced sports commentator style". |
| just_return_script | boolean | false | Optional | Only generate script, don't create video/podcast |
| new_script | string | None | Optional | Use your own script instead of generating one. Useful for creating a video or podcast from an existing script. |
| style | string | "solo-female-3" | Optional | Content/Narration Style Accepted values: "solo-female-3" (Female 1, default), "solo-female-4" (Female 2), "solo-male-3" (Male 1), "solo-male-4" (Male 2). |
| use_color | boolean | true | Optional | Enable color video generation |
| language | string | "en" | Optional | Language code (e.g., 'en', 'es') |
| display_language | string | None | Optional | Language for on-screen text in the video (e.g., 'English', 'Hindi', 'French'). Useful when the displayed text should differ from the narration language. Defaults to the value of language if omitted. Example: language: "Hindi", display_language: "English" — the narrator speaks in Hindi while all on-screen text, titles, and labels are shown in English. NOTE:This parameter only works with Golpo Canvas. To use it, set use_2_0_style: true. |
| bg_music | string | None | Optional | Background music track |
| video_type | string | "long" | Optional | Video type: 'long' (horizontal) or 'short' (vertical) |
| audio_only | boolean | false | Optional | If true, generate podcast/audio only (no video) |
| timing | string | None | Optional | Video/Podcast timing/duration in minutes (numeric) or 'auto' to let the system determine duration Examples: timing: 0.25 (15s), timing: 0.5 (30s), timing: 1 (1 min), timing: 2 (2 min), timing: 4 (4 min), timing: "auto" (system-determined). |
| include_watermark | boolean | false | Optional | Include watermark in video |
| logo | string | None | Optional | Custom logo for branding. Provide a URL (via /upload-file) or a local file path |
| logo_placement | string | "tl" | Optional | Controls where the logo is placed on the video when logo is provided and include_watermark is true. Valid values: 'tl' (top-left, default), 'tr' (top-right), 'bl' (bottom-left), 'br' (bottom-right). |
| video_instructions | string | "" | Optional | Visual instructions to guide how the video looks. Examples: "Show more graphs and charts", "Include more stock footage", "Use cinematic transitions", "Dark moody aesthetic with neon accents". |
| use_lineart_2_style | string | "false" | Optional | Golpo Sketch style selector. "false" (Classic, default), "true" (Improved), "advanced" (Formal), "whiteboard" (Dry Erase), "modern_minimal" (Professional Clean), "storytelling" (Crayon). NOTE:Do not use this when use_2_0_style is enabled (Golpo Canvas). |
| audio_clip | string | None | Optional | URL to audio/video file or local file path to use instead of generating script and TTS. Use /upload-file endpoint to get URLs, or provide local paths directly. Useful for generating a video from your own existing audio or video narration. |
| user_audio_in_video | array[integer] | None | Optional | List of video numbers that should use AI-generated narration audio instead of their original audio (e.g., [1, 3] means videos 1 and 3 get AI narration; unlisted user videos keep their original audio) Only applies when user_videos is provided. Videos in this list will use AI-generated audio instead of original audio. Videos not in this list keep their original audio. If omitted or empty, all user videos retain their original audio. |
| user_images | array[string] | None | Optional | List of image URLs or local file paths to insert into the video. Use /upload-file endpoint to get URLs, or provide local paths directly |
| user_images_descriptions | array[string] | None | Optional | List of descriptions for user images (one per image) Helps the AI understand what each image contains and where to place it in the video for the best visual context. |
| use_as_is | array[boolean] | None | Optional | List of booleans indicating whether to use images as-is without AI processing (one per image) When true, the original image is used directly with no AI animation. When false, the AI generates an animated version of the image for the video. |
| skip_animation | array[boolean] | None | Optional | List of booleans indicating whether to skip animation for images (one per image) When true, the image appears as a static frame with no drawing or transition animation. When false, the image gets animated transitions. |
| user_videos | array[string] | None | Optional | List of video URLs or local file paths to insert into the video. Use /upload-file endpoint to get URLs, or provide local paths directly |
| user_videos_description | array[string] | None | Optional | List of descriptions for user videos (one per video) Provides context to the AI about each video's content, helping it decide where and how to place each clip in the generated video. |
| is_public | boolean | false | Optional | Whether the video should be public (true) or private (false). Public videos appear in the Golpo video gallery. |
| use_2_0_style | boolean | false | Optional | Enable Golpo Canvas (Earlier Golpo 2.0) style video generation. NOTE:Use image_style to set the visual style for Golpo Canvas — if not provided, the default style will be used. Do not pass use_lineart_2_style when this is enabled. |
| image_style | string | None | Optional | Image style for Golpo Canvas (2.0): 'neon', 'whiteboard', 'modern_minimal', 'playful', 'technical', or 'editorial'. NOTE:Only applicable for Golpo Canvas (use_2_0_style). Do not use with Golpo Sketch. |
| input_images | array[string] | None | Optional | List of input image URLs or local file paths for Golpo Canvas. Use this when you want to solve a problem visually or base the video on specific images — the video will be generated around the provided images. NOTE:Only applicable for Golpo Canvas (use_2_0_style). Do not use with Golpo Sketch. |
| pen_style | string | None | Optional | Pen cursor style: 'stylus', 'marker', or 'pen'. NOTE:Only applicable for Golpo Canvas (use_2_0_style). Do not use with Golpo Sketch. |
| show_pencil_cursor | boolean | false | Optional | Show a pencil cursor during sketch animations. If enabled, set pen_style to choose the cursor appearance. NOTE:Only applicable for Golpo Canvas (use_2_0_style). Do not use with Golpo Sketch. |
| pacing | string | "normal" | Optional | Pacing level: 'normal' (15s max per frame), 'fast' (10s max per frame). Works with both Golpo Sketch and Golpo Canvas. |
Parameter Groups
Parameters organized by purpose for easier discovery.
Content
Audio
Voice
Visual
Video Assets
Duration
Branding
Workflow
Upload File
Use /api/v1/videos/upload-file to get a hosted URL before calling /generate.
/upload-file into upload_urls, the file is permanently deleted from storage after its text is extracted during generation. The same URL cannot be reused for another video or podcast — you must upload the document again via /upload-file to get a fresh URL for each new generation.multipart/form-data| Field | Type | Required | Description |
|---|---|---|---|
| file | File | Yes | Single file to upload (file metadata is used to generate presigned URL) |
Documents
PDF · DOCX · PPTX · TXT
Audio
MP3 · WAV · M4A · OGG
Video
MP4 · MOV · AVI · MKV
Images
JPG · PNG · GIF · WEBP
// Response from POST /api/v1/videos/upload-file
{
"upload_url": "https://...", // Presigned PUT URL — upload the file here
"file_url": "https://...", // Pass this into /generate
"content_type": "application/pdf"
}const API_KEY = "api-key";
const BASE_URL = "{BASE_URL}";
// Step 1: Get presigned URL
async function uploadFile(file) {
const formData = new FormData();
formData.append('file', file);
const response = await fetch(`${BASE_URL}/api/v1/videos/upload-file`, {
method: 'POST',
headers: { 'x-api-key': API_KEY },
body: formData
});
const { upload_url, file_url, content_type } = await response.json();
// Step 2: Upload file to presigned URL
await fetch(upload_url, {
method: 'PUT',
headers: { 'Content-Type': content_type },
body: file
});
// Step 3: Return file_url for use in /generate
return file_url;
}
// Usage
const fileInput = document.querySelector('#file-input');
const fileUrl = await uploadFile(fileInput.files[0]);
console.log('File uploaded, URL:', fileUrl);
// Use fileUrl in your /generate requestUser Assets
Upload images or videos to embed directly into the generated video.
user_images and user_videos accept the file_url returned by /upload-file. local_path is also accepted for server-side usage. Descriptions are strongly recommended for best visual results.const API_KEY = "api-key";
const BASE_URL = "{BASE_URL}";
// Helper function to upload a file
async function uploadFile(file) {
const formData = new FormData();
formData.append('file', file);
const response = await fetch(`${BASE_URL}/api/v1/videos/upload-file`, {
method: 'POST',
headers: { 'x-api-key': API_KEY },
body: formData
});
const { file_url } = await response.json();
return file_url;
}
// Step 1: Upload images
const image1Url = await uploadFile(imageFile1);
const image2Url = await uploadFile(imageFile2);
// Step 2: Upload video
const video1Url = await uploadFile(videoFile1);
// Step 3: Generate video with user assets
const generatePayload = {
prompt: "Create a product showcase video",
user_images: [image1Url, image2Url],
user_images_descriptions: [
"Product front view with logo",
"Product in use by customer"
],
use_as_is: [false, false], // Process both images with AI
skip_animation: [false, true], // Animate first image, skip animation for second
user_videos: [video1Url],
user_videos_description: ["Customer testimonial video"],
video_type: "long",
include_watermark: false
};
const generateResponse = await fetch(`${BASE_URL}/api/v1/videos/generate`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': API_KEY
},
body: JSON.stringify(generatePayload)
});
const result = await generateResponse.json();
console.log('Job ID:', result.job_id);Local Paths
Pass absolute or relative file paths directly from server-side environments — no upload step required.
import fetch from "node-fetch";
import path from "path";
const API_KEY = "api-key";
const BASE_URL = "{BASE_URL}";
// Example: Using local file paths (server-side only)
// Paths are relative to where the script runs or absolute paths
const payload = {
prompt: "Create a comprehensive product demo video",
upload_urls: [
"./documents/product-spec.pdf", // Relative path (Linux/Mac/Windows)
"C:\\Users\\Documents\\brief.docx", // Windows absolute path
"/home/user/documents/slides.pptx", // Linux/Mac absolute path
"~/Documents/research.txt" // Home directory expansion (Linux/Mac)
],
logo: "./assets/company-logo.png",
user_images: [
"./images/product-front.jpg",
"./images/product-in-use.jpg"
],
user_images_descriptions: [
"Product front view with branding",
"Product being used by customer"
],
use_as_is: [false, false],
skip_animation: [false, true],
style: "solo-female-3",
bg_music: "engaging",
video_type: "long",
include_watermark: false,
use_color: true,
language: "en",
timing: "5"
};
const response = await fetch(`${BASE_URL}/api/v1/videos/generate`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": API_KEY
},
body: JSON.stringify(payload)
});
const data = await response.json();
console.log("Job ID:", data.job_id);Note: Local paths work when the API server can access these files. For remote clients, use /upload-file endpoint first.
Language Quickstarts
Ready-to-run examples for the most common video generation patterns.
Upload Workflow
Full pattern: upload supporting files, then generate a video in any language.
const API_KEY = "api-key";
const BASE_URL = "{BASE_URL}";
// Step 1: Upload files
async function uploadFile(file) {
const formData = new FormData();
formData.append('file', file);
const response = await fetch(`${BASE_URL}/api/v1/videos/upload-file`, {
method: 'POST',
headers: { 'x-api-key': API_KEY },
body: formData
});
const { file_url } = await response.json();
return file_url;
}
// Step 2: Upload all files and get URLs
const fileInput = document.querySelector('#uploads');
const uploadPromises = Array.from(fileInput.files).map(file => uploadFile(file));
const uploadUrls = await Promise.all(uploadPromises);
// Step 3: Generate video with uploaded files
const generatePayload = {
prompt: 'Summarize this slide deck for executives',
upload_urls: uploadUrls,
style: 'professional',
language: 'spanish'
};
const response = await fetch(`${BASE_URL}/api/v1/videos/generate`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': API_KEY
},
body: JSON.stringify(generatePayload)
});
const result = await response.json();
console.log('Generation started:', result);Attach files via <input id="uploads" type="file" multiple /> before calling this helper.
Golpo Sketch
use_lineart_2_styleWhiteboard-style sketch animation with pacing control — normal (15s/frame) or fast (10s/frame).
import fetch from "node-fetch";
const API_KEY = "api-key"; // Replace with your Golpo API key
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const payload = {
prompt: "Explain how neural networks work",
use_lineart_2_style: "true", // Options: "advanced" (Formal), "whiteboard" (Dry Erase), "modern_minimal" (Professional Clean), "storytelling" (Crayon)
pacing: "normal", // "normal" (15s max) or "fast" (10s max)
bg_music: "engaging",
include_watermark: false
};
const response = await fetch(`${BASE_URL}/api/v1/videos/generate`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": API_KEY
},
body: JSON.stringify(payload)
});
const data = await response.json();
console.log("Job ID:", data.job_id);Run with: node --env-file=.env golpo-sketch.js
Golpo Canvas
use_2_0_styleCanvas-based video with rich image styles (neon, whiteboard, editorial…) and optional pencil cursor.
import fetch from "node-fetch";
const API_KEY = "api-key"; // Replace with your Golpo API key
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const payload = {
prompt: "Create a product overview video",
use_2_0_style: true,
image_style: "modern_minimal", // "neon", "whiteboard", "modern_minimal", "playful", "technical", "editorial"
include_watermark: false
};
const response = await fetch(`${BASE_URL}/api/v1/videos/generate`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": API_KEY
},
body: JSON.stringify(payload)
});
const data = await response.json();
console.log("Job ID:", data.job_id);Run with: node --env-file=.env golpo-canvas.js
Display Language
Generate a video where the narration and the on-screen text are in different languages.
Display Language
display_languageGenerate a video where the narration and the on-screen text are in different languages — e.g. Hindi voice-over with English text displayed in the video.
use_2_0_style: true.import fetch from "node-fetch";
const API_KEY = "api-key"; // Replace with your Golpo API key
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
// The narrator speaks in Hindi, but all on-screen text,
// titles, and labels are displayed in English.
const payload = {
prompt: "Explain the water cycle",
language: "Hindi", // Voice / narration language
display_language: "English", // Language for on-screen text & visuals
style: "educational",
include_watermark: false
};
const response = await fetch(`${BASE_URL}/api/v1/videos/generate`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": API_KEY
},
body: JSON.stringify(payload)
});
const data = await response.json();
console.log("Job ID:", data.job_id);Run with: node --env-file=.env display-language.js
Generate Video
POST /api/v1/videos/generateGenerate a video from a prompt or script with customizable voice, visuals, music, and branding.
import fetch from "node-fetch";
const API_KEY = "api-key"; // Replace with your Golpo API key
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const payload = {
prompt: "Explain the quarterly roadmap",
bg_music: "engaging"
};
const response = await fetch(`${BASE_URL}/api/v1/videos/generate`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": API_KEY
},
body: JSON.stringify(payload)
});
const data = await response.json();
console.log(data);Run with: node --env-file=.env generate.js
List Videos
GET /api/v1/videosRetrieve videos belonging to the authenticated user. Supports limit and offset query params.
import fetch from "node-fetch";
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
// Query params:
// limit — max number of videos to return (optional)
// offset — number of videos to skip (optional, for pagination)
const response = await fetch(`${BASE_URL}/api/v1/videos?limit=10&offset=0`, {
headers: {
"x-api-key": "api-key"
}
});
const data = await response.json();
console.log(data.videos); // array of video objects
console.log(data.total); // total number of videosRun with: node --env-file=.env list-videos.js
Get Video
GET /api/v1/videos/{video_id}Retrieve metadata for a single video by ID.
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const VIDEO_ID = "video_id";
const response = await fetch(`${BASE_URL}/api/v1/videos/${VIDEO_ID}`, {
headers: { "x-api-key": "api-key" }
});
console.log(await response.json());Run with: node --env-file=.env get-video.js <video_id>
Update Video
PATCH /api/v1/videos/{video_id}Update video metadata. Only 'title' and 'is_public' can be updated.
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const VIDEO_ID = "video_id";
const payload = { title: "Updated internal briefing" };
const response = await fetch(`${BASE_URL}/api/v1/videos/${VIDEO_ID}`, {
method: "PATCH",
headers: {
"Content-Type": "application/json",
"x-api-key": "api-key"
},
body: JSON.stringify(payload)
});
console.log(await response.json());Run with: node --env-file=.env update-video.js <video_id>
Delete Video
DELETE /api/v1/videos/{video_id}Delete a generated video.
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const VIDEO_ID = "video_id";
const response = await fetch(`${BASE_URL}/api/v1/videos/${VIDEO_ID}`, {
method: "DELETE",
headers: { "x-api-key": "api-key" }
});
console.log(await response.json());Run with: node --env-file=.env delete-video.js <video_id>
Job Status
GET /api/v1/videos/status/{job_id}Poll the status endpoint to track generation progress.
const BASE_URL = "{BASE_URL}"; // You will receive this when creating an API key
const JOB_ID = "job-id";
const response = await fetch(`${BASE_URL}/api/v1/videos/status/${JOB_ID}`, {
headers: { "x-api-key": "api-key" }
});
console.log(await response.json());Run with: node --env-file=.env job-status.js <job_id>
Timing
Timing parameter reference — provide duration in minutes as a float, or "auto" to let the system determine the optimal duration.
| Value | Duration |
|---|---|
| 0.25 | 15 seconds |
| 0.5 | 30 seconds |
| 1 | 1 minute |
| 2 | 2 minutes |
| 4 | 4 minutes |
| 8 | 8 minutesBeta |
| 10 | 10 minutesBeta |
| "auto" | System-determined |
0.25, 0.5, 1, 2, 4, 8, 10, "auto"."auto" timing: Use auto timing when the content complexity should determine the video length. This is especially useful for problem-solving — for example, if you pass a math or physics problem via input_images, the engine will analyze the complexity and generate a script of the appropriate length (e.g., a simple problem may produce a 1-minute video, while a complex one may need 4+ minutes to explain thoroughly).Example: Auto Timing with Problem Solving
Pass a problem image via input_images with Golpo Canvas and let the engine decide how long the explanation should be.
{
"prompt": "Solve and explain this calculus problem step by step",
"input_images": [
"https://your-bucket.s3.amazonaws.com/calculus-problem.png"
],
"use_2_0_style": true,
"image_style": "whiteboard",
"timing": "auto",
"style": "solo-male-3",
"video_type": "long"
}Video Type
Controls the video aspect ratio and orientation.
| Value | Format | Dimensions | Use Cases |
|---|---|---|---|
| "short" | Vertical / Portrait | 1024×1536 px | TikTok, Instagram Reels, YouTube Shorts |
| "long" | Horizontal / Landscape (Default) | 1536×1024 px | YouTube, standard video content |
short
1024×1536 px
long (default)
1536×1024 px
Style & Voices
The style parameter controls both script format and voice selection.
Voice Selection
| Value | Voice Type | Description |
|---|---|---|
| "solo-female-3" | Female 1 | Female narrator voice (Default) |
| "solo-female-4" | Female 2 | Alternative female narrator voice |
| "solo-male-3" | Male 1 | Male narrator voice |
| "solo-male-4" | Male 2 | Alternative male narrator voice |
Background Music
Send the bg_music field in your JSON body using one of the following keys.
| bg_music key | Mood / Usage |
|---|---|
| "jazz" | Warm, neutral bed |
| "lofi" | Calm, study vibes |
| "whimsical" | Playful, upbeat |
| "dramatic" | Cinematic tension |
| "engaging" | Subtle corporate pulse |
| "hyper" | High-energy electronic |
| "inspirational" | Uplifting orchestral |
| "documentary" | Serious factual tone |
Voice Instructions
Describe how the voice should sound — accent, tone, or pronunciation style.
Pass an instructions in the voice_instructions field to guide voice generation. The AI will adjust accent, tone, pace, and delivery accordingly.
{
"prompt": "Explain quantum computing basics",
"voice_instructions": "Speak in a warm British accent with a calm, professorial tone. Pause slightly between key concepts for emphasis.",
"style": "solo-male-3"
}More examples
Video Instructions
Describe how the video should look — visuals, style, and scene direction.
Pass an instructions in the video_instructions field to guide the visual generation. The AI will adjust scene composition, imagery, and visual style accordingly.
{
"prompt": "Company quarterly results overview",
"video_instructions": "Use clean corporate visuals with data charts and graphs. Include stock footage of modern office environments. Prefer blue and white color palette.",
"style": "solo-female-3"
}More examples
Golpo Sketch Styles
The use_lineart_2_style parameter controls the whiteboard sketch animation style.
| Value | Style Name | Description |
|---|---|---|
| "false" | Classic (Default) | Original Golpo Sketch — classic whiteboard line-art animation |
| "true" | Improved Beta | Improved line-art with cleaner strokes and a more polished look |
| "advanced" | Formal | Advanced sketch generation with higher detail and refined aesthetics |
| "whiteboard" | Dry Erase | Clean whiteboard presentation style with smooth marker-like strokes |
| "modern_minimal" | Professional Clean | Modern minimalist design with clean geometric shapes and indigo accent |
| "storytelling" | Crayon | Hand-drawn crayon and colored pencil illustration with bold ink outlines |
use_lineart_2_style with use_2_0_style. Use one or the other.Golpo Canvas Styles
Enable Golpo Canvas with use_2_0_style and configure image_style and pen_style.
Set use_2_0_style: true to enable Golpo Canvas. Then use image_style to set the visual look and optionally pen_style to add a drawing cursor effect.
Pen Style
| Value | Description |
|---|---|
| "none" | No pen cursor (Default) |
| "stylus" | Thin stylus pen cursor |
| "marker" | Thick marker cursor |
| "pen" | Classic pen cursor |
pen_style and image_style are only applicable for Golpo Canvas (use_2_0_style: true). Do not use with Golpo Sketch.Image Style
Controls the visual style of Golpo Canvas videos. Only applicable when use_2_0_style is true.
| Value | Label | Description |
|---|---|---|
| "chalkboard_white" | Chalkboard (B/W) | Black & white chalkboard style (Default) |
| "neon" | Chalkboard Color | Colorful neon chalkboard style |
| "whiteboard" | Whiteboard | Clean whiteboard illustrations |
| "modern_minimal" | Modern Minimal | Sleek, minimal modern aesthetic |
| "playful" | Playful | Fun, colorful playful illustrations |
| "technical" | Technical | Technical diagram style |
| "editorial" | Editorial | Magazine/editorial illustration style |
| "marker" | Sharpie | Bold marker/sharpie drawn style |
{
"prompt": "How solar panels convert sunlight to electricity",
"use_2_0_style": true,
"image_style": "modern_minimal",
"pen_style": "stylus",
"timing": 2
}HTTP Status Codes
Standard HTTP codes returned by all endpoints.
| Code | Meaning | Recovery |
|---|---|---|
| 200 | Successful request (GET, POST, PATCH, or DELETE) | Consume response payload |
| 400 | Bad request (invalid fields or file types) | Check request body and field values |
| 401 | Missing or invalid authentication | Refresh token / validate API key |
| 403 | Plan does not allow requested action | Upgrade plan or contact support |
| 404 | Video / job not found | Verify identifiers belong to the account |
| 422 | Validation failure (bad payload) | Inspect detail array in response |
| 429 | Rate limit exceeded | Back off and retry with exponential delay |
| 500 | Unexpected server error | Retry later; contact support if persistent |
Error Response Format
All 4xx and 5xx responses return a JSON body with a detail field.
Schema validation — invalid parameter type or value returns detail as a structured array (one entry per failed field).
{
"detail": [
{
"type": "literal_error",
"loc": ["body", "style"],
"msg": "Input should be 'solo-female-3', 'solo-female-4', 'solo-male-3' or 'solo-male-4'",
"input": "formal",
"ctx": {
"expected": "'solo-female-3', 'solo-female-4', 'solo-male-3' or 'solo-male-4'"
}
}
]
}Application errors — auth, missing files, etc. return detail as a flat string.
{
"detail": "File not found at local path: /tmp/missing.png."
}Language Support
44+ languages supported via the language parameter.
| Language | Accepted values | Note |
|---|---|---|
| English | english or en | Default when omitted |
| Hindi | hindi or hi | — |
| Spanish | spanish or es | — |
| French | french or fr | — |
| German | german or de | — |
| Italian | italian or it | — |
| Portuguese | portuguese or pt | — |
| Russian | russian or ru | — |
| Japanese | japanese or ja | — |
| Korean | korean or ko | — |
| Chinese / Mandarin | chinese, mandarin, or zh | Both map to zh |
| Arabic | arabic or ar | — |
| Dutch | dutch or nl | — |
| Polish | polish or pl | — |
| Turkish | turkish or tr | — |
| Swedish | swedish or sv | — |
| Danish | danish or da | — |
| Norwegian | norwegian or no | — |
| Finnish | finnish or fi | — |
| Greek | greek or el | — |
| Czech | czech or cs | — |
| Hungarian | hungarian or hu | — |
| Romanian | romanian or ro | — |
| Thai | thai or th | — |
| Vietnamese | vietnamese or vi | — |
| Indonesian | indonesian or id | — |
| Malay | malay or ms | — |
| Tamil | tamil or ta | — |
| Telugu | telugu or te | — |
| Bengali | bengali or bn | — |
| Marathi | marathi or mr | — |
| Gujarati | gujarati or gu | — |
| Kannada | kannada or kn | — |
| Malayalam | malayalam or ml | — |
| Punjabi | punjabi or pa | — |
| Urdu | urdu or ur | — |
API Only Tier
Usage-based pricing with volume discounts
About this plan
This plan is for using Golpo within your program or application. You will not be able to use the Golpo platform to generate videos manually.
This is a usage-based plan with a minimum cost of $200 to enter. Perfect for developers and businesses who need programmatic access to video generation.
Pay only for what you use — volume-based pricing that gets better as you scale.
Platform access (manual video creation via the dashboard) is not included in this plan. If you need both platform + API access, please consider buying an enterprise plan or business plan with an API add-on.
Pricing Rates
Credit Conversion
$1
USD
1 Credit
Golpo credit
| Resource | Cost |
|---|---|
| 1 min videoVideo generation | 2 Credits= $2.00 |
Volume discounts apply at higher usage tiers. Contact us for enterprise rates. | |
Minimum entry: $200 (200 credits = ~100 minutes of video)