{"openapi":"3.1.0","info":{"title":"PostRelay","version":"1.0.0","description":"PostRelay delivers approved copy and creative to connected social accounts. Call whoami_and_health then get_capabilities first. No visual changes without explicit opt-in; preserve originals, pad by default, never crop, stretch, regenerate or silently change copy. Always preview and get user approval of the exact revision and every change before publishing unless autopublish is on. Humans connect accounts and resolve exceptions; agents do the work. Import untouched files with import_chat_files (ChatGPT MCP), import_gpt_files (Custom GPT action), import_media (HTTPS), or create_upload then PUT bytes (local agents). Supply idempotency_key on retryable writes and reuse it only for identical inputs. Inspect plan_variants for sourced limits and needs_trim; render_variants can plan with account_ids. Never trim automatically. Poll get_render_status no sooner than retry_after_s; ready requires measured verification. Eager frames have output-relative t_s and links; only Claude may receive bounded embedded images. Caption frames are unavailable until live still-caption verification. transcribe_media requires workspace consent and Cloudinary's paid Google transcription add-on. Return SRT to the user for review. Burn only with subtitles.burn_in=true; sidecars do not change pixels. Review caption text, fps, audio, padding and tone-map changes in preview_post. Create/update draft, validate_post (includes preview on success), approve, then publish_post or schedule_post with dry_run:true before delivery. Repeat without dry_run with the same key. Use get_post_status for per-account receipts; submitted/scheduled is not published. Read postrelay://guide/workflow, video, copy and errors and postrelay://platforms/{platform}. get_trend_context returns only source-linked, timestamped, scoped evidence, including the TikTok trending music chart when configured; it is not a performance claim or permission to change audio. Ad-derived guidance is explicitly labelled and is not organic performance evidence. Structured errors have stable code and next_actions. Reconnect via /connect when unauthenticated, not an authenticated tool. Credentials belong in secure setup, never chat."},"servers":[{"url":"https://post-relay.io"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}},"schemas":{}},"security":[{"bearer":[]}],"paths":{"/api/public/v1/tools/transcribe_media":{"post":{"operationId":"transcribe_media","summary":"Transcribe media","description":"For a consented video, requests paid transcription. Returns caption job IDs or unavailable; next get_media. Never burns captions.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asset_id":{"type":"string","format":"uuid"},"language":{"type":"string","pattern":"^[A-Za-z]{2,3}(?:-[A-Za-z]{2})?$"},"formats":{"type":"array","items":{"type":"string","enum":["srt","vtt"]},"minItems":1,"maxItems":2},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{8,128}$","description":"Retry key. Reuse with exactly the same input; legacy calls may omit it."}},"required":["asset_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/whoami_and_health":{"post":{"operationId":"whoami_and_health","summary":"Identity and health","description":"For connection checks. Returns workspace, scopes and blockers; next get_capabilities.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/get_capabilities":{"post":{"operationId":"get_capabilities","summary":"Get capabilities","description":"For planning. Returns sourced limits, client support, consent and processors; next list_accounts.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin","instagram","youtube","tiktok","facebook"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/list_accounts":{"post":{"operationId":"list_accounts","summary":"List accounts","description":"For choosing destinations. Returns connected account IDs; next plan_variants or create_draft.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin","instagram","youtube","tiktok","facebook"]},"include_disconnected":{"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/create_upload":{"post":{"operationId":"create_upload","summary":"Create upload","description":"For local files. Returns signed upload URL and PUT headers; next PUT bytes then get_media.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{8,128}$","description":"Retry key. Reuse with exactly the same input; legacy calls may omit it."},"filename":{"type":"string","minLength":1,"maxLength":200},"content_type":{"type":"string","enum":["image/jpeg","image/png","image/webp","video/mp4","video/quicktime","video/webm"]},"bytes":{"type":"integer","exclusiveMinimum":0,"maximum":524288000}},"required":["filename","content_type","bytes"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/import_media":{"post":{"operationId":"import_media","summary":"Import media from URL","description":"For accessible HTTPS media. Returns untouched stored asset; next get_media. Private hosts are refused.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{8,128}$","description":"Retry key. Reuse with exactly the same input; legacy calls may omit it."},"url":{"type":"string","format":"uri","maxLength":2048},"filename":{"type":"string","maxLength":200}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/import_chat_files":{"post":{"operationId":"import_chat_files","summary":"Import chat files","description":"For ChatGPT attached files. Returns immediate safe imports from MCP file params; next get_media.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{8,128}$","description":"Retry key. Reuse with exactly the same input; legacy calls may omit it."},"files":{"type":"array","items":{"type":"object","properties":{"download_url":{"type":"string","format":"uri","maxLength":4096},"file_id":{"type":"string","minLength":1,"maxLength":256},"mime_type":{"type":"string","maxLength":100},"file_name":{"type":"string","maxLength":200}},"required":["download_url","file_id"],"additionalProperties":false},"minItems":1,"maxItems":10}},"required":["files"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/get_media":{"post":{"operationId":"get_media","summary":"Get media","description":"For uploaded assets or caption jobs. Returns measurements, variants and captions; next plan_variants.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asset_id":{"type":"string","format":"uuid"}},"required":["asset_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/plan_variants":{"post":{"operationId":"plan_variants","summary":"Plan variants","description":"For target accounts. Returns deterministic padded plans and trim requirements without frames; next render_variants.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asset_id":{"type":"string","format":"uuid"},"account_ids":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":60},"targets":{"type":"array","items":{"type":"object","properties":{"account_id":{"type":"string","format":"uuid"},"media_type":{"type":"string","enum":["REELS","STORIES"]},"facebook_media_type":{"type":"string","enum":["REELS","STORIES","VIDEO","POSTS"]}},"required":["account_id"],"additionalProperties":false},"minItems":1,"maxItems":60},"post_id":{"type":"string","format":"uuid"}},"required":["asset_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/render_variants":{"post":{"operationId":"render_variants","summary":"Render variants","description":"For approved media adaptations. Returns eager variant IDs and verification status; next get_render_status. Deprecated subtitles_srt and cover_at_s aliases remain accepted.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"asset_id":{"type":"string","format":"uuid"},"variants":{"type":"array","items":{"type":"object","properties":{"effects":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"ken_burns"},"direction":{"type":"string","enum":["in","out"],"default":"in"},"maxzoom":{"type":"number","minimum":1.1,"maximum":1.2,"default":1.1},"duration_s":{"type":"number","minimum":3,"maximum":15,"default":5}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"fade"},"in_ms":{"type":"integer","minimum":100,"maximum":2000},"out_ms":{"type":"integer","minimum":100,"maximum":2000}},"required":["type"],"additionalProperties":false}]},"maxItems":2},"acknowledge_visual_change":{"type":"boolean"},"force":{"type":"boolean"},"preset":{"type":"string","enum":["1:1","4:5","9:16","16:9"],"description":"Target aspect ratio. Output: 1:1=1080x1080, 4:5=1080x1350, 9:16=1080x1920, 16:9=1920x1080."},"background":{"type":"string","enum":["blurred","solid"],"description":"Padding background. Content is never cropped or stretched."},"bg_color":{"type":"string","pattern":"^[0-9a-fA-F]{6}$"},"format":{"type":"string","enum":["jpg","png","mp4"]},"trim":{"type":"object","properties":{"start_s":{"type":"number","minimum":0},"end_s":{"type":"number","exclusiveMinimum":0}},"required":["start_s"],"additionalProperties":false},"subtitles_srt":{"type":"string","maxLength":200000,"description":"Deprecated SRT text alias. Burn-in still requires subtitles.burn_in=true."},"cover_at_s":{"type":"number","minimum":0,"description":"Deprecated alias of cover.offset_s; export a JPG cover frame (video only)."},"cover":{"type":"object","properties":{"offset_s":{"type":"number","minimum":0},"at_ms":{"type":"integer","minimum":0},"frame_t_s":{"type":"number","minimum":0},"variant_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"caption_id":{"type":"string","format":"uuid"},"subtitles":{"type":"object","properties":{"srt":{"type":"string","maxLength":200000},"caption_id":{"type":"string","format":"uuid"},"burn_in":{"type":"boolean"},"style":{"type":"object","properties":{"font":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9 _-]{0,60}$"},"size":{"type":"integer","minimum":8,"maximum":200},"color":{"type":"string","pattern":"^[0-9a-fA-F]{6}$"},"box":{"type":"string","pattern":"^[0-9a-fA-F]{6}$"},"outline":{"type":"string","pattern":"^[0-9a-fA-F]{6}$"}},"additionalProperties":false},"placement":{"type":"string","enum":["south","center","north","safe"]}},"additionalProperties":false},"profile":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin","instagram","youtube","tiktok","facebook"]},"media_type":{"type":"string","enum":["REELS","STORIES"]},"facebook_media_type":{"type":"string","enum":["REELS","STORIES","VIDEO","POSTS"]}},"required":["platform"],"additionalProperties":false}},"required":["preset"],"additionalProperties":false},"minItems":1,"maxItems":8},"account_ids":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":60},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{8,128}$","description":"Retry key. Reuse with exactly the same input; legacy calls may omit it."}},"required":["asset_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/get_render_status":{"post":{"operationId":"get_render_status","summary":"Get render status","description":"For pending variants. Returns measured status, eager frames and retry_after_s; next preview_post when ready.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"variant_ids":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":20},"frames":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":8},"hook_window":{"type":"boolean"},"purpose":{"type":"string","enum":["review","cover"]}},"additionalProperties":false}},"required":["variant_ids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/create_draft":{"post":{"operationId":"create_draft","summary":"Create draft","description":"For final per-account copy and media. Returns draft ID, revision and hash; next validate_post.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{8,128}$","description":"Retry key. Reuse with exactly the same input; legacy calls may omit it."},"title":{"type":"string","maxLength":200},"content":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"object","properties":{"account_id":{"type":"string","format":"uuid","description":"social account id from list_accounts"},"text":{"type":"string","maxLength":70000,"description":"Final platform-specific copy written by the caller."},"title":{"type":"string","maxLength":500,"description":"Required for YouTube; optional TikTok photo title."},"media":{"type":"array","items":{"type":"object","properties":{"asset_id":{"type":"string","format":"uuid"},"variant_id":{"type":"string","format":"uuid","description":"Rendered variant to publish; omit to publish the untouched original."}},"required":["asset_id"],"additionalProperties":false},"maxItems":35,"default":[]},"options":{"type":"object","properties":{"privacy_level":{"type":"string","enum":["PUBLIC_TO_EVERYONE","MUTUAL_FOLLOW_FRIENDS","FOLLOWER_OF_CREATOR","SELF_ONLY"]},"disable_comment":{"type":"boolean"},"disable_duet":{"type":"boolean"},"disable_stitch":{"type":"boolean"},"brand_content_toggle":{"type":"boolean"},"brand_organic_toggle":{"type":"boolean"},"visibility":{"type":"string","enum":["PUBLIC","CONNECTIONS","LOGGED_IN"]},"privacyStatus":{"type":"string","enum":["public","unlisted","private"]},"selfDeclaredMadeForKids":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30},"media_type":{"type":"string","enum":["REELS","STORIES"]},"share_to_feed":{"type":"boolean"},"facebook_page_id":{"type":"string","maxLength":64},"linkedin_target":{"type":"string","enum":["personal","organization"],"description":"Explicit LinkedIn destination. 'organization' requires target_linkedin_page_id."},"target_linkedin_page_id":{"type":"string","maxLength":64,"description":"Publish to a LinkedIn company page instead of the personal profile."},"facebook_media_type":{"type":"string","enum":["REELS","STORIES","POSTS","VIDEO"]},"cover":{"type":"object","properties":{"frame_t_s":{"type":"number","minimum":0},"at_ms":{"type":"integer","minimum":0},"variant_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"captions_sidecar":{"type":"object","properties":{"caption_id":{"type":"string","format":"uuid"}},"required":["caption_id"],"additionalProperties":false},"first_comment":{"type":"string","maxLength":2200},"link_url":{"type":"string","format":"uri","maxLength":2048}},"additionalProperties":false,"default":{}}},"required":["account_id","text"],"additionalProperties":false},"minItems":1,"maxItems":60},"ai_generated":{"type":"boolean","default":false,"description":"Discloses AI-generated media/copy to platforms that support labels."}},"required":["targets"],"additionalProperties":false}},"required":["content"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/update_draft":{"post":{"operationId":"update_draft","summary":"Update draft","description":"For revised copy or media. Returns a new revision and hash with approval invalidated; next validate_post.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post_id":{"type":"string","format":"uuid"},"expected_revision":{"type":"integer","exclusiveMinimum":0},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{8,128}$","description":"Retry key. Reuse with exactly the same input; legacy calls may omit it."},"title":{"type":"string","maxLength":200},"content":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"object","properties":{"account_id":{"type":"string","format":"uuid","description":"social account id from list_accounts"},"text":{"type":"string","maxLength":70000,"description":"Final platform-specific copy written by the caller."},"title":{"type":"string","maxLength":500,"description":"Required for YouTube; optional TikTok photo title."},"media":{"type":"array","items":{"type":"object","properties":{"asset_id":{"type":"string","format":"uuid"},"variant_id":{"type":"string","format":"uuid","description":"Rendered variant to publish; omit to publish the untouched original."}},"required":["asset_id"],"additionalProperties":false},"maxItems":35,"default":[]},"options":{"type":"object","properties":{"privacy_level":{"type":"string","enum":["PUBLIC_TO_EVERYONE","MUTUAL_FOLLOW_FRIENDS","FOLLOWER_OF_CREATOR","SELF_ONLY"]},"disable_comment":{"type":"boolean"},"disable_duet":{"type":"boolean"},"disable_stitch":{"type":"boolean"},"brand_content_toggle":{"type":"boolean"},"brand_organic_toggle":{"type":"boolean"},"visibility":{"type":"string","enum":["PUBLIC","CONNECTIONS","LOGGED_IN"]},"privacyStatus":{"type":"string","enum":["public","unlisted","private"]},"selfDeclaredMadeForKids":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":30},"media_type":{"type":"string","enum":["REELS","STORIES"]},"share_to_feed":{"type":"boolean"},"facebook_page_id":{"type":"string","maxLength":64},"linkedin_target":{"type":"string","enum":["personal","organization"],"description":"Explicit LinkedIn destination. 'organization' requires target_linkedin_page_id."},"target_linkedin_page_id":{"type":"string","maxLength":64,"description":"Publish to a LinkedIn company page instead of the personal profile."},"facebook_media_type":{"type":"string","enum":["REELS","STORIES","POSTS","VIDEO"]},"cover":{"type":"object","properties":{"frame_t_s":{"type":"number","minimum":0},"at_ms":{"type":"integer","minimum":0},"variant_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"captions_sidecar":{"type":"object","properties":{"caption_id":{"type":"string","format":"uuid"}},"required":["caption_id"],"additionalProperties":false},"first_comment":{"type":"string","maxLength":2200},"link_url":{"type":"string","format":"uri","maxLength":2048}},"additionalProperties":false,"default":{}}},"required":["account_id","text"],"additionalProperties":false},"minItems":1,"maxItems":60},"ai_generated":{"type":"boolean","default":false,"description":"Discloses AI-generated media/copy to platforms that support labels."}},"required":["targets"],"additionalProperties":false}},"required":["post_id","expected_revision","content"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/validate_post":{"post":{"operationId":"validate_post","summary":"Validate post","description":"For current drafts. Returns sourced issues or inline preview; next preview_post or publish_post dry_run.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post_id":{"type":"string","format":"uuid"}},"required":["post_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/preview_post":{"post":{"operationId":"preview_post","summary":"Preview post","description":"For reviewing a revision. Returns exact copy, measured media, eager frames and changes hash; next publish_post or schedule_post.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post_id":{"type":"string","format":"uuid"},"frames":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":8},"hook_window":{"type":"boolean"},"purpose":{"type":"string","enum":["review","cover"]}},"additionalProperties":false}},"required":["post_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/publish_post":{"post":{"operationId":"publish_post","summary":"Publish post","description":"For approved validated revisions. Returns per-account submission status, or exact payload checks with dry_run; next get_post_status.","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post_id":{"type":"string","format":"uuid"},"revision":{"type":"integer","exclusiveMinimum":0},"account_ids":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":60},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{8,128}$"},"dry_run":{"type":"boolean"},"user_confirmed":{"type":"boolean","description":"Set true only after the user explicitly approved this exact revision in chat."}},"required":["post_id","revision","account_ids","idempotency_key"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/schedule_post":{"post":{"operationId":"schedule_post","summary":"Schedule post","description":"For approved validated future deliveries. Returns scheduler status or dry-run payload checks; next get_post_status.","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post_id":{"type":"string","format":"uuid"},"revision":{"type":"integer","exclusiveMinimum":0},"account_ids":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":60},"scheduled_at":{"type":"string","description":"Local 'YYYY-MM-DDTHH:mm' in timezone, or ISO-8601 with offset."},"timezone":{"type":"string","minLength":1,"maxLength":64,"description":"IANA zone, e.g. Europe/Ljubljana"},"idempotency_key":{"type":"string","pattern":"^[A-Za-z0-9_\\-:.]{8,128}$"},"dry_run":{"type":"boolean"},"user_confirmed":{"type":"boolean"}},"required":["post_id","revision","account_ids","scheduled_at","timezone","idempotency_key"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/get_post_status":{"post":{"operationId":"get_post_status","summary":"Get post status","description":"For submitted posts. Returns per-account receipts and failures; next list_posts or retry reported next_actions.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post_id":{"type":"string","format":"uuid"},"refresh":{"type":"boolean"}},"required":["post_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/list_posts":{"post":{"operationId":"list_posts","summary":"List posts","description":"For queue review. Returns recent post IDs and status; next get_post_status.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","validated","scheduled","publishing","partially_published","published","failed","cancelled"]},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/cancel_scheduled_post":{"post":{"operationId":"cancel_scheduled_post","summary":"Cancel scheduled post","description":"For scheduled deliveries. Returns per-account cancellation results; next get_post_status.","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"post_id":{"type":"string","format":"uuid"},"account_ids":{"type":"array","items":{"type":"string","format":"uuid"}}},"required":["post_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/tools/get_trend_context":{"post":{"operationId":"get_trend_context","summary":"Get trend context","description":"For sourced current evidence only. Returns scoped TikTok trending music chart or unavailable, source URLs and timestamps; next create_draft.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["x","linkedin","instagram","youtube","tiktok","facebook"]},"geography":{"type":"string","maxLength":64},"submit_evidence":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048},"title":{"type":"string","maxLength":300},"summary":{"type":"string","maxLength":1000},"observed_at":{"type":"string","format":"date-time"},"platform":{"type":"string","enum":["x","linkedin","instagram","youtube","tiktok","facebook"]},"geography":{"type":"string","maxLength":64}},"required":["url","observed_at"],"additionalProperties":false},"maxItems":10}},"additionalProperties":false}}}},"responses":{"200":{"description":"Structured result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid arguments"},"401":{"description":"Missing or invalid credential"},"403":{"description":"Credential lacks the required scope"},"422":{"description":"Actionable validation or policy error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"details":{}}}}}}}}},"/api/public/v1/import-files":{"post":{"operationId":"import_gpt_files","summary":"Import files attached in this ChatGPT conversation","description":"Pass the user's uploaded or generated files. ChatGPT supplies the file objects at runtime.","x-openai-isConsequential":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["openaiFileIdRefs"],"properties":{"idempotency_key":{"type":"string","minLength":8,"maxLength":128},"openaiFileIdRefs":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Imported assets","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}}}