List saved creatives
creatives_listList creatives owned by the authenticated tenant with cursor pagination. This is the TikTok AdsAgent tenant library (tiktok.adsagent.md Creatives), not Meta adsagent.md and not TikTok Ads Manager Material Center. READY_LOCAL dashboard rows belong here and are create sources via creative.creative_id; they do not need a TikTok image_id/video_id until after confirm. For images, use one creative_id for one image or ordered creative.image_creative_ids (2..35 JPEG/PNG images) for one carousel; every member must be an eligible image row. ad_params.creative_list contains separate variants, not the ordered cards of one carousel. Rows omit content hashes and storage keys. The legacy download_url is retained as an authenticated same-origin endpoint only after storage verification; unverified historical ready rows report verification_pending. Inspect coverage (create_eligible_count / empty_reason / next_action) plus readiness.create_eligible before using creative_id in campaigns_quick_create. An empty page with coverage.empty_reason=no_tenant_creatives is the only true empty-library signal (unfiltered scope=library plus a tenant-wide existence check). no_creatives_in_query means the current folder/search/media_type/time_filter matched nothing; no_creatives_in_root means scope=root was empty while the tenant owns creatives elsewhere — retry scope=library (default) or call creatives_list_folders. Trust coverage.scope.kind; never describe a root/folder page count as the whole library. Do not treat those as a different tenant.
REQUIRED: none. Optional: scope (library|root, default library — entire tenant library across root and folders; use root for root-only reads), folder_id (str — UUID of one folder), cursor (opaque and scope-bound; reuse it only with the identical query), limit (int 1..50, default 20), search (filename substring, max 200 chars), media_type (all/image/video), time_filter (all/24h/7d/30d), include_incomplete (bool, default true). Returns count, complete, meta.has_more, next_cursor and snapshot_at (legacy top-level has_more remains). Each row exposes creative_id as an alias of id for direct creative.creative_id selection. These describe library pagination, not TikTok upload completion; continue serially with next_cursor instead of client fan-out. EXAMPLE: creatives_list({"search": "hero", "media_type": "video", "limit": 20})
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| scope | No | library | |
| cursor | No | ||
| search | No | ||
| folder_id | No | ||
| media_type | No | all | |
| time_filter | No | all | |
| connection_context | No | ||
| include_incomplete | No |