@brandazine/solari-sdk 0.1.0 → 0.2.0
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/README.md +22 -3
- package/dist/index.d.ts +7 -3
- package/dist/index.js +7 -3
- package/dist/tools.generated.d.ts +517 -0
- package/dist/tools.generated.js +34 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,20 +14,36 @@ import { Solari } from "@brandazine/solari-sdk";
|
|
|
14
14
|
const solari = new Solari({ token: process.env.SOLARI_TOKEN });
|
|
15
15
|
|
|
16
16
|
const hits = await solari.tools.catalog.instagram.account.search({ query: "nike", limit: 3 });
|
|
17
|
-
const brand = await solari.
|
|
17
|
+
const brand = await solari.tools.insight.instagram.brand.overview({ username: "nike" });
|
|
18
18
|
const tools = await solari.listTools();
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
Get a token with `solari auth token` on a machine that is signed in to the [solari CLI](https://solari.sh/docs), or pass a token you already hold from an MCP connector. With no `token` option the client reads `SOLARI_TOKEN`.
|
|
22
22
|
|
|
23
|
+
## Typed tools
|
|
24
|
+
|
|
25
|
+
`solari.tools` is generated from the SOLARI tool registry, so every tool path, argument name, argument type, and enum value is checked by the TypeScript compiler and completed by your editor. A missing required argument, a misspelled key, or an out-of-range enum fails at compile time.
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
await solari.tools.catalog.instagram.account.search({ query: "nike", query_type: "bio" });
|
|
29
|
+
await solari.tools.catalog.instagram.account.search({ limit: 3 }); // error: query is required
|
|
30
|
+
await solari.tools.catalog.instagram.account.search({ query: "nike", query_type: "fuzzy" }); // error: not an enum value
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Tool responses are JSON whose shape is documented per tool at [solari.sh/docs](https://solari.sh/docs); pass a type parameter to name it: `search<AccountHits>({ ... })`.
|
|
34
|
+
|
|
35
|
+
`solari.call(name, args)` checks the arguments the same way when `name` is one of the generated `SolariToolName` values. Any other name — for example the per-account `solari_apps_*` tools — is accepted with free-form arguments, and `solari.dynamic.<any>.<path>(args)` spells such a call as a path without type checking.
|
|
36
|
+
|
|
23
37
|
## API
|
|
24
38
|
|
|
25
39
|
- `new Solari({ token?, baseUrl?, fetch?, timeoutMs?, userAgent? })` — `baseUrl` defaults to `https://solari.sh`; `fetch` lets you inject a custom implementation.
|
|
40
|
+
- `solari.tools.<family>.<platform>.<group>.<name>(args)` — typed tool calls; segments mirror the `solari_` tool names.
|
|
41
|
+
- `solari.call<T>(name, args)` — run a tool by name and get its JSON payload back.
|
|
26
42
|
- `solari.listTools()` — every tool the signed-in account can call, with its JSON input schema.
|
|
27
43
|
- `solari.getTool(name)` — one tool.
|
|
28
|
-
- `solari.call(name, args)` — run a tool and get its JSON payload back. Typed as `call<T>()`.
|
|
29
|
-
- `solari.tools.<family>.<platform>.<group>.<name>(args)` — the same call spelled as a path; segments join with `_` under the `solari_` prefix. The path is dynamic, so it is not type-checked against the live tool list.
|
|
30
44
|
- `solari.me()` — the identity behind the token.
|
|
45
|
+
- `solari.dynamic` — untyped path proxy for tools that are not in the generated catalog.
|
|
46
|
+
- `SOLARI_TOOL_NAMES`, `SolariToolName`, `SolariToolMap`, `SolariTools`, `<Tool>Args` — the generated types.
|
|
31
47
|
|
|
32
48
|
Errors throw `SolariError` with `status`, `code`, `message`, `tool`, `retryAfterSeconds`, and a `retryable` flag (429, 502, 503, 504). Codes come straight from the API: `invalid_arguments`, `tool_not_found`, `rate_limited`, `forbidden`, `upstream_timeout`, `app_warming_up`, ...
|
|
33
49
|
|
|
@@ -35,6 +51,9 @@ Errors throw `SolariError` with `status`, `code`, `message`, `tool`, `retryAfter
|
|
|
35
51
|
|
|
36
52
|
```
|
|
37
53
|
bun install
|
|
54
|
+
bun run typecheck
|
|
38
55
|
bun test
|
|
39
56
|
bun run build
|
|
40
57
|
```
|
|
58
|
+
|
|
59
|
+
`src/tools.generated.ts` is produced from the MCP worker's tool registry by `pnpm run sdk:generate` in `cf-workers/solari-mcp`; CI fails when it is stale.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { SolariToolMap, SolariToolName, SolariTools, SolariToolsWithoutRequiredArgs } from "./tools.generated";
|
|
2
|
+
export * from "./tools.generated";
|
|
1
3
|
export declare const DEFAULT_BASE_URL = "https://solari.sh";
|
|
2
4
|
export declare const API_PREFIX = "/mcp/api/v1";
|
|
3
|
-
export declare const SDK_VERSION = "0.
|
|
5
|
+
export declare const SDK_VERSION = "0.2.0";
|
|
4
6
|
export declare const TOKEN_ENV = "SOLARI_TOKEN";
|
|
5
7
|
export interface SolariTool {
|
|
6
8
|
name: string;
|
|
@@ -30,6 +32,7 @@ export interface ToolPath {
|
|
|
30
32
|
(args?: ToolArguments): Promise<unknown>;
|
|
31
33
|
[segment: string]: ToolPath;
|
|
32
34
|
}
|
|
35
|
+
export type ToolCallArguments<N extends string> = N extends SolariToolName ? N extends keyof SolariToolsWithoutRequiredArgs ? [args?: SolariToolMap[N]] : [args: SolariToolMap[N]] : [args?: ToolArguments];
|
|
33
36
|
export declare class SolariError extends Error {
|
|
34
37
|
readonly status: number;
|
|
35
38
|
readonly code: string;
|
|
@@ -48,7 +51,8 @@ export declare function normalizeBaseUrl(raw: string): string;
|
|
|
48
51
|
export declare function toolName(segments: readonly string[]): string;
|
|
49
52
|
export declare class Solari {
|
|
50
53
|
readonly baseUrl: string;
|
|
51
|
-
readonly tools:
|
|
54
|
+
readonly tools: SolariTools;
|
|
55
|
+
readonly dynamic: ToolPath;
|
|
52
56
|
private readonly token;
|
|
53
57
|
private readonly fetchImpl;
|
|
54
58
|
private readonly timeoutMs;
|
|
@@ -56,7 +60,7 @@ export declare class Solari {
|
|
|
56
60
|
constructor(options?: SolariOptions);
|
|
57
61
|
listTools(): Promise<SolariTool[]>;
|
|
58
62
|
getTool(name: string): Promise<SolariTool>;
|
|
59
|
-
call<T = unknown>(name:
|
|
63
|
+
call<T = unknown, N extends string = string>(name: N, ...rest: ToolCallArguments<N>): Promise<T>;
|
|
60
64
|
me(): Promise<SolariIdentity>;
|
|
61
65
|
private toolPath;
|
|
62
66
|
private request;
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
export * from "./tools.generated";
|
|
1
2
|
export const DEFAULT_BASE_URL = "https://solari.sh";
|
|
2
3
|
export const API_PREFIX = "/mcp/api/v1";
|
|
3
|
-
export const SDK_VERSION = "0.
|
|
4
|
+
export const SDK_VERSION = "0.2.0";
|
|
4
5
|
export const TOKEN_ENV = "SOLARI_TOKEN";
|
|
5
6
|
const DEFAULT_TIMEOUT_MS = 150_000;
|
|
6
7
|
export class SolariError extends Error {
|
|
@@ -78,6 +79,7 @@ async function parseErrorBody(response) {
|
|
|
78
79
|
export class Solari {
|
|
79
80
|
baseUrl;
|
|
80
81
|
tools;
|
|
82
|
+
dynamic;
|
|
81
83
|
token;
|
|
82
84
|
fetchImpl;
|
|
83
85
|
timeoutMs;
|
|
@@ -96,7 +98,8 @@ export class Solari {
|
|
|
96
98
|
this.fetchImpl = options.fetch ?? globalThis.fetch;
|
|
97
99
|
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
98
100
|
this.userAgent = options.userAgent ?? `solari-sdk-ts/${SDK_VERSION}`;
|
|
99
|
-
this.
|
|
101
|
+
this.dynamic = this.toolPath([]);
|
|
102
|
+
this.tools = this.dynamic;
|
|
100
103
|
}
|
|
101
104
|
async listTools() {
|
|
102
105
|
const body = (await this.request("GET", `${API_PREFIX}/tools`));
|
|
@@ -105,7 +108,8 @@ export class Solari {
|
|
|
105
108
|
async getTool(name) {
|
|
106
109
|
return (await this.request("GET", `${API_PREFIX}/tools/${encodeURIComponent(name)}`));
|
|
107
110
|
}
|
|
108
|
-
async call(name,
|
|
111
|
+
async call(name, ...rest) {
|
|
112
|
+
const args = rest[0] ?? {};
|
|
109
113
|
return (await this.request("POST", `${API_PREFIX}/tools/${encodeURIComponent(name)}`, args));
|
|
110
114
|
}
|
|
111
115
|
async me() {
|
|
@@ -0,0 +1,517 @@
|
|
|
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. */
|
|
2
|
+
export interface CatalogInstagramAccountPostsArgs {
|
|
3
|
+
/** account_id of the account (SOLARI account UUID). Provide this or username. */
|
|
4
|
+
"account_id"?: string | undefined;
|
|
5
|
+
/** Instagram handle, with or without a leading @. Ignored when account_id is set. */
|
|
6
|
+
"username"?: string | undefined;
|
|
7
|
+
/** Posts per page, default 12. Values above 200 are clamped to 200. */
|
|
8
|
+
"limit"?: number | undefined;
|
|
9
|
+
/** Pagination offset, default 0. */
|
|
10
|
+
"offset"?: number | undefined;
|
|
11
|
+
/** Only posts on or after this UTC date, YYYY-MM-DD inclusive. */
|
|
12
|
+
"since"?: string | undefined;
|
|
13
|
+
/** Only posts on or before this UTC date, YYYY-MM-DD inclusive. */
|
|
14
|
+
"until"?: string | undefined;
|
|
15
|
+
/** Only posts of this format. reel is short-form single-video; video is non-reel video. */
|
|
16
|
+
"post_type"?: "reel" | "video" | "photo" | "carousel" | undefined;
|
|
17
|
+
}
|
|
18
|
+
/** 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. */
|
|
19
|
+
export interface CatalogInstagramAccountProfileArgs {
|
|
20
|
+
/** account_id of the account (SOLARI account UUID). Provide this or username. */
|
|
21
|
+
"account_id"?: string | undefined;
|
|
22
|
+
/** Instagram handle, with or without a leading @. Ignored when account_id is set. */
|
|
23
|
+
"username"?: string | undefined;
|
|
24
|
+
}
|
|
25
|
+
/** Resolves a brand/creator name or Instagram handle to candidate tracked accounts via fast deterministic index search — like a typeahead, all candidates are returned — and also searches profile bio text. query_type picks what the query is matched against: auto (default) matches handles by prefix and profile display names (Korean or English) by text match; username or full_name narrows to just one of those; bio runs a full-text search over profile bio text, which is how you discover accounts by what they say about themselves ("skincare", "협찬 문의", "コスメ") rather than by name. Ranked by match quality and follower count. Returns found plus items ordered best-first (items[0] is the top match), each with account_id (the SOLARI account UUID every other tool takes), username, full_name, biography, follower_count, region, is_verified, and profile_pic_url; found=false with empty items means nothing matched. In the name modes the query must actually appear in the handle or display name — phonetic aliases and abbreviations do not resolve, so retry with the native spelling (for example the English brand name). Set brands_only=true when resolving a brand name to filter out fan and meme accounts; pair it with query_type=bio to sweep a category of brands. Leave region unset unless the user asked for one country — it drops every account outside that region. Works with any signed-in SOLARI account. Use this first to resolve any entity mentioned by name. */
|
|
26
|
+
export interface CatalogInstagramAccountSearchArgs {
|
|
27
|
+
/** Brand or creator name (Korean/English) or Instagram handle to resolve, or — with query_type=bio — the words to look for in profile bios. */
|
|
28
|
+
"query": string;
|
|
29
|
+
/** Which text to match. auto = handle and display name together; username = handle only; full_name = display name only; bio = profile bio text. */
|
|
30
|
+
"query_type"?: "auto" | "username" | "full_name" | "bio" | undefined;
|
|
31
|
+
/** Restrict matches to known brand accounts. Recommended when resolving a brand name. */
|
|
32
|
+
"brands_only"?: boolean | undefined;
|
|
33
|
+
/** Maximum candidates to return, default 8. Values above 50 are clamped to 50. */
|
|
34
|
+
"limit"?: number | undefined;
|
|
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
|
+
"region"?: string | undefined;
|
|
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. */
|
|
39
|
+
export interface CatalogInstagramContentBatchArgs {
|
|
40
|
+
/** SOLARI post UUIDs to hydrate, at most 100 per call. Not Instagram shortcodes/slugs. */
|
|
41
|
+
"post_ids": Array<string>;
|
|
42
|
+
/** Item order: posted_at descending (recent) or like+comment engagement descending. */
|
|
43
|
+
"sort"?: "recent" | "engagement" | undefined;
|
|
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. */
|
|
46
|
+
export interface CatalogInstagramContentDetailArgs {
|
|
47
|
+
/** The SOLARI post_id UUID. Provide this, slug, or url. */
|
|
48
|
+
"post_id"?: string | undefined;
|
|
49
|
+
/** Public Instagram shortcode, the segment after /p/, /reel/, or /tv/ in a post URL. Ignored when post_id is set. */
|
|
50
|
+
"slug"?: string | undefined;
|
|
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
|
+
"url"?: string | undefined;
|
|
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. */
|
|
55
|
+
export interface CatalogInstagramContentSearchArgs {
|
|
56
|
+
/** Free-text keyword query matched against captions, creator bios, and video transcriptions. */
|
|
57
|
+
"query": string;
|
|
58
|
+
/** Region to search. Only these four regions are indexed. */
|
|
59
|
+
"region"?: "KR" | "JP" | "US" | "TW" | undefined;
|
|
60
|
+
/** Maximum hits, default 20. Values above 100 are clamped to 100. */
|
|
61
|
+
"limit"?: number | undefined;
|
|
62
|
+
/** Pagination offset, default 0. */
|
|
63
|
+
"offset"?: number | undefined;
|
|
64
|
+
/** Only posts on or after this UTC date, YYYY-MM-DD inclusive. Data older than ~6 months is not indexed. */
|
|
65
|
+
"since"?: string | undefined;
|
|
66
|
+
/** Only posts on or before this UTC date, YYYY-MM-DD inclusive. */
|
|
67
|
+
"until"?: string | undefined;
|
|
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. */
|
|
70
|
+
export interface CatalogInstagramTagSearchArgs {
|
|
71
|
+
/** One exact tag. '#ootd' or 'ootd' searches a hashtag; '@oliveyoung_official' searches mentions of that account. No spaces, no wildcards. */
|
|
72
|
+
"query": string;
|
|
73
|
+
/** Posts per page, default 20. Values above 1000 are clamped to 1000. Larger pages cost no more than smaller ones. */
|
|
74
|
+
"limit"?: number | undefined;
|
|
75
|
+
/** next_cursor from the previous response. Omit for the first page. */
|
|
76
|
+
"cursor"?: string | undefined;
|
|
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. */
|
|
79
|
+
export interface CatalogTiktokAccountPostsArgs {
|
|
80
|
+
/** account_id of the TikTok account (SOLARI account UUID). Provide this or username. */
|
|
81
|
+
"account_id"?: string | undefined;
|
|
82
|
+
/** TikTok handle, with or without a leading @. Ignored when account_id is set. */
|
|
83
|
+
"username"?: string | undefined;
|
|
84
|
+
/** Posts per page, default 12. Values above 200 are clamped to 200. */
|
|
85
|
+
"limit"?: number | undefined;
|
|
86
|
+
/** Pagination offset, default 0. */
|
|
87
|
+
"offset"?: number | undefined;
|
|
88
|
+
/** Only posts on or after this UTC date, YYYY-MM-DD inclusive. */
|
|
89
|
+
"since"?: string | undefined;
|
|
90
|
+
/** Only posts on or before this UTC date, YYYY-MM-DD inclusive. */
|
|
91
|
+
"until"?: string | undefined;
|
|
92
|
+
/** Only posts of this format. video is a single clip; carousel is an image slideshow. */
|
|
93
|
+
"post_type"?: "video" | "carousel" | undefined;
|
|
94
|
+
/** Attach the spoken-word transcript to each item. Off by default because transcripts are long. */
|
|
95
|
+
"include_transcript"?: boolean | undefined;
|
|
96
|
+
}
|
|
97
|
+
/** 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. */
|
|
98
|
+
export interface CatalogTiktokAccountProfileArgs {
|
|
99
|
+
/** account_id of the TikTok account (SOLARI account UUID). Provide this or username. */
|
|
100
|
+
"account_id"?: string | undefined;
|
|
101
|
+
/** TikTok handle, with or without a leading @. Ignored when account_id is set. */
|
|
102
|
+
"username"?: string | undefined;
|
|
103
|
+
}
|
|
104
|
+
/** Resolves a brand/creator name or TikTok handle to candidate tracked TikTok accounts via fast deterministic index search, typeahead-style: matches handles by prefix and display nicknames by text match, ranked by match quality and follower count. Returns found plus items ordered best-first (items[0] is the top match), each with account_id (the SOLARI account UUID the other solari_catalog_tiktok_* tools take; a TikTok account_id is a different value from any Instagram account_id and the two are never interchangeable), username (the TikTok handle), nickname, follower_count, video_count, region, is_verified, is_private, is_commerce_user, commerce_user_category, and profile_url; found=false with empty items means nothing matched. The query must actually appear in the handle or nickname, so retry with the native spelling when a phonetic alias does not resolve. Leave region unset unless the user asked for one country: many tracked TikTok accounts carry no region, and a region filter drops them. A handle that is not tracked yet does not appear here; pass an exact handle to solari_fetch_tiktok_account, then read it with the catalog profile tool. Works with any signed-in SOLARI account. */
|
|
105
|
+
export interface CatalogTiktokAccountSearchArgs {
|
|
106
|
+
/** Brand or creator name or TikTok handle to resolve. */
|
|
107
|
+
"query": string;
|
|
108
|
+
/** Maximum candidates to return, default 8. Values above 50 are clamped to 50. */
|
|
109
|
+
"limit"?: number | undefined;
|
|
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
|
+
"region"?: string | undefined;
|
|
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. */
|
|
114
|
+
export interface CatalogTiktokContentBatchArgs {
|
|
115
|
+
/** SOLARI post UUIDs to hydrate, at most 100 per call. Not TikTok video ids. */
|
|
116
|
+
"post_ids": Array<string>;
|
|
117
|
+
/** Item order: posted_at descending (recent) or engagement descending. */
|
|
118
|
+
"sort"?: "recent" | "engagement" | undefined;
|
|
119
|
+
/** Attach the spoken-word transcript to each item. Off by default because transcripts are long. */
|
|
120
|
+
"include_transcript"?: boolean | undefined;
|
|
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. */
|
|
123
|
+
export interface CatalogTiktokContentDetailArgs {
|
|
124
|
+
/** The SOLARI post_id UUID. Provide this, video_id, or url. */
|
|
125
|
+
"post_id"?: string | undefined;
|
|
126
|
+
/** Public numeric TikTok video id, the digits after /video/ or /photo/ in a post URL. Ignored when post_id is set. */
|
|
127
|
+
"video_id"?: string | undefined;
|
|
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
|
+
"url"?: string | undefined;
|
|
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. */
|
|
132
|
+
export interface CatalogTiktokContentSearchArgs {
|
|
133
|
+
/** Free-text keyword query matched against captions and video transcripts. */
|
|
134
|
+
"query": string;
|
|
135
|
+
/** Region to search. Only these four regions are indexed. */
|
|
136
|
+
"region"?: "KR" | "JP" | "US" | "TW" | undefined;
|
|
137
|
+
/** Maximum hits, default 20. Values above 100 are clamped to 100. */
|
|
138
|
+
"limit"?: number | undefined;
|
|
139
|
+
/** Pagination offset, default 0. Values above 9800 are clamped to 9800. */
|
|
140
|
+
"offset"?: number | undefined;
|
|
141
|
+
/** Only posts on or after this UTC date, YYYY-MM-DD inclusive. Data older than ~6 months is not indexed. */
|
|
142
|
+
"since"?: string | undefined;
|
|
143
|
+
/** Only posts on or before this UTC date, YYYY-MM-DD inclusive. */
|
|
144
|
+
"until"?: string | undefined;
|
|
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. */
|
|
147
|
+
export interface FetchInstagramAccountArgs {
|
|
148
|
+
/** Instagram handle, with or without a leading @. */
|
|
149
|
+
"username": string;
|
|
150
|
+
}
|
|
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. */
|
|
152
|
+
export interface FetchInstagramPostsArgs {
|
|
153
|
+
/** Instagram handle, with or without a leading @. */
|
|
154
|
+
"username": string;
|
|
155
|
+
}
|
|
156
|
+
/** 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. */
|
|
157
|
+
export interface FetchTiktokAccountArgs {
|
|
158
|
+
/** TikTok handle, with or without a leading @. */
|
|
159
|
+
"username": string;
|
|
160
|
+
}
|
|
161
|
+
/** 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
|
+
export interface FetchTiktokPostsArgs {
|
|
163
|
+
/** TikTok handle, with or without a leading @. */
|
|
164
|
+
"username": string;
|
|
165
|
+
}
|
|
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. */
|
|
167
|
+
export interface InsightInstagramAccountAdPostsArgs {
|
|
168
|
+
/** account_id of the creator (SOLARI account UUID). Provide this or username. */
|
|
169
|
+
"account_id"?: string | undefined;
|
|
170
|
+
/** Instagram handle, with or without a leading @. Ignored when account_id is set. */
|
|
171
|
+
"username"?: string | undefined;
|
|
172
|
+
/** Lookback window in months, default 3. Values above 24 are clamped to 24. */
|
|
173
|
+
"months"?: number | undefined;
|
|
174
|
+
/** Items per page, default 50. Values above 200 are clamped to 200. */
|
|
175
|
+
"limit"?: number | undefined;
|
|
176
|
+
/** Pagination offset, default 0. */
|
|
177
|
+
"offset"?: number | undefined;
|
|
178
|
+
/** Optional target-brand filter: its account_id (SOLARI account UUID) or Instagram handle. */
|
|
179
|
+
"target"?: string | undefined;
|
|
180
|
+
}
|
|
181
|
+
/** 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. */
|
|
182
|
+
export interface InsightInstagramAccountCollabsArgs {
|
|
183
|
+
/** account_id of the creator (SOLARI account UUID). Provide this or username. */
|
|
184
|
+
"account_id"?: string | undefined;
|
|
185
|
+
/** Instagram handle, with or without a leading @. Ignored when account_id is set. */
|
|
186
|
+
"username"?: string | undefined;
|
|
187
|
+
/** Lookback window in months, default 3. Values above 12 are clamped to 12. */
|
|
188
|
+
"months"?: number | undefined;
|
|
189
|
+
/** Maximum items per page, default 5. Values above 200 are clamped to 200. */
|
|
190
|
+
"limit"?: number | undefined;
|
|
191
|
+
/** Pagination offset, default 0. */
|
|
192
|
+
"offset"?: number | undefined;
|
|
193
|
+
}
|
|
194
|
+
/** 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
|
+
export interface InsightInstagramAccountSimilarArgs {
|
|
196
|
+
/** Instagram handle to find similar accounts for, without the leading @. */
|
|
197
|
+
"username": string;
|
|
198
|
+
/** Number of similar accounts to return, default 50. Values above 100 are clamped to 100. */
|
|
199
|
+
"limit"?: number | undefined;
|
|
200
|
+
}
|
|
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. */
|
|
202
|
+
export interface InsightInstagramBrandAdPostsArgs {
|
|
203
|
+
/** Brand Instagram handle without the leading @. */
|
|
204
|
+
"username": string;
|
|
205
|
+
/** recent pages the full window with an exact total; engagement ranks within ranking_window. */
|
|
206
|
+
"sort"?: "recent" | "engagement" | undefined;
|
|
207
|
+
/** Lookback window in months, default 3. Values above 24 are clamped to 24. */
|
|
208
|
+
"months"?: number | undefined;
|
|
209
|
+
/** Posts per page, default 50. Values above 200 are clamped to 200. */
|
|
210
|
+
"limit"?: number | undefined;
|
|
211
|
+
/** Pagination offset, default 0. */
|
|
212
|
+
"offset"?: number | undefined;
|
|
213
|
+
}
|
|
214
|
+
/** 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. */
|
|
215
|
+
export interface InsightInstagramBrandAdStatsArgs {
|
|
216
|
+
/** Brand Instagram handle without the leading @. */
|
|
217
|
+
"username": string;
|
|
218
|
+
}
|
|
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. */
|
|
220
|
+
export interface InsightInstagramBrandCollaboratorPostsArgs {
|
|
221
|
+
/** Brand account_id (SOLARI account UUID). Provide this or username. */
|
|
222
|
+
"account_id"?: string | undefined;
|
|
223
|
+
/** Brand Instagram handle, with or without a leading @. Ignored when account_id is set. */
|
|
224
|
+
"username"?: string | undefined;
|
|
225
|
+
/** Creator account_ids (SOLARI account UUIDs) to hydrate, at most 100 per call. */
|
|
226
|
+
"account_ids": Array<string>;
|
|
227
|
+
}
|
|
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. */
|
|
229
|
+
export interface InsightInstagramBrandLookalikeContentArgs {
|
|
230
|
+
/** Brand account_id (SOLARI account UUID) whose sponsored ads seed the lookalike search. Provide this or username. */
|
|
231
|
+
"account_id"?: string | undefined;
|
|
232
|
+
/** Brand Instagram handle, with or without a leading @. Ignored when account_id is set. */
|
|
233
|
+
"username"?: string | undefined;
|
|
234
|
+
/** Maximum lookalike posts returned, default 30. Values above 50 are clamped to 50. */
|
|
235
|
+
"limit"?: number | undefined;
|
|
236
|
+
/** Region code such as KR, JP, or US scoping the search. */
|
|
237
|
+
"region"?: string | undefined;
|
|
238
|
+
}
|
|
239
|
+
/** 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. */
|
|
240
|
+
export interface InsightInstagramBrandOverviewArgs {
|
|
241
|
+
/** Brand Instagram handle without the leading @. */
|
|
242
|
+
"username": string;
|
|
243
|
+
/** Return the complete ID lists instead of the first-20 preview. */
|
|
244
|
+
"full"?: boolean | undefined;
|
|
245
|
+
}
|
|
246
|
+
/** Ranked list of creators who authored resolved ad posts targeting the brand, ordered by collaboration count. 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. Retrospective collaboration history, not a forward-looking fit score. Works with any signed-in SOLARI account. */
|
|
247
|
+
export interface InsightInstagramBrandTopCollaboratorsArgs {
|
|
248
|
+
/** Brand account_id (SOLARI account UUID) from solari_catalog_instagram_account_search. Provide this or username. */
|
|
249
|
+
"account_id"?: string | undefined;
|
|
250
|
+
/** Brand Instagram handle, with or without a leading @. Ignored when account_id is set. */
|
|
251
|
+
"username"?: string | undefined;
|
|
252
|
+
/** Ad-post promotion filter: all rows, promotion=true rows, or promotion=false rows. */
|
|
253
|
+
"promotion"?: "all" | "true_only" | "false_only" | undefined;
|
|
254
|
+
/** Maximum creators returned, default 20. Values above 1000 are clamped to 1000. */
|
|
255
|
+
"limit"?: number | undefined;
|
|
256
|
+
/** Pagination offset, default 0. */
|
|
257
|
+
"offset"?: number | undefined;
|
|
258
|
+
}
|
|
259
|
+
/** 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. */
|
|
260
|
+
export interface InsightInstagramContentAggregateArgs {
|
|
261
|
+
/** Region to aggregate. Only these four regions are indexed. */
|
|
262
|
+
"region"?: "KR" | "JP" | "US" | "TW" | undefined;
|
|
263
|
+
/** Dimension to group by. Omit to aggregate the whole filtered set into a single total bucket. */
|
|
264
|
+
"group_by"?: "account" | "post_type" | "hashtag" | "mention" | "caption_keyword" | "transcription_keyword" | undefined;
|
|
265
|
+
/** Calendar interval to split by. Alone it returns one bucket per period; combined with group_by each group carries a series. */
|
|
266
|
+
"interval"?: "day" | "week" | "month" | undefined;
|
|
267
|
+
/** Extra metrics beyond post_count, which is always returned. Metric values are snapshots and can lag live counts. */
|
|
268
|
+
"metrics"?: Array<"like_sum" | "like_avg" | "comment_sum" | "comment_avg" | "view_sum" | "view_avg" | "follower_avg" | "account_count"> | undefined;
|
|
269
|
+
/** Free-text filter matched against captions, creator bios, and video transcriptions. */
|
|
270
|
+
"query"?: string | undefined;
|
|
271
|
+
/** Restrict to these Instagram handles. */
|
|
272
|
+
"usernames"?: Array<string> | undefined;
|
|
273
|
+
/** Restrict to posts carrying every one of these hashtags. */
|
|
274
|
+
"hashtags"?: Array<string> | undefined;
|
|
275
|
+
/** Restrict to posts that tag every one of these handles. Pair with group_by=account to rank the accounts tagging a given handle. */
|
|
276
|
+
"mentions"?: Array<string> | undefined;
|
|
277
|
+
/** Restrict to these post formats. */
|
|
278
|
+
"post_types"?: Array<string> | undefined;
|
|
279
|
+
/** Only posts on or after this UTC date, YYYY-MM-DD inclusive. Defaults to 183 days ago, which is also the earliest accepted bound. */
|
|
280
|
+
"since"?: string | undefined;
|
|
281
|
+
/** Only posts on or before this UTC date, YYYY-MM-DD inclusive. */
|
|
282
|
+
"until"?: string | undefined;
|
|
283
|
+
/** Maximum groups returned when group_by is set, default 20. Values above 50 are clamped to 50. */
|
|
284
|
+
"limit"?: number | undefined;
|
|
285
|
+
}
|
|
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. */
|
|
287
|
+
export interface InsightInstagramContentRisingArgs {
|
|
288
|
+
/** Region code such as KR, JP, or US. */
|
|
289
|
+
"region"?: string | undefined;
|
|
290
|
+
/** Maximum posts per page, default 20. Values above 50 are clamped to 50. */
|
|
291
|
+
"limit"?: number | undefined;
|
|
292
|
+
/** Opaque pagination cursor from the previous response's next_cursor. */
|
|
293
|
+
"cursor"?: string | undefined;
|
|
294
|
+
/** Optional brand account_id (SOLARI account UUID) for brand-affinity personalization. */
|
|
295
|
+
"account_id"?: string | undefined;
|
|
296
|
+
/** Optional brand Instagram handle for brand-affinity personalization. Ignored when account_id is set. */
|
|
297
|
+
"username"?: string | undefined;
|
|
298
|
+
}
|
|
299
|
+
/** 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
|
+
export interface InsightInstagramContentTrendClustersArgs {
|
|
301
|
+
/** Region code such as KR, JP, or US. */
|
|
302
|
+
"region"?: string | undefined;
|
|
303
|
+
/** Lookback window in days for trending clusters, between 1 and 90. */
|
|
304
|
+
"since_days"?: number | undefined;
|
|
305
|
+
/** Maximum trend clusters returned, default 20. Values above 24 are clamped to 24. */
|
|
306
|
+
"limit"?: number | undefined;
|
|
307
|
+
/** Optional brand account_id (SOLARI account UUID) for brand-affinity reranking. */
|
|
308
|
+
"account_id"?: string | undefined;
|
|
309
|
+
/** Optional brand Instagram handle for brand-affinity reranking. Ignored when account_id is set. */
|
|
310
|
+
"username"?: string | undefined;
|
|
311
|
+
/** Rerank clusters by brand affinity when account_id is provided. */
|
|
312
|
+
"brand_aware"?: boolean | undefined;
|
|
313
|
+
}
|
|
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. */
|
|
315
|
+
export interface InsightInstagramContentTrendingArgs {
|
|
316
|
+
/** Region code such as KR, JP, or US. */
|
|
317
|
+
"region"?: string | undefined;
|
|
318
|
+
/** Maximum posts per page, default 20. Values above 50 are clamped to 50. */
|
|
319
|
+
"limit"?: number | undefined;
|
|
320
|
+
/** Opaque pagination cursor from the previous response's next_cursor. */
|
|
321
|
+
"cursor"?: string | undefined;
|
|
322
|
+
/** Optional brand account_id (SOLARI account UUID) for brand-affinity personalization. */
|
|
323
|
+
"account_id"?: string | undefined;
|
|
324
|
+
/** Optional brand Instagram handle for brand-affinity personalization. Ignored when account_id is set. */
|
|
325
|
+
"username"?: string | undefined;
|
|
326
|
+
}
|
|
327
|
+
/** 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
|
+
export interface InsightTiktokContentAggregateArgs {
|
|
329
|
+
/** Region to aggregate. Only these four regions are indexed. */
|
|
330
|
+
"region"?: "KR" | "JP" | "US" | "TW" | undefined;
|
|
331
|
+
/** Dimension to group by. Omit to aggregate the whole filtered set into a single total bucket. */
|
|
332
|
+
"group_by"?: "account" | "post_type" | "hashtag" | "mention" | "caption_keyword" | undefined;
|
|
333
|
+
/** Calendar interval to split by. Alone it returns one bucket per period; combined with group_by each group carries a series. */
|
|
334
|
+
"interval"?: "day" | "week" | "month" | undefined;
|
|
335
|
+
/** Extra metrics beyond post_count, which is always returned. view_* metrics count plays. Metric values are snapshots and can lag live counts. */
|
|
336
|
+
"metrics"?: Array<"like_sum" | "like_avg" | "comment_sum" | "comment_avg" | "view_sum" | "view_avg" | "share_sum" | "share_avg" | "collect_sum" | "collect_avg" | "follower_avg" | "account_count"> | undefined;
|
|
337
|
+
/** Free-text filter matched against captions and video transcripts. */
|
|
338
|
+
"query"?: string | undefined;
|
|
339
|
+
/** Restrict to these TikTok handles. */
|
|
340
|
+
"usernames"?: Array<string> | undefined;
|
|
341
|
+
/** Restrict to posts carrying every one of these hashtags. */
|
|
342
|
+
"hashtags"?: Array<string> | undefined;
|
|
343
|
+
/** Restrict to posts that tag every one of these handles. Pair with group_by=account to rank the accounts tagging a given handle. */
|
|
344
|
+
"mentions"?: Array<string> | undefined;
|
|
345
|
+
/** Restrict to these post formats. */
|
|
346
|
+
"post_types"?: Array<"video" | "carousel"> | undefined;
|
|
347
|
+
/** Only posts on or after this UTC date, YYYY-MM-DD inclusive. Defaults to 183 days ago, which is also the earliest accepted bound. */
|
|
348
|
+
"since"?: string | undefined;
|
|
349
|
+
/** Only posts on or before this UTC date, YYYY-MM-DD inclusive. */
|
|
350
|
+
"until"?: string | undefined;
|
|
351
|
+
/** Maximum groups returned when group_by is set, default 20. Values above 50 are clamped to 50. */
|
|
352
|
+
"limit"?: number | undefined;
|
|
353
|
+
}
|
|
354
|
+
export interface SolariToolMap {
|
|
355
|
+
"solari_catalog_instagram_account_posts": CatalogInstagramAccountPostsArgs;
|
|
356
|
+
"solari_catalog_instagram_account_profile": CatalogInstagramAccountProfileArgs;
|
|
357
|
+
"solari_catalog_instagram_account_search": CatalogInstagramAccountSearchArgs;
|
|
358
|
+
"solari_catalog_instagram_content_batch": CatalogInstagramContentBatchArgs;
|
|
359
|
+
"solari_catalog_instagram_content_detail": CatalogInstagramContentDetailArgs;
|
|
360
|
+
"solari_catalog_instagram_content_search": CatalogInstagramContentSearchArgs;
|
|
361
|
+
"solari_catalog_instagram_tag_search": CatalogInstagramTagSearchArgs;
|
|
362
|
+
"solari_catalog_tiktok_account_posts": CatalogTiktokAccountPostsArgs;
|
|
363
|
+
"solari_catalog_tiktok_account_profile": CatalogTiktokAccountProfileArgs;
|
|
364
|
+
"solari_catalog_tiktok_account_search": CatalogTiktokAccountSearchArgs;
|
|
365
|
+
"solari_catalog_tiktok_content_batch": CatalogTiktokContentBatchArgs;
|
|
366
|
+
"solari_catalog_tiktok_content_detail": CatalogTiktokContentDetailArgs;
|
|
367
|
+
"solari_catalog_tiktok_content_search": CatalogTiktokContentSearchArgs;
|
|
368
|
+
"solari_fetch_instagram_account": FetchInstagramAccountArgs;
|
|
369
|
+
"solari_fetch_instagram_posts": FetchInstagramPostsArgs;
|
|
370
|
+
"solari_fetch_tiktok_account": FetchTiktokAccountArgs;
|
|
371
|
+
"solari_fetch_tiktok_posts": FetchTiktokPostsArgs;
|
|
372
|
+
"solari_insight_instagram_account_ad_posts": InsightInstagramAccountAdPostsArgs;
|
|
373
|
+
"solari_insight_instagram_account_collabs": InsightInstagramAccountCollabsArgs;
|
|
374
|
+
"solari_insight_instagram_account_similar": InsightInstagramAccountSimilarArgs;
|
|
375
|
+
"solari_insight_instagram_brand_ad_posts": InsightInstagramBrandAdPostsArgs;
|
|
376
|
+
"solari_insight_instagram_brand_ad_stats": InsightInstagramBrandAdStatsArgs;
|
|
377
|
+
"solari_insight_instagram_brand_collaborator_posts": InsightInstagramBrandCollaboratorPostsArgs;
|
|
378
|
+
"solari_insight_instagram_brand_lookalike_content": InsightInstagramBrandLookalikeContentArgs;
|
|
379
|
+
"solari_insight_instagram_brand_overview": InsightInstagramBrandOverviewArgs;
|
|
380
|
+
"solari_insight_instagram_brand_top_collaborators": InsightInstagramBrandTopCollaboratorsArgs;
|
|
381
|
+
"solari_insight_instagram_content_aggregate": InsightInstagramContentAggregateArgs;
|
|
382
|
+
"solari_insight_instagram_content_rising": InsightInstagramContentRisingArgs;
|
|
383
|
+
"solari_insight_instagram_content_trend_clusters": InsightInstagramContentTrendClustersArgs;
|
|
384
|
+
"solari_insight_instagram_content_trending": InsightInstagramContentTrendingArgs;
|
|
385
|
+
"solari_insight_tiktok_content_aggregate": InsightTiktokContentAggregateArgs;
|
|
386
|
+
}
|
|
387
|
+
export type SolariToolName = keyof SolariToolMap;
|
|
388
|
+
export declare const SOLARI_TOOL_NAMES: readonly SolariToolName[];
|
|
389
|
+
export type SolariToolsWithoutRequiredArgs = {
|
|
390
|
+
"solari_catalog_instagram_account_posts": true;
|
|
391
|
+
"solari_catalog_instagram_account_profile": true;
|
|
392
|
+
"solari_catalog_instagram_content_detail": true;
|
|
393
|
+
"solari_catalog_tiktok_account_posts": true;
|
|
394
|
+
"solari_catalog_tiktok_account_profile": true;
|
|
395
|
+
"solari_catalog_tiktok_content_detail": true;
|
|
396
|
+
"solari_insight_instagram_account_ad_posts": true;
|
|
397
|
+
"solari_insight_instagram_account_collabs": true;
|
|
398
|
+
"solari_insight_instagram_brand_lookalike_content": true;
|
|
399
|
+
"solari_insight_instagram_brand_top_collaborators": true;
|
|
400
|
+
"solari_insight_instagram_content_aggregate": true;
|
|
401
|
+
"solari_insight_instagram_content_rising": true;
|
|
402
|
+
"solari_insight_instagram_content_trend_clusters": true;
|
|
403
|
+
"solari_insight_instagram_content_trending": true;
|
|
404
|
+
"solari_insight_tiktok_content_aggregate": true;
|
|
405
|
+
};
|
|
406
|
+
export interface SolariTools {
|
|
407
|
+
catalog: {
|
|
408
|
+
instagram: {
|
|
409
|
+
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. */
|
|
411
|
+
posts<T = unknown>(args?: CatalogInstagramAccountPostsArgs): Promise<T>;
|
|
412
|
+
/** 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
|
+
profile<T = unknown>(args?: CatalogInstagramAccountProfileArgs): Promise<T>;
|
|
414
|
+
/** Resolves a brand/creator name or Instagram handle to candidate tracked accounts via fast deterministic index search — like a typeahead, all candidates are returned — and also searches profile bio text. query_type picks what the query is matched against: auto (default) matches handles by prefix and profile display names (Korean or English) by text match; username or full_name narrows to just one of those; bio runs a full-text search over profile bio text, which is how you discover accounts by what they say about themselves ("skincare", "협찬 문의", "コスメ") rather than by name. Ranked by match quality and follower count. Returns found plus items ordered best-first (items[0] is the top match), each with account_id (the SOLARI account UUID every other tool takes), username, full_name, biography, follower_count, region, is_verified, and profile_pic_url; found=false with empty items means nothing matched. In the name modes the query must actually appear in the handle or display name — phonetic aliases and abbreviations do not resolve, so retry with the native spelling (for example the English brand name). Set brands_only=true when resolving a brand name to filter out fan and meme accounts; pair it with query_type=bio to sweep a category of brands. Leave region unset unless the user asked for one country — it drops every account outside that region. Works with any signed-in SOLARI account. Use this first to resolve any entity mentioned by name. */
|
|
415
|
+
search<T = unknown>(args: CatalogInstagramAccountSearchArgs): Promise<T>;
|
|
416
|
+
};
|
|
417
|
+
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. */
|
|
419
|
+
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. */
|
|
421
|
+
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. */
|
|
423
|
+
search<T = unknown>(args: CatalogInstagramContentSearchArgs): Promise<T>;
|
|
424
|
+
};
|
|
425
|
+
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. */
|
|
427
|
+
search<T = unknown>(args: CatalogInstagramTagSearchArgs): Promise<T>;
|
|
428
|
+
};
|
|
429
|
+
};
|
|
430
|
+
tiktok: {
|
|
431
|
+
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. */
|
|
433
|
+
posts<T = unknown>(args?: CatalogTiktokAccountPostsArgs): Promise<T>;
|
|
434
|
+
/** 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
|
+
profile<T = unknown>(args?: CatalogTiktokAccountProfileArgs): Promise<T>;
|
|
436
|
+
/** Resolves a brand/creator name or TikTok handle to candidate tracked TikTok accounts via fast deterministic index search, typeahead-style: matches handles by prefix and display nicknames by text match, ranked by match quality and follower count. Returns found plus items ordered best-first (items[0] is the top match), each with account_id (the SOLARI account UUID the other solari_catalog_tiktok_* tools take; a TikTok account_id is a different value from any Instagram account_id and the two are never interchangeable), username (the TikTok handle), nickname, follower_count, video_count, region, is_verified, is_private, is_commerce_user, commerce_user_category, and profile_url; found=false with empty items means nothing matched. The query must actually appear in the handle or nickname, so retry with the native spelling when a phonetic alias does not resolve. Leave region unset unless the user asked for one country: many tracked TikTok accounts carry no region, and a region filter drops them. A handle that is not tracked yet does not appear here; pass an exact handle to solari_fetch_tiktok_account, then read it with the catalog profile tool. Works with any signed-in SOLARI account. */
|
|
437
|
+
search<T = unknown>(args: CatalogTiktokAccountSearchArgs): Promise<T>;
|
|
438
|
+
};
|
|
439
|
+
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. */
|
|
441
|
+
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. */
|
|
443
|
+
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. */
|
|
445
|
+
search<T = unknown>(args: CatalogTiktokContentSearchArgs): Promise<T>;
|
|
446
|
+
};
|
|
447
|
+
};
|
|
448
|
+
};
|
|
449
|
+
fetch: {
|
|
450
|
+
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. */
|
|
454
|
+
posts<T = unknown>(args: FetchInstagramPostsArgs): Promise<T>;
|
|
455
|
+
};
|
|
456
|
+
tiktok: {
|
|
457
|
+
/** 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
|
+
account<T = unknown>(args: FetchTiktokAccountArgs): Promise<T>;
|
|
459
|
+
/** 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
|
+
posts<T = unknown>(args: FetchTiktokPostsArgs): Promise<T>;
|
|
461
|
+
};
|
|
462
|
+
};
|
|
463
|
+
insight: {
|
|
464
|
+
instagram: {
|
|
465
|
+
account: {
|
|
466
|
+
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. */
|
|
468
|
+
posts<T = unknown>(args?: InsightInstagramAccountAdPostsArgs): Promise<T>;
|
|
469
|
+
};
|
|
470
|
+
/** 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
|
+
collabs<T = unknown>(args?: InsightInstagramAccountCollabsArgs): Promise<T>;
|
|
472
|
+
/** 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
|
+
similar<T = unknown>(args: InsightInstagramAccountSimilarArgs): Promise<T>;
|
|
474
|
+
};
|
|
475
|
+
brand: {
|
|
476
|
+
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. */
|
|
478
|
+
posts<T = unknown>(args: InsightInstagramBrandAdPostsArgs): Promise<T>;
|
|
479
|
+
/** 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
|
+
stats<T = unknown>(args: InsightInstagramBrandAdStatsArgs): Promise<T>;
|
|
481
|
+
};
|
|
482
|
+
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. */
|
|
484
|
+
posts<T = unknown>(args: InsightInstagramBrandCollaboratorPostsArgs): Promise<T>;
|
|
485
|
+
};
|
|
486
|
+
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. */
|
|
488
|
+
content<T = unknown>(args?: InsightInstagramBrandLookalikeContentArgs): Promise<T>;
|
|
489
|
+
};
|
|
490
|
+
/** 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. */
|
|
491
|
+
overview<T = unknown>(args: InsightInstagramBrandOverviewArgs): Promise<T>;
|
|
492
|
+
top: {
|
|
493
|
+
/** Ranked list of creators who authored resolved ad posts targeting the brand, ordered by collaboration count. 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. Retrospective collaboration history, not a forward-looking fit score. Works with any signed-in SOLARI account. */
|
|
494
|
+
collaborators<T = unknown>(args?: InsightInstagramBrandTopCollaboratorsArgs): Promise<T>;
|
|
495
|
+
};
|
|
496
|
+
};
|
|
497
|
+
content: {
|
|
498
|
+
/** 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
|
+
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. */
|
|
501
|
+
rising<T = unknown>(args?: InsightInstagramContentRisingArgs): Promise<T>;
|
|
502
|
+
trend: {
|
|
503
|
+
/** 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
|
+
clusters<T = unknown>(args?: InsightInstagramContentTrendClustersArgs): Promise<T>;
|
|
505
|
+
};
|
|
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. */
|
|
507
|
+
trending<T = unknown>(args?: InsightInstagramContentTrendingArgs): Promise<T>;
|
|
508
|
+
};
|
|
509
|
+
};
|
|
510
|
+
tiktok: {
|
|
511
|
+
content: {
|
|
512
|
+
/** 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. */
|
|
513
|
+
aggregate<T = unknown>(args?: InsightTiktokContentAggregateArgs): Promise<T>;
|
|
514
|
+
};
|
|
515
|
+
};
|
|
516
|
+
};
|
|
517
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// AUTO-GENERATED by cf-workers/solari-mcp/scripts/generate-sdk-tools.ts from the SOLARI MCP tool registry. Do not edit by hand; run `pnpm run sdk:generate` in cf-workers/solari-mcp.
|
|
2
|
+
export const SOLARI_TOOL_NAMES = [
|
|
3
|
+
"solari_catalog_instagram_account_posts",
|
|
4
|
+
"solari_catalog_instagram_account_profile",
|
|
5
|
+
"solari_catalog_instagram_account_search",
|
|
6
|
+
"solari_catalog_instagram_content_batch",
|
|
7
|
+
"solari_catalog_instagram_content_detail",
|
|
8
|
+
"solari_catalog_instagram_content_search",
|
|
9
|
+
"solari_catalog_instagram_tag_search",
|
|
10
|
+
"solari_catalog_tiktok_account_posts",
|
|
11
|
+
"solari_catalog_tiktok_account_profile",
|
|
12
|
+
"solari_catalog_tiktok_account_search",
|
|
13
|
+
"solari_catalog_tiktok_content_batch",
|
|
14
|
+
"solari_catalog_tiktok_content_detail",
|
|
15
|
+
"solari_catalog_tiktok_content_search",
|
|
16
|
+
"solari_fetch_instagram_account",
|
|
17
|
+
"solari_fetch_instagram_posts",
|
|
18
|
+
"solari_fetch_tiktok_account",
|
|
19
|
+
"solari_fetch_tiktok_posts",
|
|
20
|
+
"solari_insight_instagram_account_ad_posts",
|
|
21
|
+
"solari_insight_instagram_account_collabs",
|
|
22
|
+
"solari_insight_instagram_account_similar",
|
|
23
|
+
"solari_insight_instagram_brand_ad_posts",
|
|
24
|
+
"solari_insight_instagram_brand_ad_stats",
|
|
25
|
+
"solari_insight_instagram_brand_collaborator_posts",
|
|
26
|
+
"solari_insight_instagram_brand_lookalike_content",
|
|
27
|
+
"solari_insight_instagram_brand_overview",
|
|
28
|
+
"solari_insight_instagram_brand_top_collaborators",
|
|
29
|
+
"solari_insight_instagram_content_aggregate",
|
|
30
|
+
"solari_insight_instagram_content_rising",
|
|
31
|
+
"solari_insight_instagram_content_trend_clusters",
|
|
32
|
+
"solari_insight_instagram_content_trending",
|
|
33
|
+
"solari_insight_tiktok_content_aggregate",
|
|
34
|
+
];
|
package/package.json
CHANGED