posterly-mcp-server 0.8.1 → 0.8.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/README.md CHANGED
@@ -93,7 +93,7 @@ Add the same server definition to your Cursor MCP settings:
93
93
 
94
94
  ## Available tools
95
95
 
96
- `posterly-mcp-server@0.8.1` exposes 16 tools:
96
+ `posterly-mcp-server@0.8.3` exposes 17 tools:
97
97
 
98
98
  - `whoami`
99
99
  - `list_accounts`
@@ -104,6 +104,7 @@ Add the same server definition to your Cursor MCP settings:
104
104
  - `list_posts`
105
105
  - `get_post`
106
106
  - `create_post` (supports `thread_posts: string[]` for X / Threads reply chains, plus `platform_settings` for platform-specific composer controls)
107
+ - `create_posts_batch` (create up to 25 confirmed posts in one API request)
107
108
  - `update_post` (also accepts `platform_settings`)
108
109
  - `delete_post`
109
110
  - `upload_media`
@@ -112,7 +113,7 @@ Add the same server definition to your Cursor MCP settings:
112
113
  - `get_account_analytics`
113
114
  - `get_post_analytics`
114
115
 
115
- Analytics tools currently support Instagram, LinkedIn, Google Business Profile, and Pinterest.
116
+ Analytics tools currently support Instagram, LinkedIn, Google Business Profile, Pinterest, and YouTube.
116
117
 
117
118
  ## What the brand tools are for
118
119
 
@@ -150,11 +151,11 @@ much more reliable than forcing the agent to guess from raw account handles alon
150
151
  This package uses the Posterly API/MCP add-on:
151
152
 
152
153
  - `$3/month` add-on
153
- - `30 requests/hour` per API key
154
+ - `100 create-post requests/hour` per API key, with separate media/read limits
154
155
  - user-created API keys per plan: Starter 1, Pro 2, Power User 3, Agency 4
155
156
  - works across all 11 supported platforms
156
157
 
157
- Each API call counts as one request, so you can still schedule multiple posts in a single request to maximize throughput.
158
+ Each API call counts as one request, so use `create_posts_batch` when you need to schedule multiple posts in one confirmed operation.
158
159
 
159
160
  Details: [poster.ly/dashboard/api](https://www.poster.ly/dashboard/api)
160
161
 
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ import { getBrandTool } from './tools/get-brand.js';
8
8
  import { listBrandAccountsTool } from './tools/list-brand-accounts.js';
9
9
  import { getBrandProfileTool } from './tools/get-brand-profile.js';
10
10
  import { createPostTool } from './tools/create-post.js';
11
+ import { createPostsBatchTool } from './tools/create-posts-batch.js';
11
12
  import { findSlotTool } from './tools/find-slot.js';
12
13
  import { listPostsTool } from './tools/list-posts.js';
13
14
  import { uploadMediaTool } from './tools/upload-media.js';
@@ -94,6 +95,15 @@ server.tool(createPostTool.name, createPostTool.description, createPostTool.inpu
94
95
  return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
95
96
  }
96
97
  });
