ccapi-ai Seedance Trusted Asset Library API

List platform-reviewed public Seedance assets and private authorized assets owned by the current account. **Start with the official public virtual-avatar library**: it requires no real-person verification, and its returned `asset://` URIs can be used directly for video generation. Use the official verification and private-asset flow only when you need your own real person. Each verified group represents one real person. The platform does not retain identity documents, liveness captures, or source media URLs. Never guess or construct asset IDs. ## Recommended path 1. Call `GET /v1/video/assets?scope=public&kind=virtual_human` to choose an official public virtual avatar. 2. Copy the response `uri` into `POST /v1/videos`. 3. Start real-person verification and private-asset enrollment only for your own real person. ## Entry points - [Read the full official asset library guide](https://ccapi.ai/guides/seedance-official-asset-video) - [Open the compliant asset flow in the console](https://ccapi.ai/console/video-assets) - [Call the official public asset list](https://api.ccapi.ai/v1/video/assets?scope=public&kind=virtual_human) - [Read the official public virtual-avatar library introduction](https://www.volcengine.com/activity/Seedance2-0-security?infrom=100001.100.140) - [Start real-person verification](https://api.ccapi.ai/v1/video/real-person/enrollments) - [View the create-video API documentation](https://ccapi.ai/docs/en#tag/seedance-25-20-video-generation/POST/v1/videos)

Operations 10

GET /v1/video/assets List available trusted Seedance assets #
POST /v1/video/assets Submit an authorized real-person asset #
GET /v1/video/assets/mine List my private asset processing states #
DELETE /v1/video/assets/{asset_id} Revoke my private asset #
GET /v1/video/assets/{asset_id} Get a trusted Seedance asset #
PATCH /v1/video/assets/{asset_id} Update my private asset metadata #
POST /v1/video/assets/{asset_id}/refresh Refresh my private asset status #
GET /v1/video/real-person/enrollments List my real-person verifications #
POST /v1/video/real-person/enrollments Start official real-person verification #
POST /v1/video/real-person/enrollments/{enrollment_id}/complete Complete official real-person verification #

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/ccapi-ai:ccapi-ai-seedance-trusted-asset-library-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

ccapi-ai-seedance-trusted-asset-library-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: CCAPI Seedance Trusted Asset Library API
  description: CCAPI Model Gateway — OpenAI-compatible unified API
  version: 1.0.0
servers:
- url: https://api.ccapi.ai
  description: CCAPI API Gateway
tags:
- name: Seedance Trusted Asset Library
  description: 'List platform-reviewed public Seedance assets and private authorized assets owned by the current account. **Start with the official public virtual-avatar library**: it requires no real-person verification, and its returned `asset://` URIs can be used directly for video generation. Use the official verification and private-asset flow only when you need your own real person. Each verified group represents one real person. The platform does not retain identity documents, liveness captures, or source media URLs. Never guess or construct asset IDs.


    ## Recommended path


    1. Call `GET /v1/video/assets?scope=public&kind=virtual_human` to choose an official public virtual avatar.

    2. Copy the response `uri` into `POST /v1/videos`.

    3. Start real-person verification and private-asset enrollment only for your own real person.


    ## Entry points


    - Read the full official asset library guide

    - Open the compliant asset flow in the console

    - Call the official public asset list

    - Read the official public virtual-avatar library introduction

    - Start real-person verification

    - View the create-video API documentation'
