CartViral Characters API

The Characters API from CartViral — 2 operation(s) for characters.

Operations 3

POST /characters Two portraits of a new brand character #
GET /characters The brand's saved characters #
POST /characters/save Keep a portrait as a brand character #

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-characters-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-characters-api-openapi.yml Raw ↑
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