curl --request POST \
--url https://www.genviral.io/api/partner/v1/packs/11111111-1111-1111-1111-111111111111/images \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"image_url": "https://cdn.example.com/packs/motivation/03.jpg",
"file_name": "03.jpg"
}'
{
"ok": true,
"code": 201,
"message": "Pack image added",
"data": {
"id": "44444444-4444-4444-4444-444444444444",
"url": "https://cdn.example.com/packs/motivation/03.jpg",
"file_name": "03.jpg",
"content_type": "image/jpeg",
"metadata": {
"status": "pending",
"description": null,
"keywords": [],
"model": "gpt-4.1-nano",
"generated_at": null,
"error": null
}
}
}
Packs
Add Pack Image
Add one image URL reference to a pack
POST
/
api
/
partner
/
v1
/
packs
/
{packId}
/
images
curl --request POST \
--url https://www.genviral.io/api/partner/v1/packs/11111111-1111-1111-1111-111111111111/images \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"image_url": "https://cdn.example.com/packs/motivation/03.jpg",
"file_name": "03.jpg"
}'
{
"ok": true,
"code": 201,
"message": "Pack image added",
"data": {
"id": "44444444-4444-4444-4444-444444444444",
"url": "https://cdn.example.com/packs/motivation/03.jpg",
"file_name": "03.jpg",
"content_type": "image/jpeg",
"metadata": {
"status": "pending",
"description": null,
"keywords": [],
"model": "gpt-4.1-nano",
"generated_at": null,
"error": null
}
}
}
Adds one image URL to a pack you can mutate.
Behavior
- Stores the provided
image_urland inferred file metadata on the pack. - Queues AI image metadata enrichment (
description,keywords) for async processing. - Does not download, fetch, or re-host the remote file during this call.
- If you only have local file bytes, use Upload File first and then pass the returned
urlasimage_url.
image_url should still be reachable when slideshow generation/render runs.
Temporary or private URLs can fail later.Path Parameters
string
required
Pack UUID.
Body Parameters
string
required
Absolute image URL.
string
Optional display filename (
1-255 chars). Default: "image".The API infers
content_type from URL extension (.png, .gif, .webp,
.heic, .heif, .avif) and defaults to image/jpeg when unknown.curl --request POST \
--url https://www.genviral.io/api/partner/v1/packs/11111111-1111-1111-1111-111111111111/images \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"image_url": "https://cdn.example.com/packs/motivation/03.jpg",
"file_name": "03.jpg"
}'
{
"ok": true,
"code": 201,
"message": "Pack image added",
"data": {
"id": "44444444-4444-4444-4444-444444444444",
"url": "https://cdn.example.com/packs/motivation/03.jpg",
"file_name": "03.jpg",
"content_type": "image/jpeg",
"metadata": {
"status": "pending",
"description": null,
"keywords": [],
"model": "gpt-4.1-nano",
"generated_at": null,
"error": null
}
}
}
Error Responses
400 missing_pack_id- path param missing400 invalid_json- body is not valid JSON422 invalid_payload- schema validation failed404 not_found- pack is missing/outside mutable key scope401- authentication failed (missing/invalid/revoked token)402 subscription_required- active Creator/Professional/Business plan required403 tier_not_allowed- Scheduler tier cannot use Partner API500 pack_image_add_failed- unexpected insertion failure