paths:
  /v1/video/assets:
    get:
      description: Returns assets available to the current token for Seedance generation. The public library is available now. Start with `GET /v1/video/assets?scope=public&kind=virtual_human&model=doubao-seedance-2-0-fast-260128`, then copy the returned `uri` unchanged into the video request. The example asset below has passed production generation checks, but integrations should still read the URI from the list instead of hard-coding or constructing an asset ID. See POST /v1/videos for the complete request. Private real-person assets depend on a platform feature gate and upstream account configuration; when unavailable, the API returns HTTP 503.
      operationId: list-seedance-assets
      parameters:
      - description: Search names, descriptions, and tags. Percent and underscore characters are treated literally.
        in: query
        name: q
        schema:
          maxLength: 100
          type: string
      - description: Use public for reviewed public assets or private for assets owned by the current account. Omit to return both.
        in: query
        name: scope
        schema:
          enum:
          - public
          - private
          type: string
      - in: query
        name: kind
        schema:
          enum:
          - virtual_human
          - non_human
          - private_real_person
          - private_virtual
          type: string
      - in: query
        name: asset_type
        schema:
          enum:
          - Image
          - Video
          - Audio
          type: string
      - description: Return only assets that support this model
        in: query
        name: model
        schema:
          type: string
      - in: query
        name: page
        schema:
          default: 1
          minimum: 1
          type: integer
      - in: query
        name: page_size
        schema:
          default: 24
          maximum: 100
          minimum: 1
          type: integer
      responses:
        '200':
          content:
            application/json:
              example:
                data:
                - asset_type: Image
                  id: asset-20260804202332-gcmkm
                  kind: virtual_human
                  name: 'Official public virtual avatar: youth coach'
                  scope: public
                  source: official_seedance_library
                  status: Active
                  supported_models:
                  - doubao-seedance-2-0-260128
                  - doubao-seedance-2-0-fast-260128
                  uri: asset://asset-20260804202332-gcmkm
                has_more: false
                object: list
                page: 1
                page_size: 24
              schema:
                $ref: '#/components/schemas/SeedanceAssetList'
          description: Available assets
        '400':
          description: 'invalid_asset_filter: invalid filter input'
        '503':
          $ref: '#/components/responses/AssetLibraryDisabled'
      summary: List available trusted Seedance assets
      tags:
      - Seedance Trusted Asset Library
    post:
      description: Requires a verified enrollment owned by the current account and explicit authorization confirmation. The server binds ownership and the verified upstream group; clients cannot supply either. `source_url` must be HTTPS and is sent to the official asset service without being retained locally. The accepted asset starts as `Processing` and cannot be used for generation until refreshed to `Active`.
      operationId: create-private-seedance-asset
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePrivateSeedanceAssetRequest'
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SeedanceAsset'
          description: Asset accepted for official processing
        '400':
          description: invalid_private_asset_request or real_person_authorization_required
        '409':
          description: real_person_verification_required or real_person_project_mismatch
        '502':
          description: private_asset_create_upstream_error
        '503':
          $ref: '#/components/responses/PrivateAssetLibraryDisabled'
      summary: Submit an authorized real-person asset
      tags:
      - Seedance Trusted Asset Library
  /v1/video/assets/mine:
    get:
      description: Returns all private assets owned by the current account, including Processing, Failed, and revoked assets. Use the public list endpoint to obtain only Active generation-ready asset URIs.
      operationId: list-private-seedance-assets
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrivateSeedanceAssetList'
          description: Owner-scoped asset states
        '503':
          $ref: '#/components/responses/PrivateAssetLibraryDisabled'
      summary: List my private asset processing states
      tags:
      - Seedance Trusted Asset Library
  /v1/video/assets/{asset_id}:
    delete:
      description: Revokes the asset locally before requesting official upstream deletion. A revoked asset is rejected for generation immediately.
      operationId: delete-private-seedance-asset
      parameters:
      - $ref: '#/components/parameters/AssetID'
      responses:
        '200':
          description: Asset revoked
        '404':
          description: asset_not_found
        '502':
          description: private_asset_delete_upstream_error; local revocation has already taken effect
      summary: Revoke my private asset
      tags:
      - Seedance Trusted Asset Library
    get:
      operationId: get-seedance-asset
      parameters:
      - in: path
        name: asset_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SeedanceAsset'
          description: Asset details
        '404':
          description: Asset not found, not accessible, or revoked
        '503':
          $ref: '#/components/responses/AssetLibraryDisabled'
      summary: Get a trusted Seedance asset
      tags:
      - Seedance Trusted Asset Library
    patch:
      operationId: update-private-seedance-asset
      parameters:
      - $ref: '#/components/parameters/AssetID'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePrivateSeedanceAssetRequest'
        required: true
      responses:
        '200':
          description: Updated owner-scoped asset
        '404':
          description: asset_not_found
      summary: Update my private asset metadata
      tags:
      - Seedance Trusted Asset Library
  /v1/video/assets/{asset_id}/refresh:
    post:
      description: Checks the official service and updates Processing to Active or Failed. Upstream asset, group, project, and type must all match the owner-bound local record.
      operationId: refresh-private-seedance-asset
      parameters:
      - $ref: '#/components/parameters/AssetID'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SeedanceAsset'
          description: Current asset status
        '404':
          description: asset_not_found
        '409':
          description: private_asset_identity_mismatch or asset_namespace_mismatch
        '502':
          description: private_asset_status_upstream_error
      summary: Refresh my private asset status
      tags:
      - Seedance Trusted Asset Library
  /v1/video/real-person/enrollments:
    get:
      description: Returns only sessions owned by the current account. Official group IDs and verification secrets are never exposed.
      operationId: list-seedance-real-person-enrollments
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RealPersonEnrollmentList'
          description: Owner-scoped enrollment states
      summary: List my real-person verifications
      tags:
      - Seedance Trusted Asset Library
    post:
      description: Creates an official H5 verification session for the current account. Open `validation_url` before `expires_at`. Keep the returned one-time `validation_token` and `state` only until completion; they are stored server-side only as hashes.
      operationId: create-seedance-real-person-enrollment
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RealPersonEnrollmentSession'
          description: Verification session
        '502':
          description: real_person_verification_upstream_error
        '503':
          $ref: '#/components/responses/PrivateAssetLibraryDisabled'
      summary: Start official real-person verification
      tags:
      - Seedance Trusted Asset Library
  /v1/video/real-person/enrollments/{enrollment_id}/complete:
    post:
      description: After the official H5 page redirects with `resultCode=10000`, submit the original one-time token and state. The platform then retrieves and owner-binds the verified official asset group.
      operationId: complete-seedance-real-person-enrollment
      parameters:
      - in: path
        name: enrollment_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompleteRealPersonEnrollmentRequest'
        required: true
      responses:
        '200':
          description: Verification completed
        '403':
          description: real_person_verification_mismatch
        '409':
          description: real_person_verification_not_approved, real_person_enrollment_expired, or real_person_enrollment_not_pending
        '502':
          description: real_person_verification_upstream_error
      summary: Complete official real-person verification
      tags:
      - Seedance Trusted Asset Library
