Error Handling
The VibePeak API uses standard HTTP status codes and returns detailed error information to help you diagnose and resolve issues.Error Response Format
All errors follow a consistent structure:HTTP Status Codes
Error Codes Reference
Authentication Errors
INVALID_API_KEY
INVALID_API_KEY
vpk_live_xxxxx or vpk_test_xxxxx).MISSING_API_KEY
MISSING_API_KEY
Authorization: Bearer vpk_live_xxxxx header to your request.Authorization Errors
PLAN_NOT_ALLOWED
PLAN_NOT_ALLOWED
message:- No API access at all: your plan doesn’t include API access. Only Plus, Pro, Max, and Enterprise plans have API access.
- Family feature gated on your plan: your plan has API access, but working with families requires a higher plan. Creating, editing (adding, updating, regenerating, or removing a member), deleting, and using a family (as
selected_family_id) all require Pro, Max, or Enterprise. Listing and reading families is open to every plan.
INSUFFICIENT_CREDITS
INSUFFICIENT_CREDITS
AVATAR_ACCESS_DENIED
AVATAR_ACCESS_DENIED
VOICE_ACCESS_DENIED
VOICE_ACCESS_DENIED
VOICE_EXPIRED
VOICE_EXPIRED
Internal Service Errors
AVATAR_URL_ERROR
AVATAR_URL_ERROR
Rate Limiting Errors
CONCURRENCY_LIMIT_EXCEEDED
CONCURRENCY_LIMIT_EXCEEDED
Validation Errors
INVALID_JSON
INVALID_JSON
- Missing or extra commas
- Unquoted property names
- Single quotes instead of double quotes
- Trailing commas in arrays or objects
- Unescaped special characters in strings
VALIDATION_ERROR
VALIDATION_ERROR
orientation.INVALID_JSON
INVALID_JSON
VALIDATION_ERROR when the body itself is malformed.Content-Type: application/json header is set. Serialize the body with your language’s JSON encoder rather than building it by hand.INVALID_AVATAR_ID
INVALID_AVATAR_ID
a1b2c3d4-e5f6-7890-abcd-ef1234567890).INVALID_VOICE_ID
INVALID_VOICE_ID
IMAGE_INACCESSIBLE
IMAGE_INACCESSIBLE
IMAGE_TIMEOUT
IMAGE_TIMEOUT
MIXED_ORIENTATIONS. Use the optional orientation field to request portrait or landscape output explicitly, or omit it and let the API auto-detect from the first image.SSRF_BLOCKED
SSRF_BLOCKED
Script Length Errors
Thescript field must fit a per-scene budget that scales with the number of images. Each image becomes a scene of roughly 3 seconds, so the script needs 65–85 characters per image to produce a video where the narration neither cuts off early nor leaves silence at the end.
SCRIPT_TOO_SHORT
SCRIPT_TOO_SHORT
image_count × 65 characters. The narration would end before the video does, leaving silent frames.min_length characters, or remove images until image_count × 65 ≤ your script length.SCRIPT_TOO_LONG
SCRIPT_TOO_LONG
image_count × 85 characters. The narration would be rushed to fit within the video, harming TTS quality.max_length characters, or add more images until image_count × 85 ≥ your script length.SCRIPT_INVALID_CHARACTERS
SCRIPT_INVALID_CHARACTERS
Not Found Errors
USER_NOT_FOUND
USER_NOT_FOUND
AVATAR_NOT_FOUND
AVATAR_NOT_FOUND
VOICE_NOT_FOUND
VOICE_NOT_FOUND
TASK_NOT_FOUND
TASK_NOT_FOUND
FAMILY_NOT_FOUND
FAMILY_NOT_FOUND
selected_family_id on Create Living Property Video.FAMILY_MEMBER_NOT_FOUND
FAMILY_MEMBER_NOT_FOUND
index in the path doesn’t match any member in the family’s members array. Returned by Update Family Member, Regenerate Family Member Portrait, and Remove Family Member.index within the bounds of its members array.Family Errors
FAMILY_NOT_READY
FAMILY_NOT_READY
ready (it’s still generating, pending_avatars, or failed). Returned when passing a non-ready family as selected_family_id, and by the family member endpoints when a generation is already in progress for the family: only one add, update, regenerate, or remove operation can run at a time.- Initial generation (a family that has never finished): poll
Get Family until
statusisready. - An edit already in progress: poll the
task_idthat edit returned via Get Task, or poll the family until itsstatusreturns toready. Get Task is the more direct option and is the only one that surfaces a failure reason.
FAMILY_MEMBER_LIMIT_EXCEEDED
FAMILY_MEMBER_LIMIT_EXCEEDED
members array on Create Family has fewer than 1 or more than 6 entries, or Add Family Member would push the family past 6 members.members between 1 and 6 entries; remove a member before adding a new one if you’re already at the limit.FAMILY_MEMBER_MINIMUM
FAMILY_MEMBER_MINIMUM
FAMILY_LIMIT_REACHED
FAMILY_LIMIT_REACHED
STORY_FAMILY_REQUIRED
STORY_FAMILY_REQUIRED
story_mode is true on Create Living Property Video but selected_family_id is missing. Story Mode is told through a family cast, so a family is required.ready family’s UUID, or a preset slug, as selected_family_id.STORY_ROOM_TYPE_REQUIRED
STORY_ROOM_TYPE_REQUIRED
story_mode is true but one or more images have no room_type. The planner needs a room for every image to order the scenes across the day.room_type to the images at the indices listed in details.images_missing_room_type.STORY_PLAN_FAILED
STORY_PLAN_FAILED
story_mode for a standard video.Task Errors
IMAGE_PROCESSING_FAILED
IMAGE_PROCESSING_FAILED
TEST_MODE_SIMULATED_FAILURE
TEST_MODE_SIMULATED_FAILURE
vpk_test_ key includes "test_scenario": "fail". It lets you exercise your error-handling code without spending credits. The same livemode: false field that appears on every sandbox response is also set on the task status.fail test scenario — not a real failure. Treat it as a hand-rolled fixture for your error-handling path. Do not retry: the same test_scenario will keep returning the same error. See Test Mode → The test_scenario parameter for the other scenarios.INVALID_IMAGE_URL
INVALID_IMAGE_URL
INVALID_WATERMARK_URL
INVALID_WATERMARK_URL
elements_config.watermark.url is inaccessible or does not return an
image. This is validated up front so a broken logo URL fails immediately
instead of after the video has rendered. A common cause is a storage URL
whose object has been deleted or moved — it returns application/json
(“Object not found”) rather than the image.image/* content type (PNG, JPEG, WebP, SVG, or ICO).IMAGE_RESOLUTION_TOO_LOW
IMAGE_RESOLUTION_TOO_LOW
Service Errors
SERVICE_TIMEOUT
SERVICE_TIMEOUT
SERVICE_ERROR
SERVICE_ERROR
TTS_ERROR
TTS_ERROR
QUEUE_ERROR
QUEUE_ERROR
Handling Errors
Retry Strategy
For transient errors, implement exponential backoff:Getting Support
When contacting support, include:- Request ID - Found in every error response
- Error code - The machine-readable error code
- Timestamp - When the error occurred
- Request details - The endpoint and parameters used

