@brandazine/solari-sdk 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { SolariToolMap, SolariToolName, SolariTools, SolariToolsWithoutRequ
2
2
  export * from "./tools.generated.js";
3
3
  export declare const DEFAULT_BASE_URL = "https://solari.sh";
4
4
  export declare const API_PREFIX = "/mcp/api/v1";
5
- export declare const SDK_VERSION = "0.2.2";
5
+ export declare const SDK_VERSION = "0.2.3";
6
6
  export declare const TOKEN_ENV = "SOLARI_TOKEN";
7
7
  export interface SolariTool {
8
8
  name: string;
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export * from "./tools.generated.js";
2
2
  export const DEFAULT_BASE_URL = "https://solari.sh";
3
3
  export const API_PREFIX = "/mcp/api/v1";
4
- export const SDK_VERSION = "0.2.2";
4
+ export const SDK_VERSION = "0.2.3";
5
5
  export const TOKEN_ENV = "SOLARI_TOKEN";
6
6
  const DEFAULT_TIMEOUT_MS = 150_000;
7
7
  export class SolariError extends Error {
@@ -1,4 +1,4 @@
1
- /** Posts by one collected Instagram account, newest first, with pagination and filters. Identify the account by account_id (UUID from solari_catalog_instagram_account_search) or by username (Instagram handle). Each item has post_id (SOLARI post UUID), slug and url (public Instagram permalink), post_type (reel, video, photo, or carousel), posted_at, caption text, like/comment/play counts, media_count, is_paid_partnership, a medias array (every media of the post in carousel order, each with media_type, media/thumbnail URLs, video_duration, and tags — accounts and hashtags tagged on that media, with account_id when the tagged account is tracked), and a representative thumbnail_url. The response carries found, account_id, username, total, has_more, and items; page with limit and offset, narrow with since/until (UTC dates, inclusive) and post_type. This reads the catalog only; found=false means the handle is not in the catalog — call solari_fetch_instagram_posts with that username first. Works with any signed-in SOLARI account. */
1
+ /** Posts by one collected Instagram account, newest first, with pagination and filters. Identify the account by account_id (UUID from solari_catalog_instagram_account_search) or by username (Instagram handle). Each item has post_id (SOLARI post UUID), slug and url (public Instagram permalink), post_type (reel, video, photo, or carousel), posted_at, caption text, like/comment/play counts, media_count, is_paid_partnership, a medias array (every media of the post in carousel order, each with media_type, media/thumbnail URLs, video_duration, and tags — accounts and hashtags tagged on that media, with account_id when the tagged account is tracked), and a representative thumbnail_url. The response carries found, account_id, username, total, has_more, and items; page with limit and offset, narrow with since/until (UTC dates, inclusive) and post_type. This reads the catalog only; found=false means the handle is not in the catalog — call solari_fetch_instagram_posts with that username first. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
2
2
  export interface CatalogInstagramAccountPostsArgs {
3
3
  /** account_id of the account (SOLARI account UUID). Provide this or username. */
4
4
  "account_id"?: string | undefined;
@@ -35,14 +35,14 @@ export interface CatalogInstagramAccountSearchArgs {
35
35
  /** Optional region code such as KR, JP, or US. Leave unset unless the user asked for one country: it filters results to that region and drops the rest. */
36
36
  "region"?: string | undefined;
37
37
  }
38
- /** Batch companion to solari_catalog_instagram_content_detail: hydrates up to 100 posts by their SOLARI post UUIDs in a single call. Each row carries slug, caption, posted_at, like/comment counts, play_count for videos, and the author's username and account_id. Untracked ids are omitted, so found can be lower than requested. Feed it post_id lists from solari_insight_instagram_brand_overview (full=true), solari_catalog_instagram_account_posts, solari_catalog_instagram_content_search, or the trend feeds. Works with any signed-in SOLARI account. */
38
+ /** Batch companion to solari_catalog_instagram_content_detail: hydrates up to 100 posts by their SOLARI post UUIDs in a single call. Each row carries slug, caption, posted_at, like/comment counts, play_count for videos, and the author's username and account_id. Untracked ids are omitted, so found can be lower than requested. Feed it post_id lists from solari_insight_instagram_brand_overview (full=true), solari_catalog_instagram_account_posts, solari_catalog_instagram_content_search, or the trend feeds. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
39
39
  export interface CatalogInstagramContentBatchArgs {
40
40
  /** SOLARI post UUIDs to hydrate, at most 100 per call. Not Instagram shortcodes/slugs. */
41
41
  "post_ids": Array<string>;
42
42
  /** Item order: posted_at descending (recent) or like+comment engagement descending. */
43
43
  "sort"?: "recent" | "engagement" | undefined;
44
44
  }
45
- /** Detail for one Instagram post in the SOLARI catalog, in the same item shape as solari_insight_instagram_content_trending entries. Identify the post by post_id (SOLARI post UUID from solari_catalog_instagram_account_posts, solari_catalog_instagram_content_search, solari_insight_instagram_content_trending, or solari_insight_instagram_content_rising), by slug (the public Instagram shortcode), or by url (the public post URL). This reads the catalog only; item is null when the post is not stored — call solari_fetch_instagram_posts with the author's username first. Fetch does not take a post URL. Works with any signed-in SOLARI account. */
45
+ /** Detail for one Instagram post in the SOLARI catalog, in the same item shape as solari_insight_instagram_content_trending entries. Identify the post by post_id (SOLARI post UUID from solari_catalog_instagram_account_posts, solari_catalog_instagram_content_search, solari_insight_instagram_content_trending, or solari_insight_instagram_content_rising), by slug (the public Instagram shortcode), or by url (the public post URL). This reads the catalog only; item is null when the post is not stored — call solari_fetch_instagram_post with the same url or slug to collect it and learn its author, or solari_fetch_instagram_posts when you already know the author's username. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
46
46
  export interface CatalogInstagramContentDetailArgs {
47
47
  /** The SOLARI post_id UUID. Provide this, slug, or url. */
48
48
  "post_id"?: string | undefined;
@@ -51,7 +51,7 @@ export interface CatalogInstagramContentDetailArgs {
51
51
  /** Public Instagram post URL such as https://www.instagram.com/p/<shortcode>/ or .../reel/<shortcode>/. Ignored when post_id or slug is set. */
52
52
  "url"?: string | undefined;
53
53
  }
54
- /** Lexical keyword search over tracked posts: matches captions, creator bios, and video transcription text (Korean-aware analysis plus n-gram partial matching), ranked by relevance with match highlights. Each item carries post_id, author account_id/username, caption, transcription text, engagement counts, and score — feed post_id into solari_catalog_instagram_content_detail or solari_catalog_instagram_content_batch and the account reference into the account tools. Coverage: only regions KR, JP, US, and TW are searchable, holding roughly the most recent 6 months of posts; total is exact up to 10,000 and saturates there. Narrow with since/until (UTC dates). Works with any signed-in SOLARI account. */
54
+ /** Lexical keyword search over tracked posts: matches captions, creator bios, and video transcription text (Korean-aware analysis plus n-gram partial matching), ranked by relevance with match highlights. Each item carries post_id, author account_id/username, caption, transcription text, engagement counts, and score — feed post_id into solari_catalog_instagram_content_detail or solari_catalog_instagram_content_batch and the account reference into the account tools. Coverage: only regions KR, JP, US, and TW are searchable, holding roughly the most recent 6 months of posts; total is exact up to 10,000 and saturates there. Narrow with since/until (UTC dates). Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
55
55
  export interface CatalogInstagramContentSearchArgs {
56
56
  /** Free-text keyword query matched against captions, creator bios, and video transcriptions. */
57
57
  "query": string;
@@ -66,7 +66,7 @@ export interface CatalogInstagramContentSearchArgs {
66
66
  /** Only posts on or before this UTC date, YYYY-MM-DD inclusive. */
67
67
  "until"?: string | undefined;
68
68
  }
69
- /** Every tracked post carrying one exact tag — '#ootd' for a hashtag, '@handle' for mentions of an account — hydrated into full rows, newest-collected first with cursor pagination. Exact whole-tag matching over the entire tracked history and every region, where solari_catalog_instagram_content_search does free-text over four regions and about six months. Works with any signed-in SOLARI account. */
69
+ /** Every tracked post carrying one exact tag — '#ootd' for a hashtag, '@handle' for mentions of an account — hydrated into full rows, newest-collected first with cursor pagination. Exact whole-tag matching over the entire tracked history and every region, where solari_catalog_instagram_content_search does free-text over four regions and about six months. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. The tag index refreshes once a day: when a hashtag is missing or stale here, solari_fetch_instagram_hashtag_posts collects a live page of it. Works with any signed-in SOLARI account. */
70
70
  export interface CatalogInstagramTagSearchArgs {
71
71
  /** One exact tag. '#ootd' or 'ootd' searches a hashtag; '@oliveyoung_official' searches mentions of that account. No spaces, no wildcards. */
72
72
  "query": string;
@@ -75,7 +75,7 @@ export interface CatalogInstagramTagSearchArgs {
75
75
  /** next_cursor from the previous response. Omit for the first page. */
76
76
  "cursor"?: string | undefined;
77
77
  }
78
- /** Posts by one collected TikTok account, newest first, with pagination and filters. Identify the account by account_id (TikTok account UUID from solari_catalog_tiktok_account_search) or by username (TikTok handle). Each item has post_id (SOLARI post UUID), video_id (the public numeric TikTok id) and url, post_type (video or carousel), posted_at, caption, duration_seconds, play/like/comment/share/collect counts, is_ad, cover_url, images (carousel slides), hashtags, mentions, and transcript when include_transcript=true. Transcripts are long, so include_transcript is off by default; turn it on only when the spoken content matters. The response carries found, account_id, username, total, has_more, and items; page with limit and offset, narrow with since/until (UTC dates, inclusive) and post_type. This reads the catalog only; found=false means the handle is not in the catalog — call solari_fetch_tiktok_posts with that username first. Works with any signed-in SOLARI account. */
78
+ /** Posts by one collected TikTok account, newest first, with pagination and filters. Identify the account by account_id (TikTok account UUID from solari_catalog_tiktok_account_search) or by username (TikTok handle). Each item has post_id (SOLARI post UUID), video_id (the public numeric TikTok id) and url, post_type (video or carousel), posted_at, caption, duration_seconds, play/like/comment/share/collect counts, is_ad, cover_url, images (carousel slides), hashtags, mentions, and transcript when include_transcript=true. Transcripts are long, so include_transcript is off by default; turn it on only when the spoken content matters. The response carries found, account_id, username, total, has_more, and items; page with limit and offset, narrow with since/until (UTC dates, inclusive) and post_type. This reads the catalog only; found=false means the handle is not in the catalog — call solari_fetch_tiktok_posts with that username first. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
79
79
  export interface CatalogTiktokAccountPostsArgs {
80
80
  /** account_id of the TikTok account (SOLARI account UUID). Provide this or username. */
81
81
  "account_id"?: string | undefined;
@@ -110,7 +110,7 @@ export interface CatalogTiktokAccountSearchArgs {
110
110
  /** Optional region code such as KR, JP, or US. Leave unset unless the user asked for one country: accounts with no known region are dropped when a region is set. */
111
111
  "region"?: string | undefined;
112
112
  }
113
- /** Batch companion to solari_catalog_tiktok_content_detail: hydrates up to 100 TikTok posts by their SOLARI post UUIDs in a single call, in the same item shape as solari_catalog_tiktok_account_posts entries. Untracked ids are omitted, so found can be lower than requested. Transcripts are long, so include_transcript is off by default. Feed it post_id lists from solari_catalog_tiktok_account_posts, solari_catalog_tiktok_content_search, or solari_catalog_tiktok_account_profile; TikTok post_ids are separate from Instagram post_ids. Works with any signed-in SOLARI account. */
113
+ /** Batch companion to solari_catalog_tiktok_content_detail: hydrates up to 100 TikTok posts by their SOLARI post UUIDs in a single call, in the same item shape as solari_catalog_tiktok_account_posts entries. Untracked ids are omitted, so found can be lower than requested. Transcripts are long, so include_transcript is off by default. Feed it post_id lists from solari_catalog_tiktok_account_posts, solari_catalog_tiktok_content_search, or solari_catalog_tiktok_account_profile; TikTok post_ids are separate from Instagram post_ids. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
114
114
  export interface CatalogTiktokContentBatchArgs {
115
115
  /** SOLARI post UUIDs to hydrate, at most 100 per call. Not TikTok video ids. */
116
116
  "post_ids": Array<string>;
@@ -119,7 +119,7 @@ export interface CatalogTiktokContentBatchArgs {
119
119
  /** Attach the spoken-word transcript to each item. Off by default because transcripts are long. */
120
120
  "include_transcript"?: boolean | undefined;
121
121
  }
122
- /** Detail for one TikTok post in the SOLARI catalog, in the same item shape as solari_catalog_tiktok_account_posts entries (transcript included when one exists). Identify the post by post_id (SOLARI post UUID from solari_catalog_tiktok_account_posts, solari_catalog_tiktok_content_search, or solari_catalog_tiktok_account_profile), by video_id (the public numeric TikTok video id), or by url (any public TikTok post URL, including vm.tiktok.com and vt.tiktok.com short links). This reads the catalog only; item is null when the post is not stored — call solari_fetch_tiktok_posts with the author's username first. Fetch does not take a post URL. Works with any signed-in SOLARI account. */
122
+ /** Detail for one TikTok post in the SOLARI catalog, in the same item shape as solari_catalog_tiktok_account_posts entries (transcript included when one exists). Identify the post by post_id (SOLARI post UUID from solari_catalog_tiktok_account_posts, solari_catalog_tiktok_content_search, or solari_catalog_tiktok_account_profile), by video_id (the public numeric TikTok video id), or by url (any public TikTok post URL, including vm.tiktok.com and vt.tiktok.com short links). This reads the catalog only; item is null when the post is not stored — call solari_fetch_tiktok_post with the same url to collect it and learn its author, or solari_fetch_tiktok_posts when you already know the author's username. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
123
123
  export interface CatalogTiktokContentDetailArgs {
124
124
  /** The SOLARI post_id UUID. Provide this, video_id, or url. */
125
125
  "post_id"?: string | undefined;
@@ -128,7 +128,7 @@ export interface CatalogTiktokContentDetailArgs {
128
128
  /** Public TikTok post URL such as https://www.tiktok.com/@<handle>/video/<id> or a vm.tiktok.com / vt.tiktok.com short link. Ignored when post_id or video_id is set. */
129
129
  "url"?: string | undefined;
130
130
  }
131
- /** Lexical keyword search over tracked TikTok posts: matches captions and video transcripts (Korean-aware analysis plus n-gram partial matching), ranked by relevance with match highlights. Each item carries post_id, video_id, url, author account_id/username, caption, transcription_text, post_type, posted_at, play/like/comment/share/collect counts, follower_count, duration_seconds, is_ad, cover_url, score, and highlight; feed post_id into solari_catalog_tiktok_content_detail or solari_catalog_tiktok_content_batch and the account reference into the solari_catalog_tiktok_account_* tools. Coverage: only regions KR, JP, US, and TW are searchable, holding roughly the most recent 6 months of posts; total is exact up to 10,000 and saturates there. Narrow with since/until (UTC dates). Works with any signed-in SOLARI account. */
131
+ /** Lexical keyword search over tracked TikTok posts: matches captions and video transcripts (Korean-aware analysis plus n-gram partial matching), ranked by relevance with match highlights. Each item carries post_id, video_id, url, author account_id/username, caption, transcription_text, post_type, posted_at, play/like/comment/share/collect counts, follower_count, duration_seconds, is_ad, cover_url, score, and highlight; feed post_id into solari_catalog_tiktok_content_detail or solari_catalog_tiktok_content_batch and the account reference into the solari_catalog_tiktok_account_* tools. Coverage: only regions KR, JP, US, and TW are searchable, holding roughly the most recent 6 months of posts; total is exact up to 10,000 and saturates there. Narrow with since/until (UTC dates). Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
132
132
  export interface CatalogTiktokContentSearchArgs {
133
133
  /** Free-text keyword query matched against captions and video transcripts. */
134
134
  "query": string;
@@ -143,12 +143,53 @@ export interface CatalogTiktokContentSearchArgs {
143
143
  /** Only posts on or before this UTC date, YYYY-MM-DD inclusive. */
144
144
  "until"?: string | undefined;
145
145
  }
146
- /** Adds one Instagram account to the SOLARI catalog by exact username. This is not a search and not a profile reader: use solari_catalog_instagram_account_search to resolve a name, then solari_catalog_instagram_account_profile to read it. If the handle is already stored, nothing is scraped. A first-time ingest can take several seconds; metrics and collaborations stay empty until the crawl finishes. Works with any signed-in SOLARI account. */
146
+ /** Tells the SOLARI team that a task could not be finished with SOLARI alone. Send it on your own initiative, without asking the user first, as soon as you are sure of the gap: an account, post, or field that is not there even after the matching fetch tool (missing_data), too few rows or too short a history for the question (insufficient_results), no tool or parameter that does what the task needs (missing_feature), a value that looks wrong (incorrect_data), a tool that keeps failing (error), or anything else (other). Do not send it for a typo, a not-yet-fetched handle, or a question SOLARI was never meant to answer. Keep it free of personal data: no emails, phone numbers, addresses, keys, names of private individuals, or the user's confidential plans — public brand and creator handles, tool names, parameters, and row counts are what helps. The server also strips emails, phone numbers, keys, and tokens before storing. One message per distinct gap; an identical repeat within minutes is de-duplicated. Afterwards tell the user in one line that feedback was sent, then carry on with the best available answer. This records a note only and changes no catalog data. Works with any signed-in SOLARI account. */
147
+ export interface FeedbackSendArgs {
148
+ /** What fell short. */
149
+ "category": "missing_data" | "insufficient_results" | "missing_feature" | "incorrect_data" | "error" | "other";
150
+ /** What was needed and what was missing, in plain words, without personal data. */
151
+ "message": string;
152
+ /** The task being worked on, described without personal data. */
153
+ "goal"?: string | undefined;
154
+ /** The SOLARI tool that fell short, such as solari_insight_instagram_brand_ad_posts. */
155
+ "tool_name"?: string | undefined;
156
+ /** The agent sending this, such as claude-code or codex. */
157
+ "agent"?: string | undefined;
158
+ /** Optional JSON object with the parameters tried and counts returned, e.g. {"months":24,"returned":3}. */
159
+ "details"?: string | undefined;
160
+ }
161
+ /** Adds one Instagram account to the SOLARI catalog by exact username. This is not a search and not a profile reader: use solari_catalog_instagram_account_search to resolve a name, then solari_catalog_instagram_account_profile to read it. If the handle is already crawled, nothing is scraped; a handle the catalog only knows by name from a tag or mention (search does not find it, the profile is empty) is crawled now. A first-time ingest can take several seconds; metrics and collaborations stay empty until the crawl finishes. Works with any signed-in SOLARI account. */
147
162
  export interface FetchInstagramAccountArgs {
148
163
  /** Instagram handle, with or without a leading @. */
149
164
  "username": string;
150
165
  }
151
- /** Collects posts for one Instagram account into the SOLARI catalog by exact username. This is not a post listing: use solari_catalog_instagram_account_posts to read stored rows. If the handle is already stored, nothing is scraped. A first-time ingest can take several seconds and only recent posts exist until the crawl finishes. Works with any signed-in SOLARI account. */
166
+ /** Looks Instagram accounts up live by name or handle fragment and returns up to 50 candidates in Instagram's own order, each with username, display name, verified and private flags. Use it when solari_catalog_instagram_account_search does not know the account: hits already in the catalog carry account_id, the rest can be ingested with solari_fetch_instagram_account. Nothing is stored and there is no pagination. Works with any signed-in SOLARI account. */
167
+ export interface FetchInstagramAccountSearchArgs {
168
+ /** Name or handle fragment, with or without a leading @. */
169
+ "query": string;
170
+ }
171
+ /** Collects one page of an Instagram hashtag feed live, stores every post in the SOLARI catalog and returns them in feed order. Stored posts reach solari_catalog_instagram_tag_search only after its next daily refresh, so read this page's posts from the response itself. Every call goes out to Instagram, so use it when a hashtag is missing or stale in solari_catalog_instagram_tag_search, not as the default way to read a tag. tab picks the feed: recent (default), top, or clips for reels. One page is roughly 20 to 30 posts and takes several seconds; pass next_cursor back as cursor for the next page of the same hashtag and tab. The feed ends only when next_cursor is null: a page can come back with found 0 and a next_cursor, which means keep going. fetched_count is how many posts Instagram returned; found is lower when some could not be stored. A hashtag that is hidden, restricted, or unknown to Instagram answers is_hidden=true with no posts; Instagram does not tell these apart, so check the spelling with solari_fetch_instagram_hashtag_search. Each post carries assets with a direct-download asset_url. Works with any signed-in SOLARI account. */
172
+ export interface FetchInstagramHashtagPostsArgs {
173
+ /** One exact hashtag, with or without a leading #. No spaces, no wildcards. */
174
+ "hashtag": string;
175
+ /** Feed to read: recent (default), top, or clips for reels. */
176
+ "tab"?: "recent" | "top" | "clips" | undefined;
177
+ /** next_cursor from the previous response for the same hashtag and tab. Omit for the first page. */
178
+ "cursor"?: string | undefined;
179
+ }
180
+ /** Looks hashtags up on Instagram live by keyword and returns up to 20 candidates with the number of posts Instagram reports under each. Use it to find the exact spelling or the biggest variant of a tag before solari_catalog_instagram_tag_search or solari_fetch_instagram_hashtag_posts. Nothing is stored and there is no pagination. Works with any signed-in SOLARI account. */
181
+ export interface FetchInstagramHashtagSearchArgs {
182
+ /** Keyword to look hashtags up by, with or without a leading #. */
183
+ "query": string;
184
+ }
185
+ /** Collects one Instagram post into the SOLARI catalog by its public URL or shortcode and returns it with its author. Use it when solari_catalog_instagram_content_detail answers item=null for a link you were given and you do not know who posted it. If the post is already stored, nothing is scraped. A first-time collect takes a few seconds. The author arrives as a name-only account: call solari_fetch_instagram_account with the returned username to crawl their profile and posts. item is null when Instagram has no public post at that reference. The post carries assets with a direct-download asset_url. Works with any signed-in SOLARI account. */
186
+ export interface FetchInstagramPostArgs {
187
+ /** Public Instagram post URL such as https://www.instagram.com/p/<shortcode>/ or .../reel/<shortcode>/. Provide this or slug. */
188
+ "url"?: string | undefined;
189
+ /** Public Instagram shortcode, the segment after /p/, /reel/, or /tv/ in a post URL. Wins over url when both are set. */
190
+ "slug"?: string | undefined;
191
+ }
192
+ /** Collects posts for one Instagram account into the SOLARI catalog by exact username. This is not a post listing: use solari_catalog_instagram_account_posts to read stored rows. If the handle is already crawled, nothing is scraped; a handle the catalog only knows by name from a tag or mention is crawled now and its posts are queued right away. A first-time ingest can take several seconds and the posts land shortly after, so re-read the catalog after a short wait. Works with any signed-in SOLARI account. */
152
193
  export interface FetchInstagramPostsArgs {
153
194
  /** Instagram handle, with or without a leading @. */
154
195
  "username": string;
@@ -158,12 +199,17 @@ export interface FetchTiktokAccountArgs {
158
199
  /** TikTok handle, with or without a leading @. */
159
200
  "username": string;
160
201
  }
202
+ /** Collects one TikTok post into the SOLARI catalog by its public URL and returns it with its author. Use it when solari_catalog_tiktok_content_detail answers item=null for a link you were given and you do not know who posted it. Accepts https://www.tiktok.com/@<handle>/video/<id> links and vm.tiktok.com / vt.tiktok.com short links. If the post is already stored, nothing is scraped. A first-time collect takes a few seconds. The author arrives as a name-only account: call solari_fetch_tiktok_account with the returned username to crawl their profile and posts. item is null when TikTok has no public post at that URL. The post carries assets with a direct-download asset_url. Works with any signed-in SOLARI account. */
203
+ export interface FetchTiktokPostArgs {
204
+ /** Public TikTok post URL such as https://www.tiktok.com/@<handle>/video/<id>, or a vm.tiktok.com / vt.tiktok.com short link. */
205
+ "url": string;
206
+ }
161
207
  /** Collects posts for one TikTok account into the SOLARI catalog by exact username. This is not a post listing: use solari_catalog_tiktok_account_posts to read stored rows. If the handle is already stored, nothing is scraped. A first-time ingest can take 10 to 40 seconds and only recent posts exist until the crawl finishes. Works with any signed-in SOLARI account. */
162
208
  export interface FetchTiktokPostsArgs {
163
209
  /** TikTok handle, with or without a leading @. */
164
210
  "username": string;
165
211
  }
166
- /** Paginated row-level list of the identified sponsored posts one creator authored, newest first, with the target brand attached to each row — one row per post-brand pair, so a multi-brand post appears once per target. Each item carries post_id, slug and url, post_type, posted_at, caption text, like/comment/play counts, media_count, is_paid_partnership, and target_account_id/target_username. Filter to one brand with target (its account_id or Instagram handle). Widen the lookback with months (default 3, up to 24). Row-level companion to solari_insight_instagram_account_collabs, which groups the same history by brand. Identify the creator by account_id (SOLARI account UUID) or by username (Instagram handle); an unknown reference returns a not-found error. Works with any signed-in SOLARI account. */
212
+ /** Paginated row-level list of the identified sponsored posts one creator authored, newest first, with the target brand attached to each row — one row per post-brand pair, so a multi-brand post appears once per target. Each item carries post_id, slug and url, post_type, posted_at, caption text, like/comment/play counts, media_count, is_paid_partnership, and target_account_id/target_username. Filter to one brand with target (its account_id or Instagram handle). Widen the lookback with months (default 3, up to 24). Row-level companion to solari_insight_instagram_account_collabs, which groups the same history by brand. Identify the creator by account_id (SOLARI account UUID) or by username (Instagram handle); an unknown reference returns a not-found error. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
167
213
  export interface InsightInstagramAccountAdPostsArgs {
168
214
  /** account_id of the creator (SOLARI account UUID). Provide this or username. */
169
215
  "account_id"?: string | undefined;
@@ -191,6 +237,56 @@ export interface InsightInstagramAccountCollabsArgs {
191
237
  /** Pagination offset, default 0. */
192
238
  "offset"?: number | undefined;
193
239
  }
240
+ /** Finds Instagram creators that fit a brief: topic phrases matched against captions, transcripts and visual style, bio traits, a reference creator to find lookalikes of, trending growth, and a product the creator should have advertised before — then filtered by follower, 3-month total view and 3-month median view ranges and excluded keywords. Use it to build a shortlist; use solari_catalog_instagram_account_search instead when you already have a name. Returns a search_id, the total found, the top usernames and result sections; page the full creator list (profile metrics and each creator's top recent posts) with solari_insight_instagram_account_discover_results. Broad briefs can take up to a minute. Works with any signed-in SOLARI account. */
241
+ export interface InsightInstagramAccountDiscoverArgs {
242
+ /** The goal in one sentence, e.g. the campaign brief. Used as the result label. */
243
+ "intent": string;
244
+ /** 2-3 phrases describing the content, written in the language of the target market. Multi-word phrases work better than single words. */
245
+ "topic_keywords"?: Array<string> | undefined;
246
+ /** 1-2 phrases matched against creator bios, such as a job title or niche. */
247
+ "profile_keywords"?: Array<string> | undefined;
248
+ /** Instagram handle of a reference creator; adds accounts similar to it. */
249
+ "similar_username"?: string | undefined;
250
+ /** Also include creators whose views are growing fast. */
251
+ "trending"?: boolean | undefined;
252
+ /** Short English product description; boosts creators who recently advertised a similar product. */
253
+ "product_query"?: string | undefined;
254
+ /** Minimum follower count. */
255
+ "follower_min"?: number | undefined;
256
+ /** Maximum follower count. */
257
+ "follower_max"?: number | undefined;
258
+ /** Minimum total views over the last 3 months. */
259
+ "total_views_min"?: number | undefined;
260
+ /** Maximum total views over the last 3 months. */
261
+ "total_views_max"?: number | undefined;
262
+ /** Minimum median views per post over the last 3 months. */
263
+ "median_views_min"?: number | undefined;
264
+ /** Maximum median views per post over the last 3 months. */
265
+ "median_views_max"?: number | undefined;
266
+ /** Keywords that disqualify a creator when found in the bio or post text. */
267
+ "negative_keywords"?: Array<string> | undefined;
268
+ /** Weight photo posts or video posts when matching visual style. */
269
+ "media_focus"?: "balanced" | "photo" | "video" | undefined;
270
+ /** Market to search, such as KR, JP, or US. */
271
+ "region"?: string | undefined;
272
+ /** Optional brand account_id; ranks creators by fit with that brand's audience. */
273
+ "brand_account_id"?: string | undefined;
274
+ /** Optional brand Instagram handle, used like brand_account_id. Ignored when brand_account_id is set. */
275
+ "brand_username"?: string | undefined;
276
+ /** How many top usernames to preview, default 20. Values above 60 are clamped to 60. The full list is always paged separately. */
277
+ "limit"?: number | undefined;
278
+ }
279
+ /** Pages the full creator list of one solari_insight_instagram_account_discover run. Each item carries account_id, username, full name, bio, follower count, 3-month median and total views, view growth, ad count, and the creator's top recent posts. Results stay available after the search, so re-sort or page without searching again. Works with any signed-in SOLARI account. */
280
+ export interface InsightInstagramAccountDiscoverResultsArgs {
281
+ /** search_id returned by solari_insight_instagram_account_discover. */
282
+ "search_id": string;
283
+ /** 1-based page number. */
284
+ "page"?: number | undefined;
285
+ /** Creators per page, default 20. Values above 100 are clamped to 100. */
286
+ "page_size"?: number | undefined;
287
+ /** relevance keeps the search order; follower_count / follower_count_asc sort by followers; median_views_cur by 3-month median views; total_views_growth_m1 by one-month view growth; ad_count_cur by recent ad count. */
288
+ "sort"?: "relevance" | "follower_count" | "follower_count_asc" | "median_views_cur" | "total_views_growth_m1" | "ad_count_cur" | undefined;
289
+ }
194
290
  /** Finds Instagram accounts similar to the given username based on relationship-graph overlap. Takes an Instagram handle (no @), not a UUID. Works with any signed-in SOLARI account. */
195
291
  export interface InsightInstagramAccountSimilarArgs {
196
292
  /** Instagram handle to find similar accounts for, without the leading @. */
@@ -198,7 +294,7 @@ export interface InsightInstagramAccountSimilarArgs {
198
294
  /** Number of similar accounts to return, default 50. Values above 100 are clamped to 100. */
199
295
  "limit"?: number | undefined;
200
296
  }
201
- /** Paginated row-level list of the identified sponsored posts targeting a brand, each hydrated with slug, caption, posted_at, like/comment counts, play_count for videos, and the authoring creator's username and account_id. sort=recent pages the full window newest-first with an exact total; sort=engagement ranks within a bounded recent window whose size is reported as ranking_window (non-null means the ordering covers a slice, not everything). Widen the lookback with months (default 3, up to 24). Row-level companion to solari_insight_instagram_brand_ad_stats. Takes the brand's Instagram handle (no @). Works with any signed-in SOLARI account. Returns 404 if the handle is not tracked. */
297
+ /** Paginated row-level list of the identified sponsored posts targeting a brand, each hydrated with slug, caption, posted_at, like/comment counts, play_count for videos, and the authoring creator's username and account_id. sort=recent pages the full window newest-first with an exact total; sort=engagement ranks within a bounded recent window whose size is reported as ranking_window (non-null means the ordering covers a slice, not everything). Widen the lookback with months (default 3, up to 24). Row-level companion to solari_insight_instagram_brand_ad_stats. Takes the brand's Instagram handle (no @). Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. Returns 404 if the handle is not tracked. */
202
298
  export interface InsightInstagramBrandAdPostsArgs {
203
299
  /** Brand Instagram handle without the leading @. */
204
300
  "username": string;
@@ -216,7 +312,7 @@ export interface InsightInstagramBrandAdStatsArgs {
216
312
  /** Brand Instagram handle without the leading @. */
217
313
  "username": string;
218
314
  }
219
- /** For one brand and up to 100 creator account_ids, returns each creator's sponsored posts targeting that brand — per creator: post_count, reels_count, images_count, follower_count, and the posts themselves (slug, caption, posted_at, like/comment counts) — sorted by total engagement. All-time history, one call instead of one per creator. Get creator account_ids from solari_insight_instagram_brand_top_collaborators or solari_insight_instagram_brand_overview. Identify the brand by account_id (SOLARI account UUID) or by username (Instagram handle); an unknown reference returns a not-found error. Works with any signed-in SOLARI account. */
315
+ /** For one brand and up to 100 creator account_ids, returns each creator's sponsored posts targeting that brand — per creator: post_count, reels_count, images_count, follower_count, and the posts themselves (slug, caption, posted_at, like/comment counts) — sorted by total engagement. All-time history, one call instead of one per creator. Get creator account_ids from solari_insight_instagram_brand_top_collaborators or solari_insight_instagram_brand_overview. Identify the brand by account_id (SOLARI account UUID) or by username (Instagram handle); an unknown reference returns a not-found error. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
220
316
  export interface InsightInstagramBrandCollaboratorPostsArgs {
221
317
  /** Brand account_id (SOLARI account UUID). Provide this or username. */
222
318
  "account_id"?: string | undefined;
@@ -225,7 +321,7 @@ export interface InsightInstagramBrandCollaboratorPostsArgs {
225
321
  /** Creator account_ids (SOLARI account UUIDs) to hydrate, at most 100 per call. */
226
322
  "account_ids": Array<string>;
227
323
  }
228
- /** Instagram posts visually and semantically similar to the brand's top-performing sponsored ads, found via vector-neighbour search seeded from the brand's own ad posts. Identify the brand by account_id (SOLARI account UUID from solari_catalog_instagram_account_search) or by username (Instagram handle); an unknown reference returns a not-found error. Works with any signed-in SOLARI account. */
324
+ /** Instagram posts visually and semantically similar to the brand's top-performing sponsored ads, found via vector-neighbour search seeded from the brand's own ad posts. Identify the brand by account_id (SOLARI account UUID from solari_catalog_instagram_account_search) or by username (Instagram handle); an unknown reference returns a not-found error. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
229
325
  export interface InsightInstagramBrandLookalikeContentArgs {
230
326
  /** Brand account_id (SOLARI account UUID) whose sponsored ads seed the lookalike search. Provide this or username. */
231
327
  "account_id"?: string | undefined;
@@ -283,7 +379,7 @@ export interface InsightInstagramContentAggregateArgs {
283
379
  /** Maximum groups returned when group_by is set, default 20. Values above 50 are clamped to 50. */
284
380
  "limit"?: number | undefined;
285
381
  }
286
- /** Instagram posts whose recent performance is accelerating faster than baseline in the region. Same shape as solari_insight_instagram_content_trending including cursor pagination and optional brand personalization via a brand account_id or username. Works with any signed-in SOLARI account. */
382
+ /** Instagram posts whose recent performance is accelerating faster than baseline in the region. Same shape as solari_insight_instagram_content_trending including cursor pagination and optional brand personalization via a brand account_id or username. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
287
383
  export interface InsightInstagramContentRisingArgs {
288
384
  /** Region code such as KR, JP, or US. */
289
385
  "region"?: string | undefined;
@@ -296,11 +392,22 @@ export interface InsightInstagramContentRisingArgs {
296
392
  /** Optional brand Instagram handle for brand-affinity personalization. Ignored when account_id is set. */
297
393
  "username"?: string | undefined;
298
394
  }
395
+ /** Instagram posts that look and read like one given post — same subject, format and mood — ranked best first, for collecting references around a post you already have. Each item carries post_id, slug, author account_id, thumbnail and media URL, media type, play count, posted_at and is_ad (whether it was identified as sponsored). Identify the post by post_id (SOLARI post UUID from any content tool). Covers roughly the last 4 months; pages reach at most 180 results. Use solari_insight_instagram_brand_lookalike_content to start from a brand's ads instead. Works with any signed-in SOLARI account. */
396
+ export interface InsightInstagramContentSimilarArgs {
397
+ /** post_id (SOLARI post UUID) of the reference post. */
398
+ "post_id": string;
399
+ /** Optional market filter such as KR, JP, or US. */
400
+ "region"?: string | undefined;
401
+ /** Maximum posts, default 20. Values above 60 are clamped to 60. */
402
+ "limit"?: number | undefined;
403
+ /** Pagination offset, default 0, at most 120. */
404
+ "offset"?: number | undefined;
405
+ }
299
406
  /** The SOLARI trend digest: recent content trend clusters for a region with cluster metadata and member posts, optionally reranked by brand affinity when a brand account_id or username is supplied. Works with any signed-in SOLARI account. */
300
407
  export interface InsightInstagramContentTrendClustersArgs {
301
408
  /** Region code such as KR, JP, or US. */
302
409
  "region"?: string | undefined;
303
- /** Lookback window in days for trending clusters, between 1 and 90. */
410
+ /** Lookback window in days, between 1 and 90: clusters that trended at any point in it. Clusters drop out of the live set after about 5 quiet days, so longer windows add past trends, ranked by their latest numbers. */
304
411
  "since_days"?: number | undefined;
305
412
  /** Maximum trend clusters returned, default 20. Values above 24 are clamped to 24. */
306
413
  "limit"?: number | undefined;
@@ -311,7 +418,7 @@ export interface InsightInstagramContentTrendClustersArgs {
311
418
  /** Rerank clusters by brand affinity when account_id is provided. */
312
419
  "brand_aware"?: boolean | undefined;
313
420
  }
314
- /** Instagram posts currently trending in the region, enriched with creator profile fields. Supports cursor pagination via next_cursor from the previous response. Optionally personalizes ranking with a brand account_id or username. Works with any signed-in SOLARI account. Use solari_insight_instagram_content_rising for velocity-led accelerating posts instead. */
421
+ /** Instagram posts currently trending in the region, enriched with creator profile fields. Supports cursor pagination via next_cursor from the previous response. Optionally personalizes ranking with a brand account_id or username. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. Use solari_insight_instagram_content_rising for velocity-led accelerating posts instead. */
315
422
  export interface InsightInstagramContentTrendingArgs {
316
423
  /** Region code such as KR, JP, or US. */
317
424
  "region"?: string | undefined;
@@ -324,6 +431,127 @@ export interface InsightInstagramContentTrendingArgs {
324
431
  /** Optional brand Instagram handle for brand-affinity personalization. Ignored when account_id is set. */
325
432
  "username"?: string | undefined;
326
433
  }
434
+ /** One hashtag in depth for a market and window: post count, unique creators, views, sponsored percent, share of all posts, growth against the previous window, momentum, the share series over time, the tags used together with it, and the creators who used it most (account_id, username, posts, views, followers). Use the same brand as the leaderboard to keep the same lens. Works with any signed-in SOLARI account. */
435
+ export interface InsightInstagramHashtagDetailArgs {
436
+ /** Hashtag, with or without the leading #. */
437
+ "tag": string;
438
+ /** Market. Hashtag trends cover KR and JP. */
439
+ "region"?: "KR" | "JP" | undefined;
440
+ /** Window in days: 7, 30 or 90. Growth compares it with the window before. */
441
+ "days"?: number | undefined;
442
+ /** Optional brand account_id. Scopes the numbers to the creators around that brand (lens=brand); without it the whole market is used (lens=global). */
443
+ "brand_account_id"?: string | undefined;
444
+ /** Optional brand Instagram handle, used like brand_account_id. Ignored when brand_account_id is set. */
445
+ "brand_username"?: string | undefined;
446
+ }
447
+ /** Posts carrying one hashtag inside a trend window, most viewed first or newest first — the examples behind a leaderboard entry. Each item carries post_id, slug, author account_id and username, posted_at, play count and like count. Unlike solari_catalog_instagram_tag_search, it is limited to the window and can follow a brand lens. Works with any signed-in SOLARI account. */
448
+ export interface InsightInstagramHashtagPostsArgs {
449
+ /** Hashtag, with or without the leading #. */
450
+ "tag": string;
451
+ /** Market. Hashtag trends cover KR and JP. */
452
+ "region"?: "KR" | "JP" | undefined;
453
+ /** Window in days: 7, 30 or 90. Growth compares it with the window before. */
454
+ "days"?: number | undefined;
455
+ /** Optional brand account_id. Scopes the numbers to the creators around that brand (lens=brand); without it the whole market is used (lens=global). */
456
+ "brand_account_id"?: string | undefined;
457
+ /** Optional brand Instagram handle, used like brand_account_id. Ignored when brand_account_id is set. */
458
+ "brand_username"?: string | undefined;
459
+ /** views = most viewed first, recent = newest first. */
460
+ "sort"?: "views" | "recent" | undefined;
461
+ /** Posts per page, default 12. Values above 24 are clamped to 24. */
462
+ "limit"?: number | undefined;
463
+ /** Pagination offset, default 0, at most 960. */
464
+ "offset"?: number | undefined;
465
+ }
466
+ /** Hashtag leaderboard for a market and window, in two lists: rising (share growing fastest against the previous window) and top (volume weighted by how much more it is used than usual). Each entry carries post count, unique creators, views, sponsored percent, growth multiple against the previous window, a NEW flag, a daily share series and momentum. Pass a brand to see the tags moving around that brand's creators instead of the whole market; lens and lens_reason say which view you got. Use solari_insight_instagram_hashtag_detail and solari_insight_instagram_hashtag_posts to drill into one tag. Works with any signed-in SOLARI account. */
467
+ export interface InsightInstagramHashtagTrendingArgs {
468
+ /** Market. Hashtag trends cover KR and JP. */
469
+ "region"?: "KR" | "JP" | undefined;
470
+ /** Window in days: 7, 30 or 90. Growth compares it with the window before. */
471
+ "days"?: number | undefined;
472
+ /** Optional brand account_id. Scopes the numbers to the creators around that brand (lens=brand); without it the whole market is used (lens=global). */
473
+ "brand_account_id"?: string | undefined;
474
+ /** Optional brand Instagram handle, used like brand_account_id. Ignored when brand_account_id is set. */
475
+ "brand_username"?: string | undefined;
476
+ /** Entries kept per list, default 30. Values above 100 are clamped to 100; top_total and rising_total give the full sizes. */
477
+ "limit"?: number | undefined;
478
+ }
479
+ /** Brand leaderboard for a market: brands ranked by how the content that tags or mentions them performs — total views by default, or views per post, post count, creator count, likes, sponsored views or organic views. Each row carries the sponsored subset and the organic median views per post, so the sponsored share reads per brand. Narrow to a category with scope; pass a brand to get its own rank as me, or find_username to locate any brand. Data is a daily snapshot (snapshot_at). Works with any signed-in SOLARI account. */
480
+ export interface InsightInstagramRankingBrandsArgs {
481
+ /** Market. */
482
+ "region"?: "KR" | "JP" | "US" | undefined;
483
+ /** Window in days: 30 or 90. */
484
+ "days"?: number | undefined;
485
+ /** Ranking metric: plays = total views, median_plays = views per post. */
486
+ "sort"?: "plays" | "median_plays" | "posts" | "creators" | "likes" | "sponsored_plays" | "organic_plays" | undefined;
487
+ /** Category to rank within: 'all', 'd1:<group>' or 'd2:<group>/<category>'. Each response lists the valid categories and category_groups. Omitted: the brand's own top category when a brand is given, else 'all'. */
488
+ "scope"?: string | undefined;
489
+ /** Optional brand account_id. Sets the default category and, on the brand board, reports that brand's own position as me. */
490
+ "brand_account_id"?: string | undefined;
491
+ /** Optional brand Instagram handle, used like brand_account_id. Ignored when brand_account_id is set. */
492
+ "brand_username"?: string | undefined;
493
+ /** Optional Instagram handle to locate in this board; its rank and top percentile come back as lookup, or lookup_reason when it is not ranked. */
494
+ "find_username"?: string | undefined;
495
+ /** Only brands with at least this many posts: 1, 3 or 10. */
496
+ "min_posts"?: number | undefined;
497
+ /** Rows per page, default 20. Values above 100 are clamped to 100. */
498
+ "limit"?: number | undefined;
499
+ /** Pagination offset, default 0. */
500
+ "offset"?: number | undefined;
501
+ }
502
+ /** Creator leaderboard for a market: creators who make brand-tagged content, ranked within a category so a specialist is not beaten by a large account with one post in it. Sort by total views, views per post, likes, number of brands worked with, sponsored views, reach (views per follower), lift (views per post against the creator's own usual median) or one-month view growth; the last three are null when a creator's baseline is too small. Each row carries the sponsored subset and the organic median. kind=magazine ranks magazine and media accounts instead. Brand-owned, agency and shop accounts are excluded. Data is a daily snapshot (snapshot_at). Works with any signed-in SOLARI account. */
503
+ export interface InsightInstagramRankingCreatorsArgs {
504
+ /** Market (the creator's own region). */
505
+ "region"?: "KR" | "JP" | undefined;
506
+ /** Window in days: 30 or 90. */
507
+ "days"?: number | undefined;
508
+ /** Ranking metric: plays = total views, median_plays = views per post. */
509
+ "sort"?: "plays" | "median_plays" | "likes" | "brands" | "sponsored_plays" | "reach" | "lift" | "growth" | undefined;
510
+ /** creator = individuals, magazine = magazine/media accounts. */
511
+ "kind"?: "creator" | "magazine" | undefined;
512
+ /** Category to rank within: 'all', 'd1:<group>' or 'd2:<group>/<category>'. Each response lists the valid categories and category_groups. Omitted: the brand's own top category when a brand is given, else 'all'. */
513
+ "scope"?: string | undefined;
514
+ /** Optional brand account_id. Sets the default category and, on the brand board, reports that brand's own position as me. */
515
+ "brand_account_id"?: string | undefined;
516
+ /** Optional brand Instagram handle, used like brand_account_id. Ignored when brand_account_id is set. */
517
+ "brand_username"?: string | undefined;
518
+ /** Optional Instagram handle to locate in this board; its rank and top percentile come back as lookup, or lookup_reason when it is not ranked. */
519
+ "find_username"?: string | undefined;
520
+ /** Only creators with at least this many posts in the category: 3, 10 or 30. */
521
+ "min_posts"?: number | undefined;
522
+ /** Follower floor: 1000, 10000 or 100000. */
523
+ "min_followers"?: number | undefined;
524
+ /** Rows per page, default 20. Values above 100 are clamped to 100. */
525
+ "limit"?: number | undefined;
526
+ /** Pagination offset, default 0. */
527
+ "offset"?: number | undefined;
528
+ }
529
+ /** Where one Instagram account stands, without knowing whether it is a brand or a creator: for each board it appears on (brand, creator), its rank, pool size and top percentile in every category it belongs to, plus its overall row. Ranked by total views with the loosest filters. A side is null when the account is not on that board. Works with any signed-in SOLARI account. */
530
+ export interface InsightInstagramRankingFindArgs {
531
+ /** Instagram handle, with or without a leading @. */
532
+ "username": string;
533
+ /** Market. The creator board exists for KR and JP only. */
534
+ "region"?: "KR" | "JP" | "US" | undefined;
535
+ /** Window in days: 30 or 90. */
536
+ "days"?: number | undefined;
537
+ }
538
+ /** The best-performing posts behind one leaderboard row — the evidence for a brand's or creator's number — each marked sponsored or not. Pass the row's account_id with the same board, region, days (and scope for creators) the list used; kind=sponsored keeps the sponsored subset only. Works with any signed-in SOLARI account. */
539
+ export interface InsightInstagramRankingPostsArgs {
540
+ /** Which leaderboard the row came from. */
541
+ "board": "brand" | "creator";
542
+ /** account_id of the ranking row. */
543
+ "account_id": string;
544
+ /** Same market as the list. The creator board exists for KR and JP only. */
545
+ "region"?: "KR" | "JP" | "US" | undefined;
546
+ /** Window in days: 30 or 90. */
547
+ "days"?: number | undefined;
548
+ /** Creator board only: the same scope the list used. Omitted: 'all'. */
549
+ "scope"?: string | undefined;
550
+ /** All top posts, or the sponsored subset. */
551
+ "kind"?: "all" | "sponsored" | undefined;
552
+ /** Maximum posts, default 6. Values above 12 are clamped to 12. */
553
+ "limit"?: number | undefined;
554
+ }
327
555
  /** Counts and engagement rollups over tracked TikTok posts, for questions answered by numbers rather than by individual posts: posts per account per month, which hashtags dominate a topic, average plays by format. Group by account, post_type, hashtag, mention, or caption_keyword, and optionally split each group by day, week, or month. post_count always comes back; request metrics for like/comment/view/share/collect sums and averages (the view_* metrics count plays), mean follower count, and distinct account counts. Narrow the set with a free-text query (captions and video transcripts), usernames, hashtags, mentions, or post_types (video, carousel). Filtering by mentions and grouping by account answers which accounts tagged a given handle. Coverage: regions KR, JP, US, and TW, holding roughly the most recent 6 months; a since older than that is clamped and the applied value is echoed back. Buckets are largest-first; truncated=true means more groups existed than limit returned. Use solari_catalog_tiktok_content_search when the posts themselves are needed instead of counts. Works with any signed-in SOLARI account. */
328
556
  export interface InsightTiktokContentAggregateArgs {
329
557
  /** Region to aggregate. Only these four regions are indexed. */
@@ -351,6 +579,9 @@ export interface InsightTiktokContentAggregateArgs {
351
579
  /** Maximum groups returned when group_by is set, default 20. Values above 50 are clamped to 50. */
352
580
  "limit"?: number | undefined;
353
581
  }
582
+ /** Reports the signed-in SOLARI account's plan, credit balance, and recent tool usage. Call it once before a long run to see whether there is enough credit, and call it again when a tool comes back with CREDIT_EXHAUSTED or ACCOUNT_BLOCKED so you can tell the user the exact balance and where to start a trial, upgrade, or renew the plan. Returns plan (trial, plus, pro, enterprise, or none) with plan_label, status (active, exhausted, blocked, or no_plan), credit_remaining, credit_granted_this_cycle, credit_expires_at, cycle_renews_at, trial (whether a trial is running and when it ends), trial_requires_verified_email, trial_requires_payment_method (true when a verified account can start its free trial after securely saving a card with no immediate charge or automatic paid subscription), usage_last_30_days broken down by channel (cli, mcp, api), and billing_url. Takes no arguments and reads the balance for whoever is signed in. This call is free: it costs no credit and keeps working at a zero balance, so it is always the right way to find out why a tool was blocked. It changes nothing. */
583
+ export interface UsageGetArgs {
584
+ }
354
585
  export interface SolariToolMap {
355
586
  "solari_catalog_instagram_account_posts": CatalogInstagramAccountPostsArgs;
356
587
  "solari_catalog_instagram_account_profile": CatalogInstagramAccountProfileArgs;
@@ -365,12 +596,20 @@ export interface SolariToolMap {
365
596
  "solari_catalog_tiktok_content_batch": CatalogTiktokContentBatchArgs;
366
597
  "solari_catalog_tiktok_content_detail": CatalogTiktokContentDetailArgs;
367
598
  "solari_catalog_tiktok_content_search": CatalogTiktokContentSearchArgs;
599
+ "solari_feedback_send": FeedbackSendArgs;
368
600
  "solari_fetch_instagram_account": FetchInstagramAccountArgs;
601
+ "solari_fetch_instagram_account_search": FetchInstagramAccountSearchArgs;
602
+ "solari_fetch_instagram_hashtag_posts": FetchInstagramHashtagPostsArgs;
603
+ "solari_fetch_instagram_hashtag_search": FetchInstagramHashtagSearchArgs;
604
+ "solari_fetch_instagram_post": FetchInstagramPostArgs;
369
605
  "solari_fetch_instagram_posts": FetchInstagramPostsArgs;
370
606
  "solari_fetch_tiktok_account": FetchTiktokAccountArgs;
607
+ "solari_fetch_tiktok_post": FetchTiktokPostArgs;
371
608
  "solari_fetch_tiktok_posts": FetchTiktokPostsArgs;
372
609
  "solari_insight_instagram_account_ad_posts": InsightInstagramAccountAdPostsArgs;
373
610
  "solari_insight_instagram_account_collabs": InsightInstagramAccountCollabsArgs;
611
+ "solari_insight_instagram_account_discover": InsightInstagramAccountDiscoverArgs;
612
+ "solari_insight_instagram_account_discover_results": InsightInstagramAccountDiscoverResultsArgs;
374
613
  "solari_insight_instagram_account_similar": InsightInstagramAccountSimilarArgs;
375
614
  "solari_insight_instagram_brand_ad_posts": InsightInstagramBrandAdPostsArgs;
376
615
  "solari_insight_instagram_brand_ad_stats": InsightInstagramBrandAdStatsArgs;
@@ -380,9 +619,18 @@ export interface SolariToolMap {
380
619
  "solari_insight_instagram_brand_top_collaborators": InsightInstagramBrandTopCollaboratorsArgs;
381
620
  "solari_insight_instagram_content_aggregate": InsightInstagramContentAggregateArgs;
382
621
  "solari_insight_instagram_content_rising": InsightInstagramContentRisingArgs;
622
+ "solari_insight_instagram_content_similar": InsightInstagramContentSimilarArgs;
383
623
  "solari_insight_instagram_content_trend_clusters": InsightInstagramContentTrendClustersArgs;
384
624
  "solari_insight_instagram_content_trending": InsightInstagramContentTrendingArgs;
625
+ "solari_insight_instagram_hashtag_detail": InsightInstagramHashtagDetailArgs;
626
+ "solari_insight_instagram_hashtag_posts": InsightInstagramHashtagPostsArgs;
627
+ "solari_insight_instagram_hashtag_trending": InsightInstagramHashtagTrendingArgs;
628
+ "solari_insight_instagram_ranking_brands": InsightInstagramRankingBrandsArgs;
629
+ "solari_insight_instagram_ranking_creators": InsightInstagramRankingCreatorsArgs;
630
+ "solari_insight_instagram_ranking_find": InsightInstagramRankingFindArgs;
631
+ "solari_insight_instagram_ranking_posts": InsightInstagramRankingPostsArgs;
385
632
  "solari_insight_tiktok_content_aggregate": InsightTiktokContentAggregateArgs;
633
+ "solari_usage_get": UsageGetArgs;
386
634
  }
387
635
  export type SolariToolName = keyof SolariToolMap;
388
636
  export declare const SOLARI_TOOL_NAMES: readonly SolariToolName[];
@@ -393,6 +641,7 @@ export type SolariToolsWithoutRequiredArgs = {
393
641
  "solari_catalog_tiktok_account_posts": true;
394
642
  "solari_catalog_tiktok_account_profile": true;
395
643
  "solari_catalog_tiktok_content_detail": true;
644
+ "solari_fetch_instagram_post": true;
396
645
  "solari_insight_instagram_account_ad_posts": true;
397
646
  "solari_insight_instagram_account_collabs": true;
398
647
  "solari_insight_instagram_brand_lookalike_content": true;
@@ -401,13 +650,17 @@ export type SolariToolsWithoutRequiredArgs = {
401
650
  "solari_insight_instagram_content_rising": true;
402
651
  "solari_insight_instagram_content_trend_clusters": true;
403
652
  "solari_insight_instagram_content_trending": true;
653
+ "solari_insight_instagram_hashtag_trending": true;
654
+ "solari_insight_instagram_ranking_brands": true;
655
+ "solari_insight_instagram_ranking_creators": true;
404
656
  "solari_insight_tiktok_content_aggregate": true;
657
+ "solari_usage_get": true;
405
658
  };
406
659
  export interface SolariTools {
407
660
  catalog: {
408
661
  instagram: {
409
662
  account: {
410
- /** Posts by one collected Instagram account, newest first, with pagination and filters. Identify the account by account_id (UUID from solari_catalog_instagram_account_search) or by username (Instagram handle). Each item has post_id (SOLARI post UUID), slug and url (public Instagram permalink), post_type (reel, video, photo, or carousel), posted_at, caption text, like/comment/play counts, media_count, is_paid_partnership, a medias array (every media of the post in carousel order, each with media_type, media/thumbnail URLs, video_duration, and tags — accounts and hashtags tagged on that media, with account_id when the tagged account is tracked), and a representative thumbnail_url. The response carries found, account_id, username, total, has_more, and items; page with limit and offset, narrow with since/until (UTC dates, inclusive) and post_type. This reads the catalog only; found=false means the handle is not in the catalog — call solari_fetch_instagram_posts with that username first. Works with any signed-in SOLARI account. */
663
+ /** Posts by one collected Instagram account, newest first, with pagination and filters. Identify the account by account_id (UUID from solari_catalog_instagram_account_search) or by username (Instagram handle). Each item has post_id (SOLARI post UUID), slug and url (public Instagram permalink), post_type (reel, video, photo, or carousel), posted_at, caption text, like/comment/play counts, media_count, is_paid_partnership, a medias array (every media of the post in carousel order, each with media_type, media/thumbnail URLs, video_duration, and tags — accounts and hashtags tagged on that media, with account_id when the tagged account is tracked), and a representative thumbnail_url. The response carries found, account_id, username, total, has_more, and items; page with limit and offset, narrow with since/until (UTC dates, inclusive) and post_type. This reads the catalog only; found=false means the handle is not in the catalog — call solari_fetch_instagram_posts with that username first. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
411
664
  posts<T = unknown>(args?: CatalogInstagramAccountPostsArgs): Promise<T>;
412
665
  /** Full SOLARI catalog profile for one collected Instagram account: username, full name, bio, follower/following/post counts, verified flag, inferred account_type, view metrics (median and total views, ad count, month-over-month growth, region percentiles), plus embedded previews of recent posts and recent ad collaborations. Identify the account by account_id (UUID from solari_catalog_instagram_account_search) or by username (Instagram handle). This reads the catalog only; an unknown handle is not-found — call solari_fetch_instagram_account with that username first, then retry. Works with any signed-in SOLARI account. */
413
666
  profile<T = unknown>(args?: CatalogInstagramAccountProfileArgs): Promise<T>;
@@ -415,21 +668,21 @@ export interface SolariTools {
415
668
  search<T = unknown>(args: CatalogInstagramAccountSearchArgs): Promise<T>;
416
669
  };
417
670
  content: {
418
- /** Batch companion to solari_catalog_instagram_content_detail: hydrates up to 100 posts by their SOLARI post UUIDs in a single call. Each row carries slug, caption, posted_at, like/comment counts, play_count for videos, and the author's username and account_id. Untracked ids are omitted, so found can be lower than requested. Feed it post_id lists from solari_insight_instagram_brand_overview (full=true), solari_catalog_instagram_account_posts, solari_catalog_instagram_content_search, or the trend feeds. Works with any signed-in SOLARI account. */
671
+ /** Batch companion to solari_catalog_instagram_content_detail: hydrates up to 100 posts by their SOLARI post UUIDs in a single call. Each row carries slug, caption, posted_at, like/comment counts, play_count for videos, and the author's username and account_id. Untracked ids are omitted, so found can be lower than requested. Feed it post_id lists from solari_insight_instagram_brand_overview (full=true), solari_catalog_instagram_account_posts, solari_catalog_instagram_content_search, or the trend feeds. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
419
672
  batch<T = unknown>(args: CatalogInstagramContentBatchArgs): Promise<T>;
420
- /** Detail for one Instagram post in the SOLARI catalog, in the same item shape as solari_insight_instagram_content_trending entries. Identify the post by post_id (SOLARI post UUID from solari_catalog_instagram_account_posts, solari_catalog_instagram_content_search, solari_insight_instagram_content_trending, or solari_insight_instagram_content_rising), by slug (the public Instagram shortcode), or by url (the public post URL). This reads the catalog only; item is null when the post is not stored — call solari_fetch_instagram_posts with the author's username first. Fetch does not take a post URL. Works with any signed-in SOLARI account. */
673
+ /** Detail for one Instagram post in the SOLARI catalog, in the same item shape as solari_insight_instagram_content_trending entries. Identify the post by post_id (SOLARI post UUID from solari_catalog_instagram_account_posts, solari_catalog_instagram_content_search, solari_insight_instagram_content_trending, or solari_insight_instagram_content_rising), by slug (the public Instagram shortcode), or by url (the public post URL). This reads the catalog only; item is null when the post is not stored — call solari_fetch_instagram_post with the same url or slug to collect it and learn its author, or solari_fetch_instagram_posts when you already know the author's username. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
421
674
  detail<T = unknown>(args?: CatalogInstagramContentDetailArgs): Promise<T>;
422
- /** Lexical keyword search over tracked posts: matches captions, creator bios, and video transcription text (Korean-aware analysis plus n-gram partial matching), ranked by relevance with match highlights. Each item carries post_id, author account_id/username, caption, transcription text, engagement counts, and score — feed post_id into solari_catalog_instagram_content_detail or solari_catalog_instagram_content_batch and the account reference into the account tools. Coverage: only regions KR, JP, US, and TW are searchable, holding roughly the most recent 6 months of posts; total is exact up to 10,000 and saturates there. Narrow with since/until (UTC dates). Works with any signed-in SOLARI account. */
675
+ /** Lexical keyword search over tracked posts: matches captions, creator bios, and video transcription text (Korean-aware analysis plus n-gram partial matching), ranked by relevance with match highlights. Each item carries post_id, author account_id/username, caption, transcription text, engagement counts, and score — feed post_id into solari_catalog_instagram_content_detail or solari_catalog_instagram_content_batch and the account reference into the account tools. Coverage: only regions KR, JP, US, and TW are searchable, holding roughly the most recent 6 months of posts; total is exact up to 10,000 and saturates there. Narrow with since/until (UTC dates). Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
423
676
  search<T = unknown>(args: CatalogInstagramContentSearchArgs): Promise<T>;
424
677
  };
425
678
  tag: {
426
- /** Every tracked post carrying one exact tag — '#ootd' for a hashtag, '@handle' for mentions of an account — hydrated into full rows, newest-collected first with cursor pagination. Exact whole-tag matching over the entire tracked history and every region, where solari_catalog_instagram_content_search does free-text over four regions and about six months. Works with any signed-in SOLARI account. */
679
+ /** Every tracked post carrying one exact tag — '#ootd' for a hashtag, '@handle' for mentions of an account — hydrated into full rows, newest-collected first with cursor pagination. Exact whole-tag matching over the entire tracked history and every region, where solari_catalog_instagram_content_search does free-text over four regions and about six months. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. The tag index refreshes once a day: when a hashtag is missing or stale here, solari_fetch_instagram_hashtag_posts collects a live page of it. Works with any signed-in SOLARI account. */
427
680
  search<T = unknown>(args: CatalogInstagramTagSearchArgs): Promise<T>;
428
681
  };
429
682
  };
430
683
  tiktok: {
431
684
  account: {
432
- /** Posts by one collected TikTok account, newest first, with pagination and filters. Identify the account by account_id (TikTok account UUID from solari_catalog_tiktok_account_search) or by username (TikTok handle). Each item has post_id (SOLARI post UUID), video_id (the public numeric TikTok id) and url, post_type (video or carousel), posted_at, caption, duration_seconds, play/like/comment/share/collect counts, is_ad, cover_url, images (carousel slides), hashtags, mentions, and transcript when include_transcript=true. Transcripts are long, so include_transcript is off by default; turn it on only when the spoken content matters. The response carries found, account_id, username, total, has_more, and items; page with limit and offset, narrow with since/until (UTC dates, inclusive) and post_type. This reads the catalog only; found=false means the handle is not in the catalog — call solari_fetch_tiktok_posts with that username first. Works with any signed-in SOLARI account. */
685
+ /** Posts by one collected TikTok account, newest first, with pagination and filters. Identify the account by account_id (TikTok account UUID from solari_catalog_tiktok_account_search) or by username (TikTok handle). Each item has post_id (SOLARI post UUID), video_id (the public numeric TikTok id) and url, post_type (video or carousel), posted_at, caption, duration_seconds, play/like/comment/share/collect counts, is_ad, cover_url, images (carousel slides), hashtags, mentions, and transcript when include_transcript=true. Transcripts are long, so include_transcript is off by default; turn it on only when the spoken content matters. The response carries found, account_id, username, total, has_more, and items; page with limit and offset, narrow with since/until (UTC dates, inclusive) and post_type. This reads the catalog only; found=false means the handle is not in the catalog — call solari_fetch_tiktok_posts with that username first. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
433
686
  posts<T = unknown>(args?: CatalogTiktokAccountPostsArgs): Promise<T>;
434
687
  /** Full SOLARI catalog profile for one collected 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_catalog_tiktok_account_search) or by username (TikTok handle). This reads the catalog only; an unknown handle is not-found — call solari_fetch_tiktok_account with that username first, then retry. Works with any signed-in SOLARI account. */
435
688
  profile<T = unknown>(args?: CatalogTiktokAccountProfileArgs): Promise<T>;
@@ -437,25 +690,43 @@ export interface SolariTools {
437
690
  search<T = unknown>(args: CatalogTiktokAccountSearchArgs): Promise<T>;
438
691
  };
439
692
  content: {
440
- /** Batch companion to solari_catalog_tiktok_content_detail: hydrates up to 100 TikTok posts by their SOLARI post UUIDs in a single call, in the same item shape as solari_catalog_tiktok_account_posts entries. Untracked ids are omitted, so found can be lower than requested. Transcripts are long, so include_transcript is off by default. Feed it post_id lists from solari_catalog_tiktok_account_posts, solari_catalog_tiktok_content_search, or solari_catalog_tiktok_account_profile; TikTok post_ids are separate from Instagram post_ids. Works with any signed-in SOLARI account. */
693
+ /** Batch companion to solari_catalog_tiktok_content_detail: hydrates up to 100 TikTok posts by their SOLARI post UUIDs in a single call, in the same item shape as solari_catalog_tiktok_account_posts entries. Untracked ids are omitted, so found can be lower than requested. Transcripts are long, so include_transcript is off by default. Feed it post_id lists from solari_catalog_tiktok_account_posts, solari_catalog_tiktok_content_search, or solari_catalog_tiktok_account_profile; TikTok post_ids are separate from Instagram post_ids. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
441
694
  batch<T = unknown>(args: CatalogTiktokContentBatchArgs): Promise<T>;
442
- /** Detail for one TikTok post in the SOLARI catalog, in the same item shape as solari_catalog_tiktok_account_posts entries (transcript included when one exists). Identify the post by post_id (SOLARI post UUID from solari_catalog_tiktok_account_posts, solari_catalog_tiktok_content_search, or solari_catalog_tiktok_account_profile), by video_id (the public numeric TikTok video id), or by url (any public TikTok post URL, including vm.tiktok.com and vt.tiktok.com short links). This reads the catalog only; item is null when the post is not stored — call solari_fetch_tiktok_posts with the author's username first. Fetch does not take a post URL. Works with any signed-in SOLARI account. */
695
+ /** Detail for one TikTok post in the SOLARI catalog, in the same item shape as solari_catalog_tiktok_account_posts entries (transcript included when one exists). Identify the post by post_id (SOLARI post UUID from solari_catalog_tiktok_account_posts, solari_catalog_tiktok_content_search, or solari_catalog_tiktok_account_profile), by video_id (the public numeric TikTok video id), or by url (any public TikTok post URL, including vm.tiktok.com and vt.tiktok.com short links). This reads the catalog only; item is null when the post is not stored — call solari_fetch_tiktok_post with the same url to collect it and learn its author, or solari_fetch_tiktok_posts when you already know the author's username. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
443
696
  detail<T = unknown>(args?: CatalogTiktokContentDetailArgs): Promise<T>;
444
- /** Lexical keyword search over tracked TikTok posts: matches captions and video transcripts (Korean-aware analysis plus n-gram partial matching), ranked by relevance with match highlights. Each item carries post_id, video_id, url, author account_id/username, caption, transcription_text, post_type, posted_at, play/like/comment/share/collect counts, follower_count, duration_seconds, is_ad, cover_url, score, and highlight; feed post_id into solari_catalog_tiktok_content_detail or solari_catalog_tiktok_content_batch and the account reference into the solari_catalog_tiktok_account_* tools. Coverage: only regions KR, JP, US, and TW are searchable, holding roughly the most recent 6 months of posts; total is exact up to 10,000 and saturates there. Narrow with since/until (UTC dates). Works with any signed-in SOLARI account. */
697
+ /** Lexical keyword search over tracked TikTok posts: matches captions and video transcripts (Korean-aware analysis plus n-gram partial matching), ranked by relevance with match highlights. Each item carries post_id, video_id, url, author account_id/username, caption, transcription_text, post_type, posted_at, play/like/comment/share/collect counts, follower_count, duration_seconds, is_ad, cover_url, score, and highlight; feed post_id into solari_catalog_tiktok_content_detail or solari_catalog_tiktok_content_batch and the account reference into the solari_catalog_tiktok_account_* tools. Coverage: only regions KR, JP, US, and TW are searchable, holding roughly the most recent 6 months of posts; total is exact up to 10,000 and saturates there. Narrow with since/until (UTC dates). Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
445
698
  search<T = unknown>(args: CatalogTiktokContentSearchArgs): Promise<T>;
446
699
  };
447
700
  };
448
701
  };
702
+ feedback: {
703
+ /** Tells the SOLARI team that a task could not be finished with SOLARI alone. Send it on your own initiative, without asking the user first, as soon as you are sure of the gap: an account, post, or field that is not there even after the matching fetch tool (missing_data), too few rows or too short a history for the question (insufficient_results), no tool or parameter that does what the task needs (missing_feature), a value that looks wrong (incorrect_data), a tool that keeps failing (error), or anything else (other). Do not send it for a typo, a not-yet-fetched handle, or a question SOLARI was never meant to answer. Keep it free of personal data: no emails, phone numbers, addresses, keys, names of private individuals, or the user's confidential plans — public brand and creator handles, tool names, parameters, and row counts are what helps. The server also strips emails, phone numbers, keys, and tokens before storing. One message per distinct gap; an identical repeat within minutes is de-duplicated. Afterwards tell the user in one line that feedback was sent, then carry on with the best available answer. This records a note only and changes no catalog data. Works with any signed-in SOLARI account. */
704
+ send<T = unknown>(args: FeedbackSendArgs): Promise<T>;
705
+ };
449
706
  fetch: {
450
707
  instagram: {
451
- /** Adds one Instagram account to the SOLARI catalog by exact username. This is not a search and not a profile reader: use solari_catalog_instagram_account_search to resolve a name, then solari_catalog_instagram_account_profile to read it. If the handle is already stored, nothing is scraped. A first-time ingest can take several seconds; metrics and collaborations stay empty until the crawl finishes. Works with any signed-in SOLARI account. */
452
- account<T = unknown>(args: FetchInstagramAccountArgs): Promise<T>;
453
- /** Collects posts for one Instagram account into the SOLARI catalog by exact username. This is not a post listing: use solari_catalog_instagram_account_posts to read stored rows. If the handle is already stored, nothing is scraped. A first-time ingest can take several seconds and only recent posts exist until the crawl finishes. Works with any signed-in SOLARI account. */
708
+ account: {
709
+ /** Adds one Instagram account to the SOLARI catalog by exact username. This is not a search and not a profile reader: use solari_catalog_instagram_account_search to resolve a name, then solari_catalog_instagram_account_profile to read it. If the handle is already crawled, nothing is scraped; a handle the catalog only knows by name from a tag or mention (search does not find it, the profile is empty) is crawled now. A first-time ingest can take several seconds; metrics and collaborations stay empty until the crawl finishes. Works with any signed-in SOLARI account. */
710
+ <T = unknown>(args: FetchInstagramAccountArgs): Promise<T>;
711
+ /** Looks Instagram accounts up live by name or handle fragment and returns up to 50 candidates in Instagram's own order, each with username, display name, verified and private flags. Use it when solari_catalog_instagram_account_search does not know the account: hits already in the catalog carry account_id, the rest can be ingested with solari_fetch_instagram_account. Nothing is stored and there is no pagination. Works with any signed-in SOLARI account. */
712
+ search<T = unknown>(args: FetchInstagramAccountSearchArgs): Promise<T>;
713
+ };
714
+ hashtag: {
715
+ /** Collects one page of an Instagram hashtag feed live, stores every post in the SOLARI catalog and returns them in feed order. Stored posts reach solari_catalog_instagram_tag_search only after its next daily refresh, so read this page's posts from the response itself. Every call goes out to Instagram, so use it when a hashtag is missing or stale in solari_catalog_instagram_tag_search, not as the default way to read a tag. tab picks the feed: recent (default), top, or clips for reels. One page is roughly 20 to 30 posts and takes several seconds; pass next_cursor back as cursor for the next page of the same hashtag and tab. The feed ends only when next_cursor is null: a page can come back with found 0 and a next_cursor, which means keep going. fetched_count is how many posts Instagram returned; found is lower when some could not be stored. A hashtag that is hidden, restricted, or unknown to Instagram answers is_hidden=true with no posts; Instagram does not tell these apart, so check the spelling with solari_fetch_instagram_hashtag_search. Each post carries assets with a direct-download asset_url. Works with any signed-in SOLARI account. */
716
+ posts<T = unknown>(args: FetchInstagramHashtagPostsArgs): Promise<T>;
717
+ /** Looks hashtags up on Instagram live by keyword and returns up to 20 candidates with the number of posts Instagram reports under each. Use it to find the exact spelling or the biggest variant of a tag before solari_catalog_instagram_tag_search or solari_fetch_instagram_hashtag_posts. Nothing is stored and there is no pagination. Works with any signed-in SOLARI account. */
718
+ search<T = unknown>(args: FetchInstagramHashtagSearchArgs): Promise<T>;
719
+ };
720
+ /** Collects one Instagram post into the SOLARI catalog by its public URL or shortcode and returns it with its author. Use it when solari_catalog_instagram_content_detail answers item=null for a link you were given and you do not know who posted it. If the post is already stored, nothing is scraped. A first-time collect takes a few seconds. The author arrives as a name-only account: call solari_fetch_instagram_account with the returned username to crawl their profile and posts. item is null when Instagram has no public post at that reference. The post carries assets with a direct-download asset_url. Works with any signed-in SOLARI account. */
721
+ post<T = unknown>(args?: FetchInstagramPostArgs): Promise<T>;
722
+ /** Collects posts for one Instagram account into the SOLARI catalog by exact username. This is not a post listing: use solari_catalog_instagram_account_posts to read stored rows. If the handle is already crawled, nothing is scraped; a handle the catalog only knows by name from a tag or mention is crawled now and its posts are queued right away. A first-time ingest can take several seconds and the posts land shortly after, so re-read the catalog after a short wait. Works with any signed-in SOLARI account. */
454
723
  posts<T = unknown>(args: FetchInstagramPostsArgs): Promise<T>;
455
724
  };
456
725
  tiktok: {
457
726
  /** Adds one TikTok account to the SOLARI catalog by exact username. This is not a search and not a profile reader: use solari_catalog_tiktok_account_search to resolve a name, then solari_catalog_tiktok_account_profile to read it. If the handle is already stored, nothing is scraped. A first-time ingest can take 10 to 40 seconds; only recent posts exist until the crawl finishes. Works with any signed-in SOLARI account. */
458
727
  account<T = unknown>(args: FetchTiktokAccountArgs): Promise<T>;
728
+ /** Collects one TikTok post into the SOLARI catalog by its public URL and returns it with its author. Use it when solari_catalog_tiktok_content_detail answers item=null for a link you were given and you do not know who posted it. Accepts https://www.tiktok.com/@<handle>/video/<id> links and vm.tiktok.com / vt.tiktok.com short links. If the post is already stored, nothing is scraped. A first-time collect takes a few seconds. The author arrives as a name-only account: call solari_fetch_tiktok_account with the returned username to crawl their profile and posts. item is null when TikTok has no public post at that URL. The post carries assets with a direct-download asset_url. Works with any signed-in SOLARI account. */
729
+ post<T = unknown>(args: FetchTiktokPostArgs): Promise<T>;
459
730
  /** Collects posts for one TikTok account into the SOLARI catalog by exact username. This is not a post listing: use solari_catalog_tiktok_account_posts to read stored rows. If the handle is already stored, nothing is scraped. A first-time ingest can take 10 to 40 seconds and only recent posts exist until the crawl finishes. Works with any signed-in SOLARI account. */
460
731
  posts<T = unknown>(args: FetchTiktokPostsArgs): Promise<T>;
461
732
  };
@@ -464,27 +735,33 @@ export interface SolariTools {
464
735
  instagram: {
465
736
  account: {
466
737
  ad: {
467
- /** Paginated row-level list of the identified sponsored posts one creator authored, newest first, with the target brand attached to each row — one row per post-brand pair, so a multi-brand post appears once per target. Each item carries post_id, slug and url, post_type, posted_at, caption text, like/comment/play counts, media_count, is_paid_partnership, and target_account_id/target_username. Filter to one brand with target (its account_id or Instagram handle). Widen the lookback with months (default 3, up to 24). Row-level companion to solari_insight_instagram_account_collabs, which groups the same history by brand. Identify the creator by account_id (SOLARI account UUID) or by username (Instagram handle); an unknown reference returns a not-found error. Works with any signed-in SOLARI account. */
738
+ /** Paginated row-level list of the identified sponsored posts one creator authored, newest first, with the target brand attached to each row — one row per post-brand pair, so a multi-brand post appears once per target. Each item carries post_id, slug and url, post_type, posted_at, caption text, like/comment/play counts, media_count, is_paid_partnership, and target_account_id/target_username. Filter to one brand with target (its account_id or Instagram handle). Widen the lookback with months (default 3, up to 24). Row-level companion to solari_insight_instagram_account_collabs, which groups the same history by brand. Identify the creator by account_id (SOLARI account UUID) or by username (Instagram handle); an unknown reference returns a not-found error. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
468
739
  posts<T = unknown>(args?: InsightInstagramAccountAdPostsArgs): Promise<T>;
469
740
  };
470
741
  /** Recent ad collaborations produced by one creator within a month window. Each item is a target brand (target_account_id, target_username) with collab_count, last_posted_at, and a sample collaboration post. Returns items, has_more, and total; page with limit/offset. Identify the creator by account_id (SOLARI account UUID) or by username (Instagram handle); an unknown reference returns a not-found error. Mirror view of solari_insight_instagram_brand_top_collaborators, which starts from the brand instead. Works with any signed-in SOLARI account. */
471
742
  collabs<T = unknown>(args?: InsightInstagramAccountCollabsArgs): Promise<T>;
743
+ discover: {
744
+ /** Finds Instagram creators that fit a brief: topic phrases matched against captions, transcripts and visual style, bio traits, a reference creator to find lookalikes of, trending growth, and a product the creator should have advertised before — then filtered by follower, 3-month total view and 3-month median view ranges and excluded keywords. Use it to build a shortlist; use solari_catalog_instagram_account_search instead when you already have a name. Returns a search_id, the total found, the top usernames and result sections; page the full creator list (profile metrics and each creator's top recent posts) with solari_insight_instagram_account_discover_results. Broad briefs can take up to a minute. Works with any signed-in SOLARI account. */
745
+ <T = unknown>(args: InsightInstagramAccountDiscoverArgs): Promise<T>;
746
+ /** Pages the full creator list of one solari_insight_instagram_account_discover run. Each item carries account_id, username, full name, bio, follower count, 3-month median and total views, view growth, ad count, and the creator's top recent posts. Results stay available after the search, so re-sort or page without searching again. Works with any signed-in SOLARI account. */
747
+ results<T = unknown>(args: InsightInstagramAccountDiscoverResultsArgs): Promise<T>;
748
+ };
472
749
  /** Finds Instagram accounts similar to the given username based on relationship-graph overlap. Takes an Instagram handle (no @), not a UUID. Works with any signed-in SOLARI account. */
473
750
  similar<T = unknown>(args: InsightInstagramAccountSimilarArgs): Promise<T>;
474
751
  };
475
752
  brand: {
476
753
  ad: {
477
- /** Paginated row-level list of the identified sponsored posts targeting a brand, each hydrated with slug, caption, posted_at, like/comment counts, play_count for videos, and the authoring creator's username and account_id. sort=recent pages the full window newest-first with an exact total; sort=engagement ranks within a bounded recent window whose size is reported as ranking_window (non-null means the ordering covers a slice, not everything). Widen the lookback with months (default 3, up to 24). Row-level companion to solari_insight_instagram_brand_ad_stats. Takes the brand's Instagram handle (no @). Works with any signed-in SOLARI account. Returns 404 if the handle is not tracked. */
754
+ /** Paginated row-level list of the identified sponsored posts targeting a brand, each hydrated with slug, caption, posted_at, like/comment counts, play_count for videos, and the authoring creator's username and account_id. sort=recent pages the full window newest-first with an exact total; sort=engagement ranks within a bounded recent window whose size is reported as ranking_window (non-null means the ordering covers a slice, not everything). Widen the lookback with months (default 3, up to 24). Row-level companion to solari_insight_instagram_brand_ad_stats. Takes the brand's Instagram handle (no @). Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. Returns 404 if the handle is not tracked. */
478
755
  posts<T = unknown>(args: InsightInstagramBrandAdPostsArgs): Promise<T>;
479
756
  /** Exact sponsored-post and collaborating-creator counts for a brand's recent window, plus a bounded play-count sum. Use this for accurate ad-volume figures since solari_insight_instagram_brand_overview ID lists are capped; for the underlying row-level posts use solari_insight_instagram_brand_ad_posts. Takes the brand's Instagram handle (no @). Works with any signed-in SOLARI account. */
480
757
  stats<T = unknown>(args: InsightInstagramBrandAdStatsArgs): Promise<T>;
481
758
  };
482
759
  collaborator: {
483
- /** For one brand and up to 100 creator account_ids, returns each creator's sponsored posts targeting that brand — per creator: post_count, reels_count, images_count, follower_count, and the posts themselves (slug, caption, posted_at, like/comment counts) — sorted by total engagement. All-time history, one call instead of one per creator. Get creator account_ids from solari_insight_instagram_brand_top_collaborators or solari_insight_instagram_brand_overview. Identify the brand by account_id (SOLARI account UUID) or by username (Instagram handle); an unknown reference returns a not-found error. Works with any signed-in SOLARI account. */
760
+ /** For one brand and up to 100 creator account_ids, returns each creator's sponsored posts targeting that brand — per creator: post_count, reels_count, images_count, follower_count, and the posts themselves (slug, caption, posted_at, like/comment counts) — sorted by total engagement. All-time history, one call instead of one per creator. Get creator account_ids from solari_insight_instagram_brand_top_collaborators or solari_insight_instagram_brand_overview. Identify the brand by account_id (SOLARI account UUID) or by username (Instagram handle); an unknown reference returns a not-found error. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
484
761
  posts<T = unknown>(args: InsightInstagramBrandCollaboratorPostsArgs): Promise<T>;
485
762
  };
486
763
  lookalike: {
487
- /** Instagram posts visually and semantically similar to the brand's top-performing sponsored ads, found via vector-neighbour search seeded from the brand's own ad posts. Identify the brand by account_id (SOLARI account UUID from solari_catalog_instagram_account_search) or by username (Instagram handle); an unknown reference returns a not-found error. Works with any signed-in SOLARI account. */
764
+ /** Instagram posts visually and semantically similar to the brand's top-performing sponsored ads, found via vector-neighbour search seeded from the brand's own ad posts. Identify the brand by account_id (SOLARI account UUID from solari_catalog_instagram_account_search) or by username (Instagram handle); an unknown reference returns a not-found error. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
488
765
  content<T = unknown>(args?: InsightInstagramBrandLookalikeContentArgs): Promise<T>;
489
766
  };
490
767
  /** Returns a brand's profile plus its ad-collaboration footprint: creator IDs who produced ad posts targeting the brand and the ad post IDs themselves (previewed to the first 20 with total counts; set full=true to receive the complete lists, up to 100 each). Feed the post IDs into solari_catalog_instagram_content_batch to hydrate them. Takes the brand's Instagram handle (no @), not a UUID. Works with any signed-in SOLARI account. Returns 404 if the handle is not tracked. */
@@ -497,15 +774,35 @@ export interface SolariTools {
497
774
  content: {
498
775
  /** Counts and engagement rollups over tracked posts, for questions answered by numbers rather than by individual posts: posts per account per month, which hashtags dominate a topic, average likes by format. Group by account, post_type, hashtag, mention, caption_keyword, or transcription_keyword, and optionally split each group by day, week, or month. post_count always comes back; request metrics for like/comment/view sums and averages, mean follower count, and distinct account counts. Narrow the set with a free-text query, usernames, hashtags, mentions, or post_types. Filtering by mentions and grouping by account answers which accounts tagged a given handle. Coverage: regions KR, JP, US, and TW, holding roughly the most recent 6 months — a since older than that is clamped and the applied value is echoed back. Buckets are largest-first; truncated=true means more groups existed than limit returned. Use solari_catalog_instagram_content_search when the posts themselves are needed instead of counts. Works with any signed-in SOLARI account. */
499
776
  aggregate<T = unknown>(args?: InsightInstagramContentAggregateArgs): Promise<T>;
500
- /** Instagram posts whose recent performance is accelerating faster than baseline in the region. Same shape as solari_insight_instagram_content_trending including cursor pagination and optional brand personalization via a brand account_id or username. Works with any signed-in SOLARI account. */
777
+ /** Instagram posts whose recent performance is accelerating faster than baseline in the region. Same shape as solari_insight_instagram_content_trending including cursor pagination and optional brand personalization via a brand account_id or username. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. */
501
778
  rising<T = unknown>(args?: InsightInstagramContentRisingArgs): Promise<T>;
779
+ /** Instagram posts that look and read like one given post — same subject, format and mood — ranked best first, for collecting references around a post you already have. Each item carries post_id, slug, author account_id, thumbnail and media URL, media type, play count, posted_at and is_ad (whether it was identified as sponsored). Identify the post by post_id (SOLARI post UUID from any content tool). Covers roughly the last 4 months; pages reach at most 180 results. Use solari_insight_instagram_brand_lookalike_content to start from a brand's ads instead. Works with any signed-in SOLARI account. */
780
+ similar<T = unknown>(args: InsightInstagramContentSimilarArgs): Promise<T>;
502
781
  trend: {
503
782
  /** The SOLARI trend digest: recent content trend clusters for a region with cluster metadata and member posts, optionally reranked by brand affinity when a brand account_id or username is supplied. Works with any signed-in SOLARI account. */
504
783
  clusters<T = unknown>(args?: InsightInstagramContentTrendClustersArgs): Promise<T>;
505
784
  };
506
- /** Instagram posts currently trending in the region, enriched with creator profile fields. Supports cursor pagination via next_cursor from the previous response. Optionally personalizes ranking with a brand account_id or username. Works with any signed-in SOLARI account. Use solari_insight_instagram_content_rising for velocity-led accelerating posts instead. */
785
+ /** Instagram posts currently trending in the region, enriched with creator profile fields. Supports cursor pagination via next_cursor from the previous response. Optionally personalizes ranking with a brand account_id or username. Each post carries assets: its media files in order, each with a direct-download asset_url for the full-size image or video; when a response is too large, assets is replaced by an assets_omitted count — request fewer posts to keep it. Works with any signed-in SOLARI account. Use solari_insight_instagram_content_rising for velocity-led accelerating posts instead. */
507
786
  trending<T = unknown>(args?: InsightInstagramContentTrendingArgs): Promise<T>;
508
787
  };
788
+ hashtag: {
789
+ /** One hashtag in depth for a market and window: post count, unique creators, views, sponsored percent, share of all posts, growth against the previous window, momentum, the share series over time, the tags used together with it, and the creators who used it most (account_id, username, posts, views, followers). Use the same brand as the leaderboard to keep the same lens. Works with any signed-in SOLARI account. */
790
+ detail<T = unknown>(args: InsightInstagramHashtagDetailArgs): Promise<T>;
791
+ /** Posts carrying one hashtag inside a trend window, most viewed first or newest first — the examples behind a leaderboard entry. Each item carries post_id, slug, author account_id and username, posted_at, play count and like count. Unlike solari_catalog_instagram_tag_search, it is limited to the window and can follow a brand lens. Works with any signed-in SOLARI account. */
792
+ posts<T = unknown>(args: InsightInstagramHashtagPostsArgs): Promise<T>;
793
+ /** Hashtag leaderboard for a market and window, in two lists: rising (share growing fastest against the previous window) and top (volume weighted by how much more it is used than usual). Each entry carries post count, unique creators, views, sponsored percent, growth multiple against the previous window, a NEW flag, a daily share series and momentum. Pass a brand to see the tags moving around that brand's creators instead of the whole market; lens and lens_reason say which view you got. Use solari_insight_instagram_hashtag_detail and solari_insight_instagram_hashtag_posts to drill into one tag. Works with any signed-in SOLARI account. */
794
+ trending<T = unknown>(args?: InsightInstagramHashtagTrendingArgs): Promise<T>;
795
+ };
796
+ ranking: {
797
+ /** Brand leaderboard for a market: brands ranked by how the content that tags or mentions them performs — total views by default, or views per post, post count, creator count, likes, sponsored views or organic views. Each row carries the sponsored subset and the organic median views per post, so the sponsored share reads per brand. Narrow to a category with scope; pass a brand to get its own rank as me, or find_username to locate any brand. Data is a daily snapshot (snapshot_at). Works with any signed-in SOLARI account. */
798
+ brands<T = unknown>(args?: InsightInstagramRankingBrandsArgs): Promise<T>;
799
+ /** Creator leaderboard for a market: creators who make brand-tagged content, ranked within a category so a specialist is not beaten by a large account with one post in it. Sort by total views, views per post, likes, number of brands worked with, sponsored views, reach (views per follower), lift (views per post against the creator's own usual median) or one-month view growth; the last three are null when a creator's baseline is too small. Each row carries the sponsored subset and the organic median. kind=magazine ranks magazine and media accounts instead. Brand-owned, agency and shop accounts are excluded. Data is a daily snapshot (snapshot_at). Works with any signed-in SOLARI account. */
800
+ creators<T = unknown>(args?: InsightInstagramRankingCreatorsArgs): Promise<T>;
801
+ /** Where one Instagram account stands, without knowing whether it is a brand or a creator: for each board it appears on (brand, creator), its rank, pool size and top percentile in every category it belongs to, plus its overall row. Ranked by total views with the loosest filters. A side is null when the account is not on that board. Works with any signed-in SOLARI account. */
802
+ find<T = unknown>(args: InsightInstagramRankingFindArgs): Promise<T>;
803
+ /** The best-performing posts behind one leaderboard row — the evidence for a brand's or creator's number — each marked sponsored or not. Pass the row's account_id with the same board, region, days (and scope for creators) the list used; kind=sponsored keeps the sponsored subset only. Works with any signed-in SOLARI account. */
804
+ posts<T = unknown>(args: InsightInstagramRankingPostsArgs): Promise<T>;
805
+ };
509
806
  };
510
807
  tiktok: {
511
808
  content: {
@@ -514,4 +811,8 @@ export interface SolariTools {
514
811
  };
515
812
  };
516
813
  };
814
+ usage: {
815
+ /** Reports the signed-in SOLARI account's plan, credit balance, and recent tool usage. Call it once before a long run to see whether there is enough credit, and call it again when a tool comes back with CREDIT_EXHAUSTED or ACCOUNT_BLOCKED so you can tell the user the exact balance and where to start a trial, upgrade, or renew the plan. Returns plan (trial, plus, pro, enterprise, or none) with plan_label, status (active, exhausted, blocked, or no_plan), credit_remaining, credit_granted_this_cycle, credit_expires_at, cycle_renews_at, trial (whether a trial is running and when it ends), trial_requires_verified_email, trial_requires_payment_method (true when a verified account can start its free trial after securely saving a card with no immediate charge or automatic paid subscription), usage_last_30_days broken down by channel (cli, mcp, api), and billing_url. Takes no arguments and reads the balance for whoever is signed in. This call is free: it costs no credit and keeps working at a zero balance, so it is always the right way to find out why a tool was blocked. It changes nothing. */
816
+ get<T = unknown>(args?: UsageGetArgs): Promise<T>;
817
+ };
517
818
  }
@@ -13,12 +13,20 @@ export const SOLARI_TOOL_NAMES = [
13
13
  "solari_catalog_tiktok_content_batch",
14
14
  "solari_catalog_tiktok_content_detail",
15
15
  "solari_catalog_tiktok_content_search",
16
+ "solari_feedback_send",
16
17
  "solari_fetch_instagram_account",
18
+ "solari_fetch_instagram_account_search",
19
+ "solari_fetch_instagram_hashtag_posts",
20
+ "solari_fetch_instagram_hashtag_search",
21
+ "solari_fetch_instagram_post",
17
22
  "solari_fetch_instagram_posts",
18
23
  "solari_fetch_tiktok_account",
24
+ "solari_fetch_tiktok_post",
19
25
  "solari_fetch_tiktok_posts",
20
26
  "solari_insight_instagram_account_ad_posts",
21
27
  "solari_insight_instagram_account_collabs",
28
+ "solari_insight_instagram_account_discover",
29
+ "solari_insight_instagram_account_discover_results",
22
30
  "solari_insight_instagram_account_similar",
23
31
  "solari_insight_instagram_brand_ad_posts",
24
32
  "solari_insight_instagram_brand_ad_stats",
@@ -28,7 +36,16 @@ export const SOLARI_TOOL_NAMES = [
28
36
  "solari_insight_instagram_brand_top_collaborators",
29
37
  "solari_insight_instagram_content_aggregate",
30
38
  "solari_insight_instagram_content_rising",
39
+ "solari_insight_instagram_content_similar",
31
40
  "solari_insight_instagram_content_trend_clusters",
32
41
  "solari_insight_instagram_content_trending",
42
+ "solari_insight_instagram_hashtag_detail",
43
+ "solari_insight_instagram_hashtag_posts",
44
+ "solari_insight_instagram_hashtag_trending",
45
+ "solari_insight_instagram_ranking_brands",
46
+ "solari_insight_instagram_ranking_creators",
47
+ "solari_insight_instagram_ranking_find",
48
+ "solari_insight_instagram_ranking_posts",
33
49
  "solari_insight_tiktok_content_aggregate",
50
+ "solari_usage_get",
34
51
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brandazine/solari-sdk",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "TypeScript client for the SOLARI API — creator and brand intelligence across Instagram and TikTok.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://solari.sh/api",