CartViral Characters API
The Characters API from CartViral — 2 operation(s) for characters.
The Characters API from CartViral — 2 operation(s) for characters.
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-characters-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 Characters 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: Characters
paths:
/characters:
post:
operationId: createCharacter
summary: Two portraits of a new brand character
description: Two portraits of a recurring person for the brand (who, age, look, or from a real person's photo with consent), 2 credits. Then save_character with the portrait you like; generate_clips and remake_from_reference take its character_id so the same face stars in every clip.
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: false
content:
application/json:
schema:
type: object
properties:
description:
type: string
description: 'Look: hair, face, style, vibe'
gender:
type: string
enum:
- female
- male
default: female
age:
type: string
enum:
- 20s
- 30s
- 40s
- 50s
- 60s
default: 30s
photo:
type: string
description: 'Optional photo of a real person (needs consent): a CartViral /u/ link, or any public https link to the file (downloaded once)'
consent:
type: boolean
description: true = it is the user on the photo, or the user has that person's consent. Required for a real person's photo.
required: []
tags:
- Characters
get:
operationId: listCharacters
summary: The brand's saved characters
description: The brand's saved characters with their character_id, look and portrait. Free.
x-openai-isConsequential: false
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'
tags:
- Characters
/characters/save:
post:
operationId: saveCharacter
summary: Keep a portrait as a brand character
description: Keep one of the create_character portraits (or any portrait link) as the brand's character. Returns its character_id. Free.
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:
portrait_url:
type: string
description: 'The portrait: a CartViral /u/ link, or any public https link to the file (downloaded once)'
name:
type: string
description: e.g. Mia
description:
type: string
gender:
type: string
enum:
- female
- male
age:
type: string
enum:
- 20s
- 30s
- 40s
- 50s
- 60s
required:
- portrait_url
tags:
- Characters
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