98
+ server.tool(createPostsBatchTool.name, createPostsBatchTool.description, createPostsBatchTool.inputSchema.shape, async (input) => {
99
+ try {
100
+ const text = await createPostsBatchTool.execute(client, input);
101
+ return { content: [{ type: 'text', text }] };
102
+ }
103
+ catch (err) {
104
+ return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
105
+ }
106
+ });
97
107
  server.tool(findSlotTool.name, findSlotTool.description, findSlotTool.inputSchema.shape, async (input) => {
98
108
  try {
99
109
  const text = await findSlotTool.execute(client, input);
@@ -79,6 +79,47 @@ export interface InstagramPostSettings {
79
79
  reel_thumb_offset?: number;
80
80
  }
81
81
  export type PlatformPostSettings = Record<string, unknown>;
82
+ export type CreatePostPayload = {
83
+ account_id?: string;
84
+ username?: string;
85
+ platform?: string;
86
+ caption: string;
87
+ scheduled_at?: string;
88
+ post_type?: string;
89
+ media_url?: string;
90
+ media_urls?: string[];
91
+ metadata?: Record<string, unknown>;
92
+ settings?: PlatformPostSettings;
93
+ reel_cover_url?: string;
94
+ reel_cover_method?: string;
95
+ reel_thumb_offset?: number;
96
+ workspace_id?: string;
97
+ };
98
+ export type CreatePostResponse = {
99
+ post: Post;
100
+ workspace: {
101
+ id: string;
102
+ name: string;
103
+ is_personal: boolean;
104
+ resolved_from: 'explicit' | 'account' | 'personal';
105
+ };
106
+ };
107
+ export type BatchCreatePostsResponse = {
108
+ posts: Array<CreatePostResponse & {
109
+ index: number;
110
+ replayed: boolean;
111
+ }>;
112
+ errors: Array<{
113
+ index: number;
114
+ status: number;
115
+ error: string;
116
+ validation_errors?: unknown;
117
+ }>;
118
+ total: number;
119
+ created: number;
120
+ replayed: number;
121
+ failed: number;
122
+ };
82
123
  export interface Slot {
83
124
  time: string;
84
125
  local_time: string;
@@ -119,6 +160,8 @@ export interface AccountAnalyticsSummary {
119
160
  total_direction_requests: number | null;
120
161
  total_conversations: number | null;
121
162
  total_bookings: number | null;
163
+ total_watch_minutes?: number | null;
164
+ total_likes?: number | null;
122
165
  }
123
166
  export interface AccountAnalyticsSnapshot {
124
167
  date: string;
@@ -163,8 +206,11 @@ export interface PostAnalyticsRow {
163
206
  shares: number;
164
207
  plays: number;
165
208
  total_interactions: number;
209
+ avg_watch_time_ms?: number | null;
210
+ total_watch_time_ms?: number | null;
166
211
  url_link_clicks?: number;
167
212
  user_profile_clicks?: number;
213
+ engagements?: number;
168
214
  media_type: string | null;
169
215
  media_url: string | null;
170
216
  permalink: string | null;
@@ -216,30 +262,10 @@ export declare class PosterlyClient {
216
262
  posts: Post[];
217
263
  total: number;
218
264
  }>;
219
- createPost(data: {
220
- account_id?: string;
221
- username?: string;
222
- platform?: string;
223
- caption: string;
224
- scheduled_at?: string;
225
- post_type?: string;
226
- media_url?: string;
227
- media_urls?: string[];
228
- metadata?: Record<string, unknown>;
229
- settings?: PlatformPostSettings;
230
- reel_cover_url?: string;
231
- reel_cover_method?: string;
232
- reel_thumb_offset?: number;
233
- workspace_id?: string;
234
- }): Promise<{
235
- post: Post;
236
- workspace: {
237
- id: string;
238
- name: string;
239
- is_personal: boolean;
240
- resolved_from: 'explicit' | 'account' | 'personal';
241
- };
242
- }>;
265
+ createPost(data: CreatePostPayload): Promise<CreatePostResponse>;
266
+ createPostsBatch(data: {
267
+ posts: CreatePostPayload[];
268
+ }): Promise<BatchCreatePostsResponse>;
243
269
  getPost(id: number): Promise<{
244
270
  post: Post;
245
271
  }>;
@@ -79,6 +79,9 @@ export class PosterlyClient {
79
79
  async createPost(data) {
80
80
  return this.request('POST', '/posts', data);
81
81
  }
82
+ async createPostsBatch(data) {
83
+ return this.request('POST', '/posts/batch', data);
84
+ }
82
85
  async getPost(id) {
83
86
  return this.request('GET', `/posts/${id}`);
84
87
  }
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import type { PosterlyClient } from '../lib/api-client.js';
3
- declare const instagramSettingsSchema: z.ZodObject<{
3
+ export declare const instagramSettingsSchema: z.ZodObject<{
4
4
  __type: z.ZodOptional<z.ZodEnum<["instagram", "instagram-standalone"]>>;
5
5
  post_type: z.ZodOptional<z.ZodEnum<["post", "feed", "story", "reel", "carousel"]>>;
6
6
  is_trial_reel: z.ZodOptional<z.ZodBoolean>;
@@ -74,7 +74,7 @@ declare const instagramSettingsSchema: z.ZodObject<{
74
74
  reel_cover_url?: string | undefined;
75
75
  reel_thumb_offset?: number | undefined;
76
76
  }>;
77
- declare const platformSettingsSchema: z.ZodObject<{
77
+ export declare const platformSettingsSchema: z.ZodObject<{
78
78
  __type: z.ZodOptional<z.ZodString>;
79
79
  post_type: z.ZodOptional<z.ZodString>;
80
80
  content_type: z.ZodOptional<z.ZodString>;
@@ -219,6 +219,399 @@ declare const platformSettingsSchema: z.ZodObject<{
219
219
  cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
220
220
  langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
221
221
  }, z.ZodTypeAny, "passthrough">>;
222
+ export declare const createPostInputSchema: z.ZodObject<{
223
+ account_id: z.ZodOptional<z.ZodString>;
224
+ username: z.ZodOptional<z.ZodString>;
225
+ platform: z.ZodOptional<z.ZodString>;
226
+ caption: z.ZodOptional<z.ZodString>;
227
+ scheduled_at: z.ZodOptional<z.ZodString>;
228
+ media_url: z.ZodOptional<z.ZodString>;
229
+ media_urls: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
230
+ post_type: z.ZodOptional<z.ZodString>;
231
+ thread_posts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
232
+ instagram_settings: z.ZodOptional<z.ZodObject<{
233
+ __type: z.ZodOptional<z.ZodEnum<["instagram", "instagram-standalone"]>>;
234
+ post_type: z.ZodOptional<z.ZodEnum<["post", "feed", "story", "reel", "carousel"]>>;
235
+ is_trial_reel: z.ZodOptional<z.ZodBoolean>;
236
+ graduation_strategy: z.ZodOptional<z.ZodEnum<["MANUAL", "SS_PERFORMANCE"]>>;
237
+ collaborators: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
238
+ label: z.ZodOptional<z.ZodString>;
239
+ username: z.ZodOptional<z.ZodString>;
240
+ handle: z.ZodOptional<z.ZodString>;
241
+ }, "strip", z.ZodTypeAny, {
242
+ label?: string | undefined;
243
+ username?: string | undefined;
244
+ handle?: string | undefined;
245
+ }, {
246
+ label?: string | undefined;
247
+ username?: string | undefined;
248
+ handle?: string | undefined;
249
+ }>]>, "many">>;
250
+ user_tags: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
251
+ username: z.ZodOptional<z.ZodString>;
252
+ label: z.ZodOptional<z.ZodString>;
253
+ handle: z.ZodOptional<z.ZodString>;
254
+ }, "strip", z.ZodTypeAny, {
255
+ label?: string | undefined;
256
+ username?: string | undefined;
257
+ handle?: string | undefined;
258
+ }, {
259
+ label?: string | undefined;
260
+ username?: string | undefined;
261
+ handle?: string | undefined;
262
+ }>]>, "many">>;
263
+ first_comment: z.ZodOptional<z.ZodString>;
264
+ media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
265
+ reel_cover_url: z.ZodOptional<z.ZodString>;
266
+ reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
267
+ }, "strip", z.ZodTypeAny, {
268
+ __type?: "instagram" | "instagram-standalone" | undefined;
269
+ post_type?: "post" | "feed" | "story" | "reel" | "carousel" | undefined;
270
+ is_trial_reel?: boolean | undefined;
271
+ graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
272
+ collaborators?: (string | {
273
+ label?: string | undefined;
274
+ username?: string | undefined;
275
+ handle?: string | undefined;
276
+ })[] | undefined;
277
+ user_tags?: (string | {
278
+ label?: string | undefined;
279
+ username?: string | undefined;
280
+ handle?: string | undefined;
281
+ })[] | undefined;
282
+ first_comment?: string | undefined;
283
+ media_alt_texts?: Record<string, string> | undefined;
284
+ reel_cover_url?: string | undefined;
285
+ reel_thumb_offset?: number | undefined;
286
+ }, {
287
+ __type?: "instagram" | "instagram-standalone" | undefined;
288
+ post_type?: "post" | "feed" | "story" | "reel" | "carousel" | undefined;
289
+ is_trial_reel?: boolean | undefined;
290
+ graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
291
+ collaborators?: (string | {
292
+ label?: string | undefined;
293
+ username?: string | undefined;
294
+ handle?: string | undefined;
295
+ })[] | undefined;
296
+ user_tags?: (string | {
297
+ label?: string | undefined;
298
+ username?: string | undefined;
299
+ handle?: string | undefined;
300
+ })[] | undefined;
301
+ first_comment?: string | undefined;
302
+ media_alt_texts?: Record<string, string> | undefined;
303
+ reel_cover_url?: string | undefined;
304
+ reel_thumb_offset?: number | undefined;
305
+ }>>;
306
+ platform_settings: z.ZodOptional<z.ZodObject<{
307
+ __type: z.ZodOptional<z.ZodString>;
308
+ post_type: z.ZodOptional<z.ZodString>;
309
+ content_type: z.ZodOptional<z.ZodString>;
310
+ media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
311
+ reel_cover_url: z.ZodOptional<z.ZodString>;
312
+ reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
313
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
314
+ poll: z.ZodOptional<z.ZodObject<{
315
+ options: z.ZodArray<z.ZodString, "many">;
316
+ duration_minutes: z.ZodOptional<z.ZodNumber>;
317
+ }, "strip", z.ZodTypeAny, {
318
+ options: string[];
319
+ duration_minutes?: number | undefined;
320
+ }, {
321
+ options: string[];
322
+ duration_minutes?: number | undefined;
323
+ }>>;
324
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
325
+ text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
326
+ text_format_preset_id: z.ZodOptional<z.ZodString>;
327
+ document_title: z.ZodOptional<z.ZodString>;
328
+ document_filename: z.ZodOptional<z.ZodString>;
329
+ mentions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
330
+ thumbnail_url: z.ZodOptional<z.ZodString>;
331
+ thumbnail_method: z.ZodOptional<z.ZodString>;
332
+ privacy_level: z.ZodOptional<z.ZodString>;
333
+ allow_comment: z.ZodOptional<z.ZodBoolean>;
334
+ allow_duet: z.ZodOptional<z.ZodBoolean>;
335
+ allow_stitch: z.ZodOptional<z.ZodBoolean>;
336
+ title: z.ZodOptional<z.ZodString>;
337
+ is_commercial_content: z.ZodOptional<z.ZodBoolean>;
338
+ is_your_brand: z.ZodOptional<z.ZodBoolean>;
339
+ is_branded_content: z.ZodOptional<z.ZodBoolean>;
340
+ privacy_status: z.ZodOptional<z.ZodEnum<["public", "unlisted", "private"]>>;
341
+ made_for_kids: z.ZodOptional<z.ZodBoolean>;
342
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
343
+ category_id: z.ZodOptional<z.ZodString>;
344
+ playlist_id: z.ZodOptional<z.ZodString>;
345
+ board_id: z.ZodOptional<z.ZodString>;
346
+ link: z.ZodOptional<z.ZodString>;
347
+ cover_image_url: z.ZodOptional<z.ZodString>;
348
+ video_cover_url: z.ZodOptional<z.ZodString>;
349
+ cover_image_method: z.ZodOptional<z.ZodEnum<["upload", "frame", "api"]>>;
350
+ event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
351
+ offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
352
+ cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
353
+ langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
354
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
355
+ __type: z.ZodOptional<z.ZodString>;
356
+ post_type: z.ZodOptional<z.ZodString>;
357
+ content_type: z.ZodOptional<z.ZodString>;
358
+ media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
359
+ reel_cover_url: z.ZodOptional<z.ZodString>;
360
+ reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
361
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
362
+ poll: z.ZodOptional<z.ZodObject<{
363
+ options: z.ZodArray<z.ZodString, "many">;
364
+ duration_minutes: z.ZodOptional<z.ZodNumber>;
365
+ }, "strip", z.ZodTypeAny, {
366
+ options: string[];
367
+ duration_minutes?: number | undefined;
368
+ }, {
369
+ options: string[];
370
+ duration_minutes?: number | undefined;
371
+ }>>;
372
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
373
+ text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
374
+ text_format_preset_id: z.ZodOptional<z.ZodString>;
375
+ document_title: z.ZodOptional<z.ZodString>;
376
+ document_filename: z.ZodOptional<z.ZodString>;
377
+ mentions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
378
+ thumbnail_url: z.ZodOptional<z.ZodString>;
379
+ thumbnail_method: z.ZodOptional<z.ZodString>;
380
+ privacy_level: z.ZodOptional<z.ZodString>;
381
+ allow_comment: z.ZodOptional<z.ZodBoolean>;
382
+ allow_duet: z.ZodOptional<z.ZodBoolean>;
383
+ allow_stitch: z.ZodOptional<z.ZodBoolean>;
384
+ title: z.ZodOptional<z.ZodString>;
385
+ is_commercial_content: z.ZodOptional<z.ZodBoolean>;
386
+ is_your_brand: z.ZodOptional<z.ZodBoolean>;
387
+ is_branded_content: z.ZodOptional<z.ZodBoolean>;
388
+ privacy_status: z.ZodOptional<z.ZodEnum<["public", "unlisted", "private"]>>;
389
+ made_for_kids: z.ZodOptional<z.ZodBoolean>;
390
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
391
+ category_id: z.ZodOptional<z.ZodString>;
392
+ playlist_id: z.ZodOptional<z.ZodString>;
393
+ board_id: z.ZodOptional<z.ZodString>;
394
+ link: z.ZodOptional<z.ZodString>;
395
+ cover_image_url: z.ZodOptional<z.ZodString>;
396
+ video_cover_url: z.ZodOptional<z.ZodString>;
397
+ cover_image_method: z.ZodOptional<z.ZodEnum<["upload", "frame", "api"]>>;
398
+ event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
399
+ offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
400
+ cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
401
+ langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
402
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
403
+ __type: z.ZodOptional<z.ZodString>;
404
+ post_type: z.ZodOptional<z.ZodString>;
405
+ content_type: z.ZodOptional<z.ZodString>;
406
+ media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
407
+ reel_cover_url: z.ZodOptional<z.ZodString>;
408
+ reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
409
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
410
+ poll: z.ZodOptional<z.ZodObject<{
411
+ options: z.ZodArray<z.ZodString, "many">;
412
+ duration_minutes: z.ZodOptional<z.ZodNumber>;
413
+ }, "strip", z.ZodTypeAny, {
414
+ options: string[];
415
+ duration_minutes?: number | undefined;
416
+ }, {
417
+ options: string[];
418
+ duration_minutes?: number | undefined;
419
+ }>>;
420
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
421
+ text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
422
+ text_format_preset_id: z.ZodOptional<z.ZodString>;
423
+ document_title: z.ZodOptional<z.ZodString>;
424
+ document_filename: z.ZodOptional<z.ZodString>;
425
+ mentions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
426
+ thumbnail_url: z.ZodOptional<z.ZodString>;
427
+ thumbnail_method: z.ZodOptional<z.ZodString>;
428
+ privacy_level: z.ZodOptional<z.ZodString>;
429
+ allow_comment: z.ZodOptional<z.ZodBoolean>;
430
+ allow_duet: z.ZodOptional<z.ZodBoolean>;
431
+ allow_stitch: z.ZodOptional<z.ZodBoolean>;
432
+ title: z.ZodOptional<z.ZodString>;
433
+ is_commercial_content: z.ZodOptional<z.ZodBoolean>;
434
+ is_your_brand: z.ZodOptional<z.ZodBoolean>;
435
+ is_branded_content: z.ZodOptional<z.ZodBoolean>;
436
+ privacy_status: z.ZodOptional<z.ZodEnum<["public", "unlisted", "private"]>>;
437
+ made_for_kids: z.ZodOptional<z.ZodBoolean>;
438
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
439
+ category_id: z.ZodOptional<z.ZodString>;
440
+ playlist_id: z.ZodOptional<z.ZodString>;
441
+ board_id: z.ZodOptional<z.ZodString>;
442
+ link: z.ZodOptional<z.ZodString>;
443
+ cover_image_url: z.ZodOptional<z.ZodString>;
444
+ video_cover_url: z.ZodOptional<z.ZodString>;
445
+ cover_image_method: z.ZodOptional<z.ZodEnum<["upload", "frame", "api"]>>;
446
+ event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
447
+ offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
448
+ cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
449
+ langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
450
+ }, z.ZodTypeAny, "passthrough">>>;
451
+ workspace_id: z.ZodOptional<z.ZodString>;
452
+ }, "strip", z.ZodTypeAny, {
453
+ workspace_id?: string | undefined;
454
+ platform?: string | undefined;
455
+ account_id?: string | undefined;
456
+ post_type?: string | undefined;
457
+ username?: string | undefined;
458
+ caption?: string | undefined;
459
+ scheduled_at?: string | undefined;
460
+ media_url?: string | undefined;
461
+ media_urls?: string[] | undefined;
462
+ thread_posts?: string[] | undefined;
463
+ instagram_settings?: {
464
+ __type?: "instagram" | "instagram-standalone" | undefined;
465
+ post_type?: "post" | "feed" | "story" | "reel" | "carousel" | undefined;
466
+ is_trial_reel?: boolean | undefined;
467
+ graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
468
+ collaborators?: (string | {
469
+ label?: string | undefined;
470
+ username?: string | undefined;
471
+ handle?: string | undefined;
472
+ })[] | undefined;
473
+ user_tags?: (string | {
474
+ label?: string | undefined;
475
+ username?: string | undefined;
476
+ handle?: string | undefined;
477
+ })[] | undefined;
478
+ first_comment?: string | undefined;
479
+ media_alt_texts?: Record<string, string> | undefined;
480
+ reel_cover_url?: string | undefined;
481
+ reel_thumb_offset?: number | undefined;
482
+ } | undefined;
483
+ platform_settings?: z.objectOutputType<{
484
+ __type: z.ZodOptional<z.ZodString>;
485
+ post_type: z.ZodOptional<z.ZodString>;
486
+ content_type: z.ZodOptional<z.ZodString>;
487
+ media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
488
+ reel_cover_url: z.ZodOptional<z.ZodString>;
489
+ reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
490
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
491
+ poll: z.ZodOptional<z.ZodObject<{
492
+ options: z.ZodArray<z.ZodString, "many">;
493
+ duration_minutes: z.ZodOptional<z.ZodNumber>;
494
+ }, "strip", z.ZodTypeAny, {
495
+ options: string[];
496
+ duration_minutes?: number | undefined;
497
+ }, {
498
+ options: string[];
499
+ duration_minutes?: number | undefined;
500
+ }>>;
501
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
502
+ text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
503
+ text_format_preset_id: z.ZodOptional<z.ZodString>;
504
+ document_title: z.ZodOptional<z.ZodString>;
505
+ document_filename: z.ZodOptional<z.ZodString>;
506
+ mentions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
507
+ thumbnail_url: z.ZodOptional<z.ZodString>;
508
+ thumbnail_method: z.ZodOptional<z.ZodString>;
509
+ privacy_level: z.ZodOptional<z.ZodString>;
510
+ allow_comment: z.ZodOptional<z.ZodBoolean>;
511
+ allow_duet: z.ZodOptional<z.ZodBoolean>;
512
+ allow_stitch: z.ZodOptional<z.ZodBoolean>;
513
+ title: z.ZodOptional<z.ZodString>;
514
+ is_commercial_content: z.ZodOptional<z.ZodBoolean>;
515
+ is_your_brand: z.ZodOptional<z.ZodBoolean>;
516
+ is_branded_content: z.ZodOptional<z.ZodBoolean>;
517
+ privacy_status: z.ZodOptional<z.ZodEnum<["public", "unlisted", "private"]>>;
518
+ made_for_kids: z.ZodOptional<z.ZodBoolean>;
519
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
520
+ category_id: z.ZodOptional<z.ZodString>;
521
+ playlist_id: z.ZodOptional<z.ZodString>;
522
+ board_id: z.ZodOptional<z.ZodString>;
523
+ link: z.ZodOptional<z.ZodString>;
524
+ cover_image_url: z.ZodOptional<z.ZodString>;
525
+ video_cover_url: z.ZodOptional<z.ZodString>;
526
+ cover_image_method: z.ZodOptional<z.ZodEnum<["upload", "frame", "api"]>>;
527
+ event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
528
+ offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
529
+ cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
530
+ langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
531
+ }, z.ZodTypeAny, "passthrough"> | undefined;
532
+ }, {
533
+ workspace_id?: string | undefined;
534
+ platform?: string | undefined;
535
+ account_id?: string | undefined;
536
+ post_type?: string | undefined;
537
+ username?: string | undefined;
538
+ caption?: string | undefined;
539
+ scheduled_at?: string | undefined;
540
+ media_url?: string | undefined;
541
+ media_urls?: string[] | undefined;
542
+ thread_posts?: string[] | undefined;
543
+ instagram_settings?: {
544
+ __type?: "instagram" | "instagram-standalone" | undefined;
545
+ post_type?: "post" | "feed" | "story" | "reel" | "carousel" | undefined;
546
+ is_trial_reel?: boolean | undefined;
547
+ graduation_strategy?: "MANUAL" | "SS_PERFORMANCE" | undefined;
548
+ collaborators?: (string | {
549
+ label?: string | undefined;
550
+ username?: string | undefined;
551
+ handle?: string | undefined;
552
+ })[] | undefined;
553
+ user_tags?: (string | {
554
+ label?: string | undefined;
555
+ username?: string | undefined;
556
+ handle?: string | undefined;
557
+ })[] | undefined;
558
+ first_comment?: string | undefined;
559
+ media_alt_texts?: Record<string, string> | undefined;
560
+ reel_cover_url?: string | undefined;
561
+ reel_thumb_offset?: number | undefined;
562
+ } | undefined;
563
+ platform_settings?: z.objectInputType<{
564
+ __type: z.ZodOptional<z.ZodString>;
565
+ post_type: z.ZodOptional<z.ZodString>;
566
+ content_type: z.ZodOptional<z.ZodString>;
567
+ media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
568
+ reel_cover_url: z.ZodOptional<z.ZodString>;
569
+ reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
570
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
571
+ poll: z.ZodOptional<z.ZodObject<{
572
+ options: z.ZodArray<z.ZodString, "many">;
573
+ duration_minutes: z.ZodOptional<z.ZodNumber>;
574
+ }, "strip", z.ZodTypeAny, {
575
+ options: string[];
576
+ duration_minutes?: number | undefined;
577
+ }, {
578
+ options: string[];
579
+ duration_minutes?: number | undefined;
580
+ }>>;
581
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
582
+ text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
583
+ text_format_preset_id: z.ZodOptional<z.ZodString>;
584
+ document_title: z.ZodOptional<z.ZodString>;
585
+ document_filename: z.ZodOptional<z.ZodString>;
586
+ mentions: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
587
+ thumbnail_url: z.ZodOptional<z.ZodString>;
588
+ thumbnail_method: z.ZodOptional<z.ZodString>;
589
+ privacy_level: z.ZodOptional<z.ZodString>;
590
+ allow_comment: z.ZodOptional<z.ZodBoolean>;
591
+ allow_duet: z.ZodOptional<z.ZodBoolean>;
592
+ allow_stitch: z.ZodOptional<z.ZodBoolean>;
593
+ title: z.ZodOptional<z.ZodString>;
594
+ is_commercial_content: z.ZodOptional<z.ZodBoolean>;
595
+ is_your_brand: z.ZodOptional<z.ZodBoolean>;
596
+ is_branded_content: z.ZodOptional<z.ZodBoolean>;
597
+ privacy_status: z.ZodOptional<z.ZodEnum<["public", "unlisted", "private"]>>;
598
+ made_for_kids: z.ZodOptional<z.ZodBoolean>;
599
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
600
+ category_id: z.ZodOptional<z.ZodString>;
601
+ playlist_id: z.ZodOptional<z.ZodString>;
602
+ board_id: z.ZodOptional<z.ZodString>;
603
+ link: z.ZodOptional<z.ZodString>;
604
+ cover_image_url: z.ZodOptional<z.ZodString>;
605
+ video_cover_url: z.ZodOptional<z.ZodString>;
606
+ cover_image_method: z.ZodOptional<z.ZodEnum<["upload", "frame", "api"]>>;
607
+ event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
608
+ offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
609
+ cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
610
+ langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
611
+ }, z.ZodTypeAny, "passthrough"> | undefined;
612
+ }>;
613
+ export type CreatePostInput = z.infer<typeof createPostInputSchema>;
614
+ export declare function buildCreatePostPayload(input: CreatePostInput): Parameters<PosterlyClient['createPost']>[0];
222
615
  export declare const createPostTool: {
223
616
  name: string;
224
617
  description: string;
@@ -628,4 +1021,3 @@ export declare const createPostTool: {
628
1021
  workspace_id?: string;
629
1022
  }): Promise<string>;
630
1023
  };
631
- export {};