components:
  schemas:
    RealPersonEnrollmentList:
      properties:
        data:
          items:
            $ref: '#/components/schemas/RealPersonEnrollment'
          type: array
        object:
          example: list
          type: string
      type: object
    CreatePrivateSeedanceAssetRequest:
      properties:
        asset_type:
          enum:
          - Image
          - Video
          - Audio
          type: string
        authorization_confirmed:
          description: Explicit confirmation that the person authorized this media and its video-generation use
          enum:
          - true
          type: boolean
        description:
          maxLength: 500
          type: string
        enrollment_id:
          description: A verified enrollment owned by the current account
          type: string
        name:
          maxLength: 100
          type: string
        rights_expires_at:
          format: int64
          minimum: 0
          type: integer
        source_url:
          description: Temporary official-service input; not retained by this platform
          format: uri
          pattern: ^https://
          type: string
        tags:
          description: Private labels used only within the current account; they do not change official verification or safety status
          items:
            maxLength: 40
            type: string
          maxItems: 20
          type: array
      required:
      - enrollment_id
      - source_url
      - name
      - asset_type
      - authorization_confirmed
      type: object
    UpdatePrivateSeedanceAssetRequest:
      properties:
        description:
          maxLength: 500
          type: string
        name:
          maxLength: 100
          type: string
        tags:
          items:
            maxLength: 40
            type: string
          maxItems: 20
          type: array
      required:
      - name
      type: object
    PrivateSeedanceAssetList:
      properties:
        data:
          items:
            allOf:
            - $ref: '#/components/schemas/SeedanceAsset'
            - properties:
                failure_code:
                  type: string
              type: object
          type: array
        object:
          example: list
          type: string
      type: object
    SeedanceAsset:
      properties:
        asset_type:
          enum:
          - Image
          - Video
          - Audio
          type: string
        commercial_use:
          type: string
        description:
          type: string
        group_type:
          description: Safe asset-group classification; the upstream group ID is never returned
          type: string
        id:
          description: Use the ID exactly as returned
          type: string
        kind:
          enum:
          - virtual_human
          - non_human
          - private_real_person
          - private_virtual
          type: string
        license_label:
          type: string
        name:
          type: string
        preview_url:
          description: Returned only when display rights permit a preview
          type:
          - string
          - 'null'
        rights_expires_at:
          description: Authorization expiry as Unix seconds; 0 means the manifest declares no expiry. Expired assets are omitted and rejected before billing.
          format: int64
          type: integer
        scope:
          description: public is a platform-reviewed public asset; private belongs to the current account
          enum:
          - public
          - private
          type: string
        status:
          description: Only Active assets are returned by the public list and accepted for generation
          enum:
          - Processing
          - Active
          - Failed
          - Disabled
          type: string
        supported_models:
          items:
            type: string
          type: array
        tags:
          items:
            type: string
          type: array
        uri:
          description: Reference value for images, metadata.videos, metadata.audios, or native content[].*_url.url
          pattern: ^asset://
          type: string
      required:
      - id
      - uri
      - kind
      - scope
      - asset_type
      - status
      - supported_models
      - rights_expires_at
      type: object
    RealPersonEnrollmentSession:
      properties:
        expires_at:
          format: int64
          type: integer
        id:
          type: string
        state:
          description: One-time callback binding value
          type: string
        status:
          enum:
          - pending
          type: string
        validation_token:
          description: One-time completion secret; do not log or persist
          type: string
        validation_url:
          format: uri
          type: string
      required:
      - id
      - status
      - expires_at
      - validation_url
      - validation_token
      - state
      type: object
    CompleteRealPersonEnrollmentRequest:
      properties:
        result_code:
          enum:
          - '10000'
          type: string
        state:
          type: string
        validation_token:
          type: string
      required:
      - result_code
      - validation_token
      - state
      type: object
    SeedanceAssetList:
      properties:
        data:
          items:
            $ref: '#/components/schemas/SeedanceAsset'
          type: array
        has_more:
          type: boolean
        object:
          example: list
          type: string
        page:
          type: integer
        page_size:
          type: integer
      type: object
    RealPersonEnrollment:
      properties:
        expires_at:
          format: int64
          type: integer
        failure_code:
          type: string
        id:
          type: string
        status:
          enum:
          - pending
          - verified
          - expired
          - failed
          type: string
        verified_at:
          format: int64
          type: integer
      required:
      - id
      - status
      - expires_at
      type: object
  responses:
    PrivateAssetLibraryDisabled:
      content:
        application/json:
          example:
            error:
              code: private_asset_library_disabled
              message: Private Seedance assets are not enabled.
              type: invalid_request_error
      description: Private real-person assets are not enabled or configured
    AssetLibraryDisabled:
      content:
        application/json:
          example:
            error:
              code: asset_library_disabled
              message: The trusted Seedance asset library is not enabled.
              type: invalid_request_error
      description: Trusted asset library is not enabled
  parameters:
    AssetID:
      in: path
      name: asset_id
      required: true
      schema:
        type: string
  securitySchemes:
    bearer:
      description: 'CCAPI API Key. Format: `Bearer sk-xxx`'
      scheme: bearer
      type: http
x-tagGroups:
- name: Integration Guides
  tags:
  - OpenClaw Integration
  - Hermes Integration
  - Claude Code Integration
  - Codex CLI Integration
  - Gemini CLI Integration
- name: Chat
  tags:
  - Claude / Anthropic LLM Integration
  - OpenAI LLM Integration
  - Google Gemini LLM Integration
  - DeepSeek LLM Integration
  - MiniMax LLM Integration
- name: Image
  tags:
  - GPT Image 2 Per-Call Image Generation
  - Midjourney Imagine API
  - Gemini Per-Call Image Generation
  - CCAPI Image Upscale
  - Z-Image Turbo
  - Doubao Seedream Official Image API
- name: Video
  tags:
  - Gemini Video (Veo 3.1 / Omni Flash)
  - Grok Imagine Video
  - MiniMax H3 Family Video Generation
  - Seedance Trusted Asset Library
  - Seedance 2.5 / 2.0 Video Generation
  - Vidu Video Generation API
- name: Audio
  tags:
  - Producer Task API
  - Suno Task API