CartViral Clips API
The Clips API from CartViral — 2 operation(s) for clips.
The Clips API from CartViral — 2 operation(s) for clips.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/cartviral-com:cartviral-com-clips-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: CartViral Clips API
version: 1.0.0
description: 'AI product videos for e-commerce: import products, generate TikTok, Reels and Shorts clips, get download links, and work with the CartViral Earn creator marketplace. Same operations as the MCP server at https://app.cartviral.com/mcp. Docs: https://cartviral.com/api'
contact:
name: CartViral
email: support@cartviral.com
url: https://cartviral.com
servers:
- url: https://app.cartviral.com/api/v1
security:
- bearer: []
- oauth:
- mcp
tags:
- name: Clips
paths:
/clips:
post:
operationId: generateClips
summary: Queue clips of a product
description: 'Queue vertical 9:16 clips (TikTok, Reels, Shorts) of one catalog product. Types and credit cost: montage (1, fast photo montage, ready in a few minutes), ai_story (6, an AI story written and shot by CartViral''s AI engine), avatar (12, a creator on camera talks about the product), ad (6, kept for older integrations: the same AI clip as ai_story, the engine makes native clips without price tags). AI clips take 10-15 minutes. Optional format: an exact engine format id instead of letting the brain pick one (e.g. ugc_dupe for a dupe-style creator clip); its family must match clip_type, ai_story and ad need a story format, avatar needs a creator/UGC format, montage has no formats. Credits are charged from the account; a failed render refunds automatically. Poll list_clips for download links.'
x-openai-isConsequential: true
parameters: []
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
additionalProperties: true
'400':
description: Invalid input or the action could not be done; body has an error message
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid credentials
'429':
description: 'Rate limit: 120 calls per minute per key'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
product_id:
type: string
description: Product id from list_products
clip_type:
type: string
enum:
- montage
- ai_story
- ad
- avatar
format:
type: string
enum:
- demo_loop
- ugc_discovery
- try_on
- double_take
- problem_hack
- before_after
- uses_list
- dont_show
- pov_moment
- test_challenge
- grwm
- fit_check_honest
- texture_macro
- first_reaction
- lights_on_reveal
- maker_process
- makes_sense
- build_a_stack
- ugc_review
- ugc_unboxing
- ugc_first_reaction
- grwm_talk
- ugc_storytime
- ugc_top3
- ugc_before_you_buy
- ugc_dupe
- ugc_regret
- ugc_dilo
- progress_diary
- pov_asmr_hands
- product_asmr
description: Optional exact format id; must fit clip_type's family (story for ai_story/ad, ugc for avatar). Leave out to let the engine pick.
count:
type: integer
minimum: 1
maximum: 5
default: 1
character_id:
type: string
description: 'Optional brand character (list_characters / save_character): the same person stars in the clip. Not for montage.'
captions:
type: string
enum:
- bold
- native
- none
description: 'Text on the video: bold (default, big words that light up as they are spoken), native (small TikTok-like phrases) or none (no subtitles, top texts or feature labels at all, the voice stays). Not for montage.'
required:
- product_id
- clip_type
tags:
- Clips
get:
operationId: listClips
summary: Clips with render status and download links
description: Recent clips of the account's catalog, newest first, with render status and, when done, a download link and a stream link (both valid for 24 hours).
x-openai-isConsequential: false
parameters:
- name: status
in: query
required: false
schema:
type: string
enum:
- any
- done
- rendering
- error
default: any
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 50
default: 20
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
additionalProperties: true
'400':
description: Invalid input or the action could not be done; body has an error message
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid credentials
'429':
description: 'Rate limit: 120 calls per minute per key'
tags:
- Clips
/clips/remake:
post:
operationId: remakeFromReference
summary: Remake a viral video, with your product or without one
description: 'Turn a proven video into a new clip with the same structure and format: CartViral''s engine watches the reference end to end (its hook, story beats in order such as problem, versus, solution and payoff, timings and pacing), then writes and shoots new lines on that structure, never the reference''s people or brand. With product_id the clip stars that catalog product. Without product_id it is a remake with no product: pass topic (what the video is about, e.g. ''my coffee shop'' or ''a tip for sellers''), or leave it out to keep the reference''s own topic in new words; nothing is sold in it and no product photo is used. The reference must be a direct https link to a video file, or a CartViral /u/... link (upload_media); TikTok, Instagram, YouTube and other social post pages cannot be read yet, so a plain post link is refused before anything is charged. Same price and refund-on-failure as an ai_story clip (see generate_clips), with or without a product. AI clips take 10-15 minutes. Poll list_clips for download links.'
x-openai-isConsequential: true
parameters: []
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
additionalProperties: true
'400':
description: Invalid input or the action could not be done; body has an error message
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid credentials
'429':
description: 'Rate limit: 120 calls per minute per key'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
product_id:
type: string
description: 'Optional: product id from list_products. Leave it out for a remake without a product.'
topic:
type: string
description: 'Only without product_id: what the new video is about, one line (e.g. ''my coffee shop'', ''a tip for sellers''). Leave it out to keep the reference''s own topic in new words.'
reference_url:
type: string
description: A direct https link to the reference video file, or a CartViral-uploaded /u/... link. Social post pages (TikTok, Instagram, YouTube Shorts, etc.) are not readable yet and are refused with a clear message.
note:
type: string
description: 'Optional: what to change or emphasize, e.g. ''keep the hook but open on the product being unboxed'''
captions:
type: string
enum:
- bold
- native
- none
description: 'Text on the video: bold (default, big words that light up as they are spoken), native (small TikTok-like phrases) or none (no subtitles, top texts or feature labels at all, the voice stays).'
character_id:
type: string
description: 'Optional brand character (list_characters): the same person stars in the remake'
required:
- reference_url
tags:
- Clips
components:
schemas:
Error:
type: object
properties:
error:
type: string
required:
- error
securitySchemes:
bearer:
type: http
scheme: bearer
description: API key from Account → AI agents (cv_live_...), or an OAuth access token
oauth:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://app.cartviral.com/oauth/authorize
tokenUrl: https://app.cartviral.com/oauth/token
refreshUrl: https://app.cartviral.com/oauth/token
scopes:
mcp: Use your CartViral account