# solari tiktok account profile

> Everything SOLARI knows about one TikTok account.

- **CLI**: `solari tiktok account profile`
- **MCP tool**: `solari_tiktok_account_profile`
- **Access**: `solari:read` — Works with any signed-in SOLARI account.

Full SOLARI profile for one TikTok account: username (the handle), nickname, bio, follower/following/like/video counts, region, verified/private/commerce flags, profile_url, plus embedded previews of recent posts (recent_posts). Identify the account by account_id (TikTok account UUID from solari_tiktok_account_search) or by username (TikTok handle). A handle not tracked yet is fetched live on first request (allow 10 to 40 seconds; fetched_on_demand=true in the response, and only its most recent posts are available until the background crawl lands); a not-found error then means the handle does not exist on TikTok. Works with any signed-in SOLARI account.

**When to use it** — The first call of a TikTok account deep-dive. Recent posts come embedded.

**What comes back** — Profile fields, recent post previews, and the tracking state.

## Parameters

- `account_id` (string, optional, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — account_id of the TikTok account (SOLARI account UUID). Provide this or username.
- `username` (string, optional, ≤ 64 chars) — TikTok handle, with or without a leading @. Ignored when account_id is set.

## Response

### `Response`

- `account_id` (uuid) — TikTok account_id.
- `username / nickname / bio` (string) — Handle, display name, bio text.
- `bio_links` (string[]) — Links in the bio.
- `follower_count / following_count` (integer) — Followers and following.
- `heart_count` (integer) — Lifetime likes across the account.
- `video_count` (integer) — Videos published.
- `is_verified / is_private` (boolean) — Verification and privacy flags.
- `is_commerce_user / commerce_user_category` (boolean · string) — Commerce status and category.
- `region / language` (string | null) — Region and language codes.
- `avatar_url / profile_url` (string) — Avatar and public profile link.
- `tracked` (boolean) — Whether the account is on the regular crawl.
- `sync_status` (string) — Crawl state.
- `synced_at` (timestamp) — Last crawl time.
- `recent_posts` (object[]) — Recent post previews.
- `fetched_on_demand` (boolean) — true when this request is what first pulled the account in.

### `recent_posts[]`

- `post_id` (uuid) — SOLARI post id. A different namespace from Instagram post ids.
- `video_id` (string) — Public numeric TikTok id — the digits after /video/ or /photo/.
- `url` (string) — Public TikTok permalink.
- `account_id` (uuid) — TikTok account_id of the author.
- `username` (string) — Author handle.
- `post_type` (string) — video (single clip) or carousel (image slideshow).
- `posted_at` (timestamp) — Publication time (UTC).
- `caption` (string) — Caption text.
- `duration_seconds` (integer) — Video length.
- `width / height` (integer) — Video resolution.
- `play_count` (integer) — Plays.
- `like_count` (integer) — Likes.
- `comment_count` (integer) — Comments.
- `share_count` (integer) — Shares.
- `collect_count` (integer) — Saves.
- `is_ad` (boolean) — Whether TikTok flags the post as an ad.
- `is_pinned` (boolean) — Pinned to the top of the profile.
- `aigc_label_type` (string | null) — AI-generated-content label, when TikTok applies one.
- `original_language_code` (string | null) — Source language code.
- `cover_url` (string) — Cover image URL.
- `video_url` (string) — Video file URL.
- `images` (string[]) — Carousel slides. Empty for a video post.
- `hashtags` (string[]) — Hashtags parsed from the caption.
- `mentions` (string[]) — Handles mentioned in the caption.
- `transcript` (string | null) — Spoken-word transcript. Only filled when include_transcript=true.

## Example

```console
$ solari tiktok account profile username=innisfree_official
```

_Long strings and repeated array entries are trimmed for readability._

```json
{
  "account_id": "019b2137-f76e-7b33-9437-26044fa7b1ed",
  "username": "innisfree_official",
  "nickname": "Innisfreeofficial",
  "bio": "NATURE MEETS KOREAN SKIN SCIENCE",
  "bio_links": [
    "https://linktr.ee/innisfree_official"
  ],
  "follower_count": 143900,
  "following_count": 14,
  "heart_count": 2200000,
  "video_count": 767,
  "is_verified": true,
  "is_private": false,
  "is_commerce_user": true,
  "commerce_user_category": "Beauty",
  "region": "KR",
  "language": null,
  "avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-alisg-avt-0068/3f8e48dc4a284a8ead37e93175ebdb86~tplv-tiktokx-cropcenter:720:720.jpeg?dr=10399&refresh_token=04b90255&x-expires=1788541200&x-signature=Gd3gJu4HyBZPCr%2FqEevyDs6 …",
  "profile_url": "https://www.tiktok.com/@innisfree_official",
  "sync_status": "OK",
  "tracked": true,
  "synced_at": "2026-09-02T17:16:05.835000Z",
  "recent_posts": [
    {
      "post_id": "01a0631e-f0df-7e9d-a09b-d84bc31d3834",
      "video_id": "7680375687139642645",
      "url": "https://www.tiktok.com/@innisfree_official/video/7680375687139642645",
      "account_id": "019b2137-f76e-7b33-9437-26044fa7b1ed",
      "username": "innisfree_official",
      "post_type": "video",
      "posted_at": "2026-09-02T12:00:00Z",
      "caption": "Deeply hydrated skin—NO OFF HOURS. 💚  wherever the day takes MINGYU—his hydration stays SUPERCHARGED ⚡️ Green Tea Ceramide Milk: Lightweight milky toner that won't clog your pores  Green Tea Ceramide Mist: Touch-free, fa …",
      "duration_seconds": 23,
      "width": 1080,
      "height": 1920,
      "play_count": 493,
      "like_count": 37,
      "comment_count": 2,
      "share_count": 0,
      "collect_count": 3,
      "is_ad": false,
      "is_pinned": false,
      "aigc_label_type": null,
      "original_language_code": null,
      "cover_url": "https://smr-images-a.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/cover.jpg",
      "video_url": "https://smr-images-a.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/origin.mp4",
      "images": [],
      "hashtags": [],
      "mentions": [],
      "transcript": null
    },
    "… 5 more"
  ],
  "fetched_on_demand": false
}
```

## As an MCP call

```json
{
  "name": "solari_tiktok_account_profile",
  "arguments": {
    "username": "innisfree_official"
  }
}
```

## Notes

- An untracked handle is fetched live on first request. Allow 10 to 40 seconds; fetched_on_demand=true marks it, and only the most recent posts exist until the background crawl lands.
- A not-found error after that means the handle does not exist on TikTok.

## Related tools

- [`solari_tiktok_account_posts`](https://solari.sh/docs/tools/tiktok-account-posts.md)
- [`solari_tiktok_account_search`](https://solari.sh/docs/tools/tiktok-account-search.md)
- [`solari_instagram_account_profile`](https://solari.sh/docs/tools/instagram-account-profile.md)
