CartViral Clips API

The Clips API from CartViral — 2 operation(s) for clips.

Operations 3

POST /clips Queue clips of a product #
GET /clips Clips with render status and download links #
POST /clips/remake Remake a viral video, with your product or without one #

Specifications

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cartviral-com:cartviral-com-clips-api"
All apis
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.

Get an API 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 Specification

cartviral-com-clips-api-openapi.yml Raw ↑
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