{"components":{"parameters":{"Cursor":{"description":"Opaque cursor for the next page of results.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}},"DeliveryStatusFilter":{"description":"Filter to one or more delivery statuses. Provide a comma-separated list of delivery status values.","explode":false,"in":"query","name":"deliveryStatus","required":false,"schema":{"items":{"$ref":"#/components/schemas/DeliveryStatus"},"type":"array"},"style":"form"},"Limit":{"description":"Number of items to return.","in":"query","name":"limit","required":false,"schema":{"default":50,"format":"int32","maximum":100,"minimum":1,"type":"integer"}},"MediaId":{"description":"Media identifier.","in":"path","name":"mediaId","required":true,"schema":{"type":"string"}},"MediaIdsFilter":{"description":"Filter to one or more media items. Provide a comma-separated list of media IDs.","explode":false,"in":"query","name":"mediaId","required":false,"schema":{"items":{"type":"string"},"type":"array"},"style":"form"},"PostId":{"description":"Post identifier.","in":"path","name":"postId","required":true,"schema":{"type":"string"}},"PostIdsFilter":{"description":"Filter to one or more parent posts. Provide a comma-separated list of post IDs.","explode":false,"in":"query","name":"postId","required":false,"schema":{"items":{"type":"string"},"type":"array"},"style":"form"},"ProjectId":{"description":"Project that will own the uploaded media.","in":"query","name":"projectId","required":true,"schema":{"type":"string"}},"ProjectIdFilter":{"description":"Filter to resources that belong to a specific project.","in":"query","name":"projectId","required":false,"schema":{"type":"string"}},"ProjectIdPath":{"description":"Project identifier.","in":"path","name":"projectId","required":true,"schema":{"type":"string"}},"ProjectIdsFilter":{"description":"Filter to one or more projects. Provide a comma-separated list of project IDs.","explode":false,"in":"query","name":"projectId","required":false,"schema":{"items":{"type":"string"},"type":"array"},"style":"form"},"SocialAccountId":{"description":"Connected social account identifier.","in":"path","name":"socialAccountId","required":true,"schema":{"type":"string"}},"SocialAccountIdsFilter":{"description":"Filter to one or more connected social accounts. Provide a comma-separated list of social account IDs.","explode":false,"in":"query","name":"socialAccountId","required":false,"schema":{"items":{"type":"string"},"type":"array"},"style":"form"},"SocialAccountPostId":{"description":"Social account post identifier.","in":"path","name":"socialAccountPostId","required":true,"schema":{"type":"string"}},"SocialPlatformFilter":{"description":"Filter to one or more social platforms. Provide a comma-separated list of platform values.","explode":false,"in":"query","name":"platform","required":false,"schema":{"items":{"$ref":"#/components/schemas/SocialPlatform"},"type":"array"},"style":"form"},"UploadSessionId":{"description":"Media upload session identifier.","in":"path","name":"uploadSessionId","required":true,"schema":{"type":"string"}}},"responses":{"TooManyConcurrentRequests":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConcurrencyLimitErrorResponse"}}},"description":"Too many requests are already in progress for this API key.","headers":{"Retry-After":{"description":"Number of seconds to wait before retrying.","required":true,"schema":{"example":1,"format":"int32","minimum":1,"type":"integer"}}}}},"schemas":{"ConcurrencyLimitErrorCode":{"enum":["TOO_MANY_CONCURRENT_REQUESTS"],"type":"string"},"ConcurrencyLimitErrorResponse":{"additionalProperties":false,"properties":{"code":{"$ref":"#/components/schemas/ConcurrencyLimitErrorCode"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"CreateMediaResponse":{"additionalProperties":false,"properties":{"mediaId":{"description":"Media identifier.","type":"string"}},"required":["mediaId"],"type":"object"},"CreateOAuthAuthorizationRequest":{"additionalProperties":false,"properties":{"platform":{"$ref":"#/components/schemas/SocialPlatform"},"projectId":{"description":"Project identifier.","type":"string"},"redirectUrl":{"description":"Optional URL in your application to return the browser to after OAuth completes.\n\nUse this for multi-user integrations where your users connect their own social\naccounts through your app. WoopSocial appends OAuth result query parameters to\nthis URL so your app can finish the connection flow.\n\nThe redirect does not include tokens or credentials.\n","example":"https://app.example.com/oauth/complete","format":"uri","type":"string"}},"required":["projectId","platform"],"type":"object"},"CreateOAuthAuthorizationResponse":{"additionalProperties":false,"properties":{"url":{"description":"Browser URL that starts the OAuth authorization flow.","format":"uri","type":"string"}},"required":["url"],"type":"object"},"CreatePostErrorCode":{"enum":["INVALID_SOCIAL_ACCOUNT_ID","SOCIAL_ACCOUNT_NOT_CONNECTED","SOCIAL_ACCOUNTS_MUST_BELONG_TO_SAME_PROJECT","DUPLICATE_SOCIAL_ACCOUNT_ID","INVALID_MEDIA_ID","INVALID_PLATFORM_SPECIFIC_DATA","VALIDATION_FAILED","INTERNAL_ERROR"],"type":"string"},"CreatePostErrorResponse":{"additionalProperties":false,"properties":{"code":{"$ref":"#/components/schemas/CreatePostErrorCode"},"conflictingSocialAccountIds":{"description":"Two social account IDs that belong to different projects.\n\nReturned when `code` is\n`SOCIAL_ACCOUNTS_MUST_BELONG_TO_SAME_PROJECT`.\n","items":{"type":"string"},"maxItems":2,"minItems":2,"type":"array"},"message":{"type":"string"},"validationErrors":{"description":"Field-level validation failures. Omitted when not applicable.","items":{"$ref":"#/components/schemas/ValidationError"},"type":"array"}},"required":["code","message"],"type":"object"},"CreatePostRequest":{"additionalProperties":false,"properties":{"autoDeleteMediaAfterPublish":{"default":false,"description":"When true, all media referenced by this post is automatically\ndeleted from the media library after all social account deliveries\nfor the post have published successfully.\n","type":"boolean"},"content":{"$ref":"#/components/schemas/PostContentInput"},"retryPolicy":{"$ref":"#/components/schemas/PostRetryPolicy","description":"Automatic retry policy. Omit to disable automatic retries."},"schedule":{"$ref":"#/components/schemas/PostSchedule"},"socialAccounts":{"description":"Social account targets for this post.\n\nAll referenced social accounts must belong to the same project.\nDuplicate `socialAccountId` values are invalid.\n","items":{"$ref":"#/components/schemas/SocialAccountInput"},"minItems":1,"type":"array"}},"required":["content","schedule","socialAccounts"],"type":"object"},"CreateProjectRequest":{"additionalProperties":false,"properties":{"name":{"description":"Human-readable project name.","type":"string"}},"required":["name"],"type":"object"},"CreateUploadSessionRequest":{"additionalProperties":false,"properties":{"fileSizeInBytes":{"description":"Total size of the file that will be uploaded.","format":"int64","maximum":5368709120,"minimum":1,"type":"integer"},"projectId":{"description":"Project that will own the uploaded media.","type":"string"}},"required":["projectId","fileSizeInBytes"],"type":"object"},"CreateWebhookEndpointRequest":{"properties":{"eventTypes":{"description":"Webhook event types this endpoint should receive.","items":{"$ref":"#/components/schemas/WebhookEventType"},"minItems":1,"type":"array"},"url":{"description":"The HTTPS URL to POST webhook events to.","type":"string"}},"required":["url","eventTypes"],"type":"object"},"DeleteMediaErrorCode":{"enum":["MEDIA_NOT_FOUND","INTERNAL_ERROR"],"type":"string"},"DeleteMediaErrorResponse":{"additionalProperties":false,"properties":{"code":{"$ref":"#/components/schemas/DeleteMediaErrorCode"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"DeletePostErrorCode":{"enum":["POST_NOT_FOUND","POST_NOT_DELETABLE","INTERNAL_ERROR"],"type":"string"},"DeletePostErrorResponse":{"additionalProperties":false,"properties":{"code":{"$ref":"#/components/schemas/DeletePostErrorCode"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"DeleteSocialAccountErrorCode":{"enum":["SOCIAL_ACCOUNT_NOT_FOUND","INTERNAL_ERROR"],"type":"string"},"DeleteSocialAccountErrorResponse":{"additionalProperties":false,"properties":{"code":{"$ref":"#/components/schemas/DeleteSocialAccountErrorCode"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"DeleteSocialAccountPostErrorCode":{"enum":["SOCIAL_ACCOUNT_POST_NOT_FOUND","INTERNAL_ERROR"],"type":"string"},"DeleteSocialAccountPostErrorResponse":{"additionalProperties":false,"properties":{"code":{"$ref":"#/components/schemas/DeleteSocialAccountPostErrorCode"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"DeliveryStatus":{"description":"Delivery lifecycle status for a post.\n\n`NOT_STARTED`: The post exists and is scheduled, but delivery has not started yet.\n`SENDING`: Delivery is currently in progress.\n`PUBLISHED`: Delivery completed successfully.\n`FAILED`: Delivery completed unsuccessfully.\n","enum":["NOT_STARTED","SENDING","PUBLISHED","FAILED"],"type":"string"},"DraftPostSchedule":{"additionalProperties":false,"properties":{"type":{"enum":["DRAFT"],"type":"string"}},"required":["type"],"title":"Draft","type":"object"},"FacebookFields":{"properties":{"link":{"type":"string"},"locationId":{"description":"Facebook place ID to attach to the post.","type":"string"},"postType":{"$ref":"#/components/schemas/FacebookPostType"}},"required":["postType"],"type":"object"},"FacebookInput":{"allOf":[{"$ref":"#/components/schemas/FacebookPlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"},{"$ref":"#/components/schemas/FacebookFields"}],"title":"Facebook"},"FacebookPlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["FACEBOOK"],"type":"string"}]}},"required":["platform"],"type":"object"},"FacebookPost":{"allOf":[{"$ref":"#/components/schemas/FacebookPlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"},{"$ref":"#/components/schemas/FacebookFields"}],"title":"Facebook"},"FacebookPostType":{"enum":["TEXT_ONLY","IMAGE","VIDEO","REEL","STORY"],"type":"string"},"GetPostErrorCode":{"enum":["POST_NOT_FOUND","INTERNAL_ERROR"],"type":"string"},"GetPostErrorResponse":{"additionalProperties":false,"properties":{"code":{"$ref":"#/components/schemas/GetPostErrorCode"},"message":{"type":"string"}},"required":["code","message"],"type":"object"},"HealthResponse":{"additionalProperties":false,"properties":{"message":{"description":"Human-readable message.","examples":["Hello from WoopSocial API"],"type":"string"},"timestamp":{"description":"Current server time in UTC (ISO 8601) with millisecond precision.","examples":["2026-03-28T09:30:26.123Z"],"format":"date-time","type":"string"},"version":{"description":"API version that produced the response.","examples":["v1"],"type":"string"}},"required":["message","timestamp","version"],"type":"object"},"InstagramFields":{"properties":{"cover":{"$ref":"#/components/schemas/PostContentMediaInput","description":"Optional image media reference to use as the cover image for an Instagram Reel.\n\nThis field applies only to `postType=REEL`.\n"},"postType":{"$ref":"#/components/schemas/InstagramPostType"},"trialParams":{"$ref":"#/components/schemas/InstagramTrialParams","description":"Optional Trial Reel settings. When provided, `postType` must be `REEL`.\n\nOmit this field to publish a regular Reel.\n"}},"required":["postType"],"type":"object"},"InstagramInput":{"allOf":[{"$ref":"#/components/schemas/InstagramPlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"},{"$ref":"#/components/schemas/InstagramFields"}],"title":"Instagram"},"InstagramPlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["INSTAGRAM"],"type":"string"}]}},"required":["platform"],"type":"object"},"InstagramPost":{"allOf":[{"$ref":"#/components/schemas/InstagramPlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"},{"$ref":"#/components/schemas/InstagramFields"}],"title":"Instagram"},"InstagramPostType":{"enum":["POST","REEL","STORY"],"type":"string"},"InstagramTrialGraduationStrategy":{"description":"Controls how a Trial Reel graduates to followers. `MANUAL` leaves graduation\nto the user in Instagram. `SS_PERFORMANCE` lets Instagram graduate the Reel\nautomatically based on its performance.\n","enum":["MANUAL","SS_PERFORMANCE"],"type":"string"},"InstagramTrialParams":{"additionalProperties":false,"properties":{"graduationStrategy":{"$ref":"#/components/schemas/InstagramTrialGraduationStrategy"}},"required":["graduationStrategy"],"type":"object"},"LinkedInFields":{"properties":{"link":{"description":"URL to publish as a LinkedIn link preview card.","type":"string"}},"type":"object"},"LinkedInInput":{"allOf":[{"$ref":"#/components/schemas/LinkedInPlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"},{"$ref":"#/components/schemas/LinkedInFields"}],"title":"LinkedIn"},"LinkedInPagesInput":{"allOf":[{"$ref":"#/components/schemas/LinkedInPagesPlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"},{"$ref":"#/components/schemas/LinkedInFields"}],"title":"LinkedIn Pages"},"LinkedInPagesPlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["LINKEDIN_PAGES"],"type":"string"}]}},"required":["platform"],"type":"object"},"LinkedInPagesPost":{"allOf":[{"$ref":"#/components/schemas/LinkedInPagesPlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"},{"$ref":"#/components/schemas/LinkedInFields"}],"title":"LinkedIn Pages"},"LinkedInPlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["LINKEDIN"],"type":"string"}]}},"required":["platform"],"type":"object"},"LinkedInPost":{"allOf":[{"$ref":"#/components/schemas/LinkedInPlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"},{"$ref":"#/components/schemas/LinkedInFields"}],"title":"LinkedIn"},"ListMediaResponse":{"additionalProperties":false,"properties":{"media":{"items":{"$ref":"#/components/schemas/Media"},"type":"array"},"nextCursor":{"description":"Opaque cursor for the next page of results. Omitted when there are no more results.","type":"string"}},"required":["media"],"type":"object"},"ListSocialAccountPostsResponse":{"additionalProperties":false,"properties":{"nextCursor":{"description":"Opaque cursor for the next page of results. Omitted when there are no more results.","type":"string"},"socialAccountPosts":{"items":{"$ref":"#/components/schemas/SocialAccountPost"},"type":"array"}},"required":["socialAccountPosts"],"type":"object"},"Media":{"additionalProperties":false,"properties":{"createdAt":{"description":"UTC time when the media item was created.","format":"date-time","type":"string"},"id":{"description":"Media identifier.","type":"string"},"mediaType":{"$ref":"#/components/schemas/MediaType"},"projectId":{"description":"Project identifier.","type":"string"},"url":{"description":"Canonical media URL.","format":"uri","type":"string"}},"required":["id","projectId","mediaType","url","createdAt"],"type":"object"},"MediaLibraryPostContentMedia":{"additionalProperties":false,"properties":{"mediaId":{"description":"Media identifier from the media library.","type":"string"},"mediaType":{"$ref":"#/components/schemas/MediaType"},"thumbnailUrl":{"description":"Thumbnail or preview URL for the media item.","format":"uri","type":"string"},"type":{"enum":["MEDIA_LIBRARY"],"type":"string"},"url":{"description":"Canonical media URL.","format":"uri","type":"string"}},"required":["type","mediaId","mediaType","url","thumbnailUrl"],"title":"Media Library Post Content Media","type":"object"},"MediaLibraryPostContentMediaInput":{"additionalProperties":false,"properties":{"mediaId":{"description":"Media identifier create by calling [`POST /media/upload-sessions`](/api-reference/media/start-media-upload-session) or [`POST /media`](/api-reference/media/upload-media).","type":"string","x-woopsocial-mcp-description":"Media library item identifier, returned by `media_uploads_complete_session` or listed by `media_list`."},"type":{"enum":["MEDIA_LIBRARY"],"type":"string"}},"required":["type","mediaId"],"title":"Media Library Input","type":"object"},"MediaType":{"enum":["IMAGE","VIDEO"],"type":"string"},"OAuthCallbackErrorCode":{"description":"Error code appended to `redirectUrl` as the `error` query parameter when\nOAuth fails after WoopSocial has recovered the callback state.\n","enum":["access_denied","provider_error","missing_code","oauth_client_unavailable","token_exchange_failed","no_tokens","account_persistence_failed","grant_persistence_failed","connection_session_persistence_failed"],"type":"string"},"PinterestBoardOption":{"additionalProperties":false,"properties":{"id":{"description":"Pinterest board identifier.","type":"string"},"name":{"description":"Human-readable Pinterest board name.","type":"string"}},"required":["id","name"],"type":"object"},"PinterestFields":{"properties":{"link":{"description":"Destination URL to attach to the Pin.","maxLength":2048,"type":"string"},"pinterestBoardId":{"description":"Identifier of the board to pin to.","type":"string"},"title":{"type":"string"}},"required":["pinterestBoardId"],"type":"object"},"PinterestInput":{"allOf":[{"$ref":"#/components/schemas/PinterestPlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"},{"$ref":"#/components/schemas/PinterestFields"}],"title":"Pinterest"},"PinterestPlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["PINTEREST"],"type":"string"}]}},"required":["platform"],"type":"object"},"PinterestPost":{"allOf":[{"$ref":"#/components/schemas/PinterestPlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"},{"$ref":"#/components/schemas/PinterestFields"}],"title":"Pinterest"},"PinterestSocialAccountPlatformSpecificInputs":{"additionalProperties":false,"properties":{"boards":{"description":"Available Pinterest boards for this account.\n\nEach `id` value can be sent as `pinterestBoardId` when creating a\npost for a Pinterest social account target.\n","items":{"$ref":"#/components/schemas/PinterestBoardOption"},"type":"array"},"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["PINTEREST"],"type":"string"}]}},"required":["platform","boards"],"title":"Pinterest Social Account Platform Specific Inputs","type":"object"},"Post":{"additionalProperties":false,"properties":{"autoDeleteMediaAfterPublish":{"description":"Whether media auto-delete-after-publish is enabled for this post.","type":"boolean"},"content":{"$ref":"#/components/schemas/PostContent"},"createdAt":{"description":"UTC time when the post was created.","format":"date-time","type":"string"},"id":{"description":"Post identifier.","type":"string"},"projectId":{"description":"Project identifier that the selected social accounts belong to.","type":"string"},"retryPolicy":{"$ref":"#/components/schemas/PostRetryPolicy"},"schedule":{"$ref":"#/components/schemas/PostSchedule"},"socialAccountPosts":{"description":"Platform-specific post instances.","items":{"$ref":"#/components/schemas/SocialAccountPost"},"minItems":1,"type":"array"},"updatedAt":{"description":"UTC time when the post was last updated.","format":"date-time","type":"string"}},"required":["id","projectId","content","schedule","autoDeleteMediaAfterPublish","socialAccountPosts","createdAt","updatedAt"],"type":"object"},"PostAnalytics":{"additionalProperties":false,"description":"Latest stored lifetime metrics for this social account post. Each supported\nmetric contains its latest snapshot, or an empty array if no observation\nexists. Unsupported metrics are omitted; unsupported platforms and post\ntypes return an empty object. Zero is a recorded value, not missing data.\n\nMetrics are collected asynchronously and can have different snapshot dates.\nReading posts does not refresh analytics. Arrays allow future snapshot\nranges without changing the response shape; date-range queries are not\ncurrently supported.\n","properties":{"clicks":{"$ref":"#/components/schemas/PostAnalyticsSnapshots"},"comments":{"$ref":"#/components/schemas/PostAnalyticsSnapshots"},"engagementRate":{"$ref":"#/components/schemas/PostAnalyticsSnapshots","description":"LinkedIn Pages provider-reported engagement ratio; 0.03 means 3 percent."},"impressions":{"$ref":"#/components/schemas/PostAnalyticsSnapshots"},"likes":{"$ref":"#/components/schemas/PostAnalyticsSnapshots"},"reactions":{"$ref":"#/components/schemas/PostAnalyticsSnapshots"},"saves":{"$ref":"#/components/schemas/PostAnalyticsSnapshots"},"shares":{"$ref":"#/components/schemas/PostAnalyticsSnapshots"},"uniqueImpressions":{"$ref":"#/components/schemas/PostAnalyticsSnapshots"},"views":{"$ref":"#/components/schemas/PostAnalyticsSnapshots"}},"type":"object"},"PostAnalyticsSnapshot":{"additionalProperties":false,"properties":{"collectedAt":{"description":"UTC collection timestamp for this observation.","format":"date-time","type":"string"},"date":{"description":"UTC date of the snapshot, not the day the engagement occurred.","format":"date","type":"string"},"value":{"description":"Observed lifetime count, or a ratio for engagementRate.","format":"double","type":"number"}},"required":["date","collectedAt","value"],"type":"object"},"PostAnalyticsSnapshots":{"items":{"$ref":"#/components/schemas/PostAnalyticsSnapshot"},"type":"array"},"PostContent":{"description":"Post content expressed as thread items.\n\nThe array exists for future thread support. Currently exactly one item\nis returned.\n","items":{"$ref":"#/components/schemas/PostContentItem"},"maxItems":1,"minItems":1,"type":"array"},"PostContentInput":{"description":"Post content expressed as thread items.\n\nThe array exists for future thread support. Currently exactly one item\nis supported.\n","items":{"$ref":"#/components/schemas/PostContentItemInput"},"maxItems":1,"minItems":1,"type":"array"},"PostContentItem":{"additionalProperties":false,"minProperties":1,"properties":{"media":{"items":{"$ref":"#/components/schemas/PostContentMedia"},"type":"array"},"text":{"description":"Text content for this thread item.","type":"string"}},"type":"object"},"PostContentItemInput":{"additionalProperties":false,"minProperties":1,"properties":{"media":{"items":{"$ref":"#/components/schemas/PostContentMediaInput"},"type":"array"},"text":{"description":"Text content for this thread item.","type":"string"}},"type":"object"},"PostContentMedia":{"description":"Resolved content media.\n","discriminator":{"mapping":{"MEDIA_LIBRARY":"#/components/schemas/MediaLibraryPostContentMedia"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/MediaLibraryPostContentMedia"}]},"PostContentMediaInput":{"description":"Content media reference.\n","discriminator":{"mapping":{"MEDIA_LIBRARY":"#/components/schemas/MediaLibraryPostContentMediaInput"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/MediaLibraryPostContentMediaInput"}]},"PostRetryPolicy":{"additionalProperties":false,"description":"Automatically creates a scheduled retry post for each failed target.\nSuccessful targets are never copied. Known failures requiring user\nintervention, such as insufficient credits or disconnected accounts,\nare not automatically retried. If the platform published a post but\nits response was lost, retrying may produce a duplicate.\n","properties":{"delaySeconds":{"description":"Minimum wait after each failure before the retry is published.","maximum":86400,"minimum":60,"type":"integer"},"maxRetries":{"description":"Maximum automatic retries per target, excluding the original attempt.","maximum":5,"minimum":1,"type":"integer"}},"required":["maxRetries","delaySeconds"],"type":"object"},"PostSchedule":{"description":"When the post should be published.","discriminator":{"mapping":{"DRAFT":"#/components/schemas/DraftPostSchedule","PUBLISH_NOW":"#/components/schemas/PublishNowPostSchedule","SCHEDULE_FOR_LATER":"#/components/schemas/ScheduleForLaterPostSchedule"},"propertyName":"type"},"oneOf":[{"$ref":"#/components/schemas/DraftPostSchedule"},{"$ref":"#/components/schemas/PublishNowPostSchedule"},{"$ref":"#/components/schemas/ScheduleForLaterPostSchedule"}]},"Project":{"additionalProperties":false,"properties":{"id":{"description":"Project identifier.","type":"string"},"name":{"description":"Human-readable project name.","type":"string"}},"required":["id","name"],"type":"object"},"PublishNowPostSchedule":{"additionalProperties":false,"properties":{"type":{"enum":["PUBLISH_NOW"],"type":"string"}},"required":["type"],"title":"Publish Now","type":"object"},"ScheduleForLaterPostSchedule":{"additionalProperties":false,"properties":{"scheduledFor":{"description":"UTC time (ISO 8601) when the post should be published. The value must be in the future.\n","format":"date-time","type":"string"},"type":{"enum":["SCHEDULE_FOR_LATER"],"type":"string"}},"required":["type","scheduledFor"],"title":"Schedule For Later","type":"object"},"SocialAccount":{"additionalProperties":false,"properties":{"externalAccountId":{"description":"Platform-specific account, page, profile, or channel identifier.","type":"string"},"id":{"description":"Social account identifier.","type":"string"},"imageUrl":{"description":"Profile image URL for the connected account.","format":"uri","type":"string"},"platform":{"$ref":"#/components/schemas/SocialPlatform","description":"Social platform for the connected account."},"status":{"$ref":"#/components/schemas/SocialAccountStatus","description":"Connection status of the account."},"username":{"description":"Display name or username for the connected account.","type":"string"}},"required":["id","externalAccountId","platform","username","imageUrl","status"],"type":"object"},"SocialAccountInput":{"discriminator":{"mapping":{"FACEBOOK":"#/components/schemas/FacebookInput","INSTAGRAM":"#/components/schemas/InstagramInput","LINKEDIN":"#/components/schemas/LinkedInInput","LINKEDIN_PAGES":"#/components/schemas/LinkedInPagesInput","PINTEREST":"#/components/schemas/PinterestInput","THREADS":"#/components/schemas/ThreadsInput","TIKTOK":"#/components/schemas/TikTokInput","WOOPTEST":"#/components/schemas/WoopTestInput","X":"#/components/schemas/XInput","YOUTUBE":"#/components/schemas/YouTubeInput"},"propertyName":"platform"},"oneOf":[{"$ref":"#/components/schemas/FacebookInput"},{"$ref":"#/components/schemas/InstagramInput"},{"$ref":"#/components/schemas/LinkedInInput"},{"$ref":"#/components/schemas/LinkedInPagesInput"},{"$ref":"#/components/schemas/PinterestInput"},{"$ref":"#/components/schemas/ThreadsInput"},{"$ref":"#/components/schemas/TikTokInput"},{"$ref":"#/components/schemas/WoopTestInput"},{"$ref":"#/components/schemas/XInput"},{"$ref":"#/components/schemas/YouTubeInput"}]},"SocialAccountInputBase":{"properties":{"contentOverride":{"$ref":"#/components/schemas/PostContentInput"},"socialAccountId":{"description":"Connected social account identifier.","type":"string"}},"required":["socialAccountId"],"type":"object"},"SocialAccountPlatformInputs":{"additionalProperties":false,"properties":{"platformSpecificInputs":{"$ref":"#/components/schemas/SocialAccountPlatformSpecificInputs"},"socialAccountId":{"description":"Connected social account identifier.","type":"string"}},"required":["socialAccountId","platformSpecificInputs"],"type":"object"},"SocialAccountPlatformSpecificInputs":{"discriminator":{"mapping":{"PINTEREST":"#/components/schemas/PinterestSocialAccountPlatformSpecificInputs","TIKTOK":"#/components/schemas/TikTokSocialAccountPlatformSpecificInputs"},"propertyName":"platform"},"oneOf":[{"$ref":"#/components/schemas/PinterestSocialAccountPlatformSpecificInputs"},{"$ref":"#/components/schemas/TikTokSocialAccountPlatformSpecificInputs"}]},"SocialAccountPost":{"discriminator":{"mapping":{"FACEBOOK":"#/components/schemas/FacebookPost","INSTAGRAM":"#/components/schemas/InstagramPost","LINKEDIN":"#/components/schemas/LinkedInPost","LINKEDIN_PAGES":"#/components/schemas/LinkedInPagesPost","PINTEREST":"#/components/schemas/PinterestPost","THREADS":"#/components/schemas/ThreadsPost","TIKTOK":"#/components/schemas/TikTokPost","WOOPTEST":"#/components/schemas/WoopTestPost","X":"#/components/schemas/XPost","YOUTUBE":"#/components/schemas/YouTubePost"},"propertyName":"platform"},"oneOf":[{"$ref":"#/components/schemas/PinterestPost"},{"$ref":"#/components/schemas/InstagramPost"},{"$ref":"#/components/schemas/FacebookPost"},{"$ref":"#/components/schemas/ThreadsPost"},{"$ref":"#/components/schemas/TikTokPost"},{"$ref":"#/components/schemas/YouTubePost"},{"$ref":"#/components/schemas/XPost"},{"$ref":"#/components/schemas/LinkedInPost"},{"$ref":"#/components/schemas/LinkedInPagesPost"},{"$ref":"#/components/schemas/WoopTestPost"}]},"SocialAccountPostBase":{"additionalProperties":false,"properties":{"analytics":{"$ref":"#/components/schemas/PostAnalytics"},"content":{"$ref":"#/components/schemas/PostContent","description":"Content for this social account post."},"createdAt":{"description":"UTC time when the social account post was created.","format":"date-time","type":"string"},"deliveryCompletedAt":{"description":"UTC time when the latest delivery attempt for this social account post completed both for successful (`PUBLISHED`) and unsuccessful (`FAILED`) terminal `deliveryStatus` values.","format":"date-time","type":"string"},"deliveryStatus":{"$ref":"#/components/schemas/DeliveryStatus"},"errorMessage":{"type":"string"},"externalPostId":{"type":"string"},"externalPostUrl":{"format":"uri","type":"string"},"postId":{"description":"Parent post identifier.","type":"string"},"projectId":{"description":"Project identifier.","type":"string"},"schedule":{"$ref":"#/components/schemas/PostSchedule","description":"Schedule for this social account post."},"socialAccountId":{"description":"Connected social account identifier.","type":"string"},"socialAccountPostId":{"description":"Social account post identifier.","type":"string"},"updatedAt":{"description":"UTC time when the social account post was last updated.","format":"date-time","type":"string"}},"required":["socialAccountPostId","postId","projectId","socialAccountId","deliveryStatus","content","schedule","createdAt","updatedAt","analytics"],"type":"object"},"SocialAccountStatus":{"enum":["CONNECTED","DISCONNECTED"],"type":"string"},"SocialPlatform":{"description":"Identifies which social media platform this data structure targets.\n","enum":["PINTEREST","LINKEDIN","LINKEDIN_PAGES","INSTAGRAM","FACEBOOK","THREADS","TIKTOK","X","YOUTUBE","WOOPTEST"],"type":"string"},"ThreadsInput":{"allOf":[{"$ref":"#/components/schemas/ThreadsPlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"}],"title":"Threads"},"ThreadsPlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["THREADS"],"type":"string"}]}},"required":["platform"],"type":"object"},"ThreadsPost":{"allOf":[{"$ref":"#/components/schemas/ThreadsPlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"}],"title":"Threads"},"TikTokFields":{"properties":{"allowComment":{"description":"Whether comments should be allowed for this TikTok post.","type":"boolean"},"allowDuet":{"description":"Whether duets should be allowed for this TikTok post.\n\nThis field applies to `postType=VIDEO`.\n\nWhen `postType=PHOTO`, this field is required by the API contract\nbut is not used by TikTok.\n","type":"boolean"},"allowStitch":{"description":"Whether stitches should be allowed for this TikTok post.\n\nThis field applies to `postType=VIDEO`.\n\nWhen `postType=PHOTO`, this field is required by the API contract\nbut is not used by TikTok.\n","type":"boolean"},"autoAddMusic":{"description":"Whether TikTok should automatically add music to this post.\n\nThis field applies to `postType=PHOTO`.\n\nWhen `postType=VIDEO`, this field is required by the API contract\nbut is not used by TikTok.\n","type":"boolean"},"cover":{"$ref":"#/components/schemas/PostContentMediaInput","description":"Optional image media reference to use as a custom cover for\n`postType=VIDEO`. WoopSocial stitches the image as a single\nframe at the beginning of the video before sending it to TikTok.\n"},"isAiGeneratedContent":{"default":false,"description":"Whether the TikTok post contains AI-generated content. This field applies to video posts.\n","type":"boolean"},"isBrandedContent":{"description":"Whether the post should be disclosed as branded content on TikTok.","type":"boolean"},"isYourBrand":{"description":"Whether the post should be disclosed as \"Your brand\" content on TikTok.","type":"boolean"},"postMode":{"$ref":"#/components/schemas/TikTokPostMode","default":"DIRECT_POST","description":"TikTok posting mode.\n\nDefaults to `DIRECT_POST` when omitted.\n\n`DIRECT_POST` publishes directly to TikTok.\n\n`MEDIA_UPLOAD` uploads the media to TikTok so the creator can\nfinish and publish it in TikTok. Users will receive an inbox notification.\n\nFields not used by the selected mode may be ignored by TikTok.\n"},"postType":{"$ref":"#/components/schemas/TikTokPostType"},"privacyLevel":{"$ref":"#/components/schemas/TikTokPrivacyLevel","description":"Required when `postMode=DIRECT_POST`. Not used for `MEDIA_UPLOAD`."}},"required":["postType","allowComment","allowDuet","allowStitch","isYourBrand","isBrandedContent","autoAddMusic"],"type":"object"},"TikTokInput":{"allOf":[{"$ref":"#/components/schemas/TikTokPlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"},{"$ref":"#/components/schemas/TikTokFields"}],"title":"TikTok"},"TikTokPlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["TIKTOK"],"type":"string"}]}},"required":["platform"],"type":"object"},"TikTokPost":{"allOf":[{"$ref":"#/components/schemas/TikTokPlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"},{"$ref":"#/components/schemas/TikTokFields"}],"title":"TikTok"},"TikTokPostMode":{"enum":["DIRECT_POST","MEDIA_UPLOAD"],"type":"string"},"TikTokPostType":{"enum":["VIDEO","PHOTO"],"type":"string"},"TikTokPrivacyLevel":{"enum":["PUBLIC_TO_EVERYONE","SELF_ONLY","MUTUAL_FOLLOW_FRIENDS","FOLLOWER_OF_CREATOR"],"type":"string"},"TikTokSocialAccountPlatformSpecificInputs":{"additionalProperties":false,"properties":{"commentAvailable":{"description":"Whether comments can currently be allowed for this TikTok account.","type":"boolean"},"duetAvailable":{"description":"Whether duets can currently be allowed for video posts on this TikTok account.","type":"boolean"},"maxVideoPostDurationSec":{"description":"Maximum TikTok video duration currently allowed for this account.","format":"int32","minimum":1,"type":"integer"},"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["TIKTOK"],"type":"string"}]},"privacyLevelOptions":{"description":"Privacy values currently allowed for this TikTok account.\n\nEach value can be sent as `privacyLevel` when creating a post for a\nTikTok social account target.\n","items":{"$ref":"#/components/schemas/TikTokPrivacyLevel"},"type":"array"},"stitchAvailable":{"description":"Whether stitches can currently be allowed for video posts on this TikTok account.","type":"boolean"}},"required":["platform","privacyLevelOptions","commentAvailable","duetAvailable","stitchAvailable","maxVideoPostDurationSec"],"title":"TikTok Social Account Platform Specific Inputs","type":"object"},"UploadSession":{"additionalProperties":false,"properties":{"expiresAt":{"description":"Time when the presigned part upload URLs expire.","format":"date-time","type":"string"},"partCount":{"description":"Number of parts that must be uploaded before completion.","format":"int32","type":"integer"},"partSizeInBytes":{"description":"Maximum chunk size to use when slicing the file into parts.\n\nFor uploads with more than one part, every part except the last must\nbe exactly this size. The last part may be smaller. For a single-part\nupload, the only part may be smaller than this size.\n","format":"int64","type":"integer"},"parts":{"description":"Presigned upload targets, in part-number order.","items":{"$ref":"#/components/schemas/UploadSessionPart","description":"Presigned URL and part number for uploading one chunk of the file."},"type":"array"},"uploadSessionId":{"description":"Media upload session identifier.","type":"string"}},"required":["uploadSessionId","partSizeInBytes","partCount","expiresAt","parts"],"type":"object"},"UploadSessionAbortedStatus":{"additionalProperties":false,"properties":{"status":{"enum":["ABORTED"],"type":"string"},"uploadSessionId":{"description":"Media upload session identifier.","type":"string"}},"required":["uploadSessionId","status"],"title":"Upload Session Aborted Status","type":"object"},"UploadSessionFailedStatus":{"additionalProperties":false,"properties":{"failureCode":{"description":"Machine-readable failure code for the upload session.","type":"string"},"failureMessage":{"description":"Human-readable summary of why the upload session failed.","type":"string"},"status":{"enum":["FAILED"],"type":"string"},"uploadSessionId":{"description":"Media upload session identifier.","type":"string"}},"required":["uploadSessionId","status","failureCode","failureMessage"],"title":"Upload Session Failed Status","type":"object"},"UploadSessionInitiatedStatus":{"additionalProperties":false,"properties":{"status":{"enum":["INITIATED"],"type":"string"},"uploadSessionId":{"description":"Media upload session identifier.","type":"string"}},"required":["uploadSessionId","status"],"title":"Upload Session Initiated Status","type":"object"},"UploadSessionPart":{"additionalProperties":false,"properties":{"partNumber":{"description":"1-based part number to upload to this URL.","format":"int32","minimum":1,"type":"integer"},"uploadUrl":{"description":"Presigned URL that accepts the bytes for `partNumber`.","format":"uri","type":"string"}},"required":["partNumber","uploadUrl"],"type":"object"},"UploadSessionReadyStatus":{"additionalProperties":false,"properties":{"mediaId":{"description":"Media identifier created by the completed upload.","type":"string"},"status":{"enum":["READY"],"type":"string"},"uploadSessionId":{"description":"Media upload session identifier.","type":"string"}},"required":["uploadSessionId","status","mediaId"],"title":"Upload Session Ready Status","type":"object"},"UploadSessionStatus":{"discriminator":{"mapping":{"ABORTED":"#/components/schemas/UploadSessionAbortedStatus","FAILED":"#/components/schemas/UploadSessionFailedStatus","INITIATED":"#/components/schemas/UploadSessionInitiatedStatus","READY":"#/components/schemas/UploadSessionReadyStatus","UPLOADED":"#/components/schemas/UploadSessionUploadedStatus"},"propertyName":"status"},"oneOf":[{"$ref":"#/components/schemas/UploadSessionInitiatedStatus"},{"$ref":"#/components/schemas/UploadSessionUploadedStatus"},{"$ref":"#/components/schemas/UploadSessionReadyStatus"},{"$ref":"#/components/schemas/UploadSessionFailedStatus"},{"$ref":"#/components/schemas/UploadSessionAbortedStatus"}]},"UploadSessionUploadedStatus":{"additionalProperties":false,"properties":{"status":{"enum":["UPLOADED"],"type":"string"},"uploadSessionId":{"description":"Media upload session identifier.","type":"string"}},"required":["uploadSessionId","status"],"title":"Upload Session Uploaded Status","type":"object"},"ValidatePostResponse":{"additionalProperties":false,"properties":{"errors":{"description":"Blocking validation errors. Empty when the request is valid.","items":{"$ref":"#/components/schemas/ValidationError"},"type":"array"},"isValid":{"description":"Whether the request passed validation.","type":"boolean"},"warnings":{"description":"Non-blocking validation warnings. Empty when there are no warnings.","items":{"$ref":"#/components/schemas/ValidationWarning"},"type":"array"}},"required":["isValid","errors","warnings"],"type":"object"},"ValidationError":{"additionalProperties":false,"properties":{"field":{"$ref":"#/components/schemas/ValidationField","description":"Machine-readable validation field identifier.\n"},"message":{"type":"string"},"path":{"description":"JSON path to the invalid input.","type":"string"}},"required":["path","message"],"type":"object"},"ValidationField":{"enum":["DESCRIPTION","MEDIA","LINK","PINTEREST_BOARD","CONTENT","TITLE","FIRST_COMMENT","INSTAGRAM_TRIAL_PARAMS","TIKTOK_POST_MODE","TIKTOK_PRIVACY_LEVEL","TIKTOK_CONTENT_DISCLOSURE","YOUTUBE_PRIVACY","YOUTUBE_CATEGORY","YOUTUBE_TAGS","SCHEDULE"],"type":"string"},"ValidationWarning":{"additionalProperties":false,"properties":{"field":{"$ref":"#/components/schemas/ValidationField","description":"Machine-readable validation field identifier.\n"},"message":{"type":"string"},"path":{"description":"JSON path related to the warning.","type":"string"}},"required":["path","message"],"type":"object"},"WebhookEndpoint":{"properties":{"createdAt":{"format":"date-time","type":"string"},"eventTypes":{"items":{"$ref":"#/components/schemas/WebhookEventType"},"type":"array"},"id":{"description":"Webhook endpoint identifier (int64 as string).","type":"string"},"signingSecret":{"description":"Base64-encoded 32-byte signing secret. Returned once on creation only.","type":"string"},"url":{"type":"string"}},"required":["id","url","eventTypes","createdAt"],"type":"object"},"WebhookEvent":{"description":"Payload delivered to registered webhook URLs.","properties":{"errorMessage":{"description":"Error detail. Present on failed events.","type":"string"},"eventType":{"$ref":"#/components/schemas/WebhookEventType"},"externalPostId":{"description":"Platform's own post identifier. Present on succeeded events.","type":"string"},"externalPostUrl":{"description":"Public URL of the post on the platform. Present on succeeded events.","type":"string"},"occurredAt":{"format":"date-time","type":"string"},"platform":{"$ref":"#/components/schemas/SocialPlatform"},"postId":{"type":"string"},"socialAccountId":{"type":"string"},"socialAccountPostId":{"type":"string"}},"required":["eventType","occurredAt","postId","socialAccountPostId","socialAccountId","platform"],"type":"object"},"WebhookEventType":{"enum":["socialAccountPost.delivery.published","socialAccountPost.delivery.failed"],"type":"string"},"WoopTestFields":{"properties":{"shouldSucceed":{"default":true,"description":"Whether the simulated delivery should succeed or fail.\n\nDefaults to `true`. Set to `false` to simulate a delivery failure.\n","type":"boolean"}},"type":"object"},"WoopTestInput":{"allOf":[{"$ref":"#/components/schemas/WoopTestPlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"},{"$ref":"#/components/schemas/WoopTestFields"}],"description":"WoopTest is a sandbox platform for testing and debugging. Posts targeting `WOOPTEST` go through the full scheduling pipeline but are never published to any real social network.","title":"WoopTest"},"WoopTestPlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["WOOPTEST"],"type":"string"}]}},"required":["platform"],"type":"object"},"WoopTestPost":{"allOf":[{"$ref":"#/components/schemas/WoopTestPlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"},{"$ref":"#/components/schemas/WoopTestFields"}],"title":"WoopTest"},"XInput":{"allOf":[{"$ref":"#/components/schemas/XPlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"}],"title":"X"},"XPlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["X"],"type":"string"}]}},"required":["platform"],"type":"object"},"XPost":{"allOf":[{"$ref":"#/components/schemas/XPlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"}],"title":"X"},"YouTubeFields":{"properties":{"category":{"type":"string"},"madeForKids":{"type":"boolean"},"privacy":{"$ref":"#/components/schemas/YouTubePrivacy"},"tags":{"items":{"type":"string"},"type":"array"},"title":{"type":"string"}},"required":["title","privacy"],"type":"object"},"YouTubeInput":{"allOf":[{"$ref":"#/components/schemas/YouTubePlatform"},{"$ref":"#/components/schemas/SocialAccountInputBase"},{"$ref":"#/components/schemas/YouTubeFields"}],"title":"YouTube"},"YouTubePlatform":{"properties":{"platform":{"allOf":[{"$ref":"#/components/schemas/SocialPlatform"},{"enum":["YOUTUBE"],"type":"string"}]}},"required":["platform"],"type":"object"},"YouTubePost":{"allOf":[{"$ref":"#/components/schemas/YouTubePlatform"},{"$ref":"#/components/schemas/SocialAccountPostBase"},{"$ref":"#/components/schemas/YouTubeFields"}],"title":"YouTube"},"YouTubePrivacy":{"enum":["public","private","unlisted"],"type":"string"}},"securitySchemes":{"ApiKey":{"bearerFormat":"API key","scheme":"bearer","type":"http"}}},"info":{"description":"This is the public-facing OpenAPI contract for WoopSocial. It supports scheduling posts for various social media platforms such as Facebook, Instagram, LinkedIn, LinkedIn Pages, Pinterest, Threads, TikTok, X (formerly Twitter) and YouTube.\n","summary":"API for WoopSocial integrations.","title":"WoopSocial API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/health":{"get":{"description":"Returns a minimal response proving the WoopSocial API is reachable.","operationId":"getHealth","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}},"description":"Successful response."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Health check","tags":["Health"],"x-woopsocial-mcp-tool-name":"health_get"}},"/media":{"get":{"description":"Returns media library items that belong to the API key's organization.\n\nWhen `projectId` is provided, only media in that project is returned.\n","operationId":"listMedia","parameters":[{"$ref":"#/components/parameters/ProjectIdFilter"},{"$ref":"#/components/parameters/MediaIdsFilter"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMediaResponse"}}},"description":"Media items."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"List media","tags":["Media"],"x-woopsocial-mcp-tool-name":"media_list"},"post":{"description":"Uploads a media file in a single request and creates a media item.\n\nThe server determines the media MIME type from the uploaded file.\nSend a `multipart/form-data` request with the file in the `file` field.\n\nExample:\n\n```bash\ncurl -X POST 'https://api.woopsocial.com/v1/media?projectId=YOUR_PROJECT_ID' \\\n  -H 'Authorization: Bearer YOUR_API_KEY' \\\n  -F 'file=@/path/to/image.jpg'\n```\n\nUse this endpoint for straightforward uploads up to 100 MB.\n\nFor larger files, or when you need presigned part URLs, use the upload\nsession flow under `/media/upload-sessions`.\n","operationId":"createMedia","parameters":[{"$ref":"#/components/parameters/ProjectId"}],"requestBody":{"content":{"multipart/form-data":{"schema":{"description":"Media file to upload. Maximum size is 100 MB.\n","properties":{"file":{"format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMediaResponse"}}},"description":"Media uploaded."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Upload media","tags":["Media"],"x-woopsocial-mcp-exclude":true}},"/media/upload-sessions":{"post":{"description":"This endpoint can be used to upload both smaller and larger files (up to 5GB) in a chunked manner.\nCalling this creates an upload session and returns presigned URLs for uploading the file in parts.\n\nUpload the file in `partCount` parts, using the matching\n`parts[n].uploadUrl` for each part number.\n\nEvery part except the last must be exactly `partSizeInBytes` bytes. The\nlast part may be smaller. After all parts have been uploaded, call\n`/media/upload-sessions/{uploadSessionId}/complete` to finalize the upload\nand create the media item.\n","operationId":"createUploadSession","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUploadSessionRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadSession"}}},"description":"Upload session created."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Start media upload session","tags":["Media"],"x-woopsocial-mcp-description":"This endpoint can be used to upload both smaller and larger files (up to 5GB) in a chunked manner.\nCalling this creates an upload session and returns presigned URLs for uploading the file in parts.\n\nUpload the file in `partCount` parts by sending an HTTP PUT with the raw bytes of each part to the matching\n`parts[n].uploadUrl`. Every part except the last must be exactly `partSizeInBytes` bytes. The last part may be smaller.\nAfter all parts have been uploaded, call `media_uploads_complete_session` to finalize the upload and create the media item.\nThe presigned URLs expire at `expiresAt`.\n\nUploading the parts requires making HTTP requests yourself (for example with curl in a shell or code execution tool).\nIf you cannot make HTTP requests, tell the user the upload is not possible from this client.\n\nThe presigned URLs are hosted on Cloudflare R2 (`\u003caccount-id\u003e.r2.cloudflarestorage.com`).\nIf a network allowlist blocks the PUT, ask the user to allow `*.r2.cloudflarestorage.com`:\n- claude.ai / Claude Desktop chat: Settings \u003e Capabilities, in the code execution network settings.\n- Claude Code: the sandbox's allowed network domains in settings.json.\n","x-woopsocial-mcp-tool-name":"media_uploads_create_session"}},"/media/upload-sessions/{uploadSessionId}":{"get":{"operationId":"getUploadSession","parameters":[{"$ref":"#/components/parameters/UploadSessionId"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadSessionStatus"}}},"description":"Current upload status."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Get media upload session status","tags":["Media"],"x-woopsocial-mcp-tool-name":"media_uploads_get_session"}},"/media/upload-sessions/{uploadSessionId}/complete":{"post":{"description":"Call this to finalize the upload started by calling [`/media/upload-sessions`](/api-reference/media/start-media-upload-session).","operationId":"completeUploadSession","parameters":[{"$ref":"#/components/parameters/UploadSessionId"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadSessionStatus"}}},"description":"Upload completion accepted."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Complete media upload session","tags":["Media"],"x-woopsocial-mcp-description":"Completes the upload session started by `media_uploads_create_session`.","x-woopsocial-mcp-tool-name":"media_uploads_complete_session"}},"/media/{mediaId}":{"delete":{"description":"Deletes one media item by ID.\n","operationId":"deleteMedia","parameters":[{"$ref":"#/components/parameters/MediaId"}],"responses":{"204":{"description":"Media deleted."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteMediaErrorResponse"}}},"description":"Media not found."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteMediaErrorResponse"}}},"description":"Internal server error."}},"security":[{"ApiKey":[]}],"summary":"Delete media","tags":["Media"],"x-woopsocial-mcp-tool-name":"media_delete"}},"/posts":{"post":{"description":"Creates a (parent) post with one or more social account (child) posts.\n\nAll referenced social accounts must belong to the same project.\n\nThe request is validated atomically. If any social account fails validation, the post is not created.\n","operationId":"createPost","requestBody":{"content":{"application/json":{"examples":{"Facebook":{"description":"Create a Facebook image post and publish it immediately.","summary":"Facebook post","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"platform":"FACEBOOK","postType":"IMAGE","socialAccountId":"\u003cstring\u003e"}]}},"Instagram":{"description":"Create an Instagram feed post and publish it immediately.","summary":"Instagram post","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"platform":"INSTAGRAM","postType":"POST","socialAccountId":"\u003cstring\u003e"}]}},"Linkedin":{"description":"Create a LinkedIn post and publish it immediately.","summary":"LinkedIn post","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"platform":"LINKEDIN","socialAccountId":"\u003cstring\u003e"}]}},"Linkedin Pages":{"description":"Create a LinkedIn Page post and publish it immediately.","summary":"LinkedIn Page post","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"platform":"LINKEDIN_PAGES","socialAccountId":"\u003cstring\u003e"}]}},"Pinterest":{"description":"Create a Pinterest pin and publish it immediately.","summary":"Pinterest pin","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"pinterestBoardId":"\u003cstring\u003e","platform":"PINTEREST","socialAccountId":"\u003cstring\u003e"}]}},"Threads":{"description":"Create a Threads post and publish it immediately.","summary":"Threads post","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"platform":"THREADS","socialAccountId":"\u003cstring\u003e"}]}},"Tiktok":{"description":"Create a TikTok photo post and publish it immediately.","summary":"TikTok post","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"allowComment":true,"allowDuet":false,"allowStitch":false,"autoAddMusic":true,"isBrandedContent":false,"isYourBrand":false,"platform":"TIKTOK","postMode":"DIRECT_POST","postType":"PHOTO","privacyLevel":"PUBLIC_TO_EVERYONE","socialAccountId":"\u003cstring\u003e"}]}},"Woop Test":{"description":"Create a sandbox WoopTest post and publish it immediately.","summary":"WoopTest post","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"platform":"WOOPTEST","shouldSucceed":true,"socialAccountId":"\u003cstring\u003e"}]}},"X":{"description":"Create an X post and publish it immediately.","summary":"X post","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"platform":"X","socialAccountId":"\u003cstring\u003e"}]}},"Youtube":{"description":"Create a YouTube video post and publish it immediately.","summary":"YouTube post","value":{"content":[{"media":[{"mediaId":"\u003cstring\u003e","type":"MEDIA_LIBRARY"}],"text":"\u003cstring\u003e"}],"schedule":{"type":"PUBLISH_NOW"},"socialAccounts":[{"platform":"YOUTUBE","privacy":"public","socialAccountId":"\u003cstring\u003e","title":"\u003cstring\u003e"}]}}},"schema":{"$ref":"#/components/schemas/CreatePostRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}},"description":"Post created."},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostErrorResponse"}}},"description":"Request validation failed."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostErrorResponse"}}},"description":"Internal server error."}},"security":[{"ApiKey":[]}],"summary":"Create post","tags":["Posts"],"x-woopsocial-mcp-simple-alias":"posts_create_simple","x-woopsocial-mcp-tool-name":"posts_create"}},"/posts/validate":{"post":{"description":"Validates a post without creating one.\n\nThis endpoint applies the same validation rules as [`POST /posts`](/api-reference/posts/create-post),\nincluding social account resolution, platform-specific validation, and\nmedia validation for referenced media library items.\n","operationId":"validatePost","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidatePostResponse"}}},"description":"Validation result."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostErrorResponse"}}},"description":"Internal server error."}},"security":[{"ApiKey":[]}],"summary":"Validate post","tags":["Posts"],"x-woopsocial-mcp-description":"Validates a post without creating one.\n\nThis tool applies the same validation rules as `posts_create`,\nincluding social account resolution, platform-specific validation, and\nmedia validation for referenced media library items.\n","x-woopsocial-mcp-simple-alias":"posts_validate_simple","x-woopsocial-mcp-tool-name":"posts_validate"}},"/posts/{postId}":{"delete":{"description":"Deletes one scheduled post by post ID.\n\nA post can only be deleted when all of its social account deliveries are\nstill `NOT_STARTED`.\n","operationId":"deletePost","parameters":[{"$ref":"#/components/parameters/PostId"}],"responses":{"204":{"description":"Post deleted."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletePostErrorResponse"}}},"description":"Post not found."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletePostErrorResponse"}}},"description":"Post cannot be deleted in its current state."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletePostErrorResponse"}}},"description":"Internal server error."}},"security":[{"ApiKey":[]}],"summary":"Delete post","tags":["Posts"],"x-woopsocial-mcp-tool-name":"posts_delete"},"get":{"description":"Returns one post with its social account posts inline.\n","operationId":"getPost","parameters":[{"$ref":"#/components/parameters/PostId"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}},"description":"Post found."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPostErrorResponse"}}},"description":"Post not found."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetPostErrorResponse"}}},"description":"Internal server error."}},"security":[{"ApiKey":[]}],"summary":"Get post","tags":["Posts"],"x-woopsocial-mcp-tool-name":"posts_get"}},"/projects":{"get":{"description":"Returns projects that belong to the same organization as the API key. A project corresponds to a \"Business Profile\" in the UI.","operationId":"listProjects","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Project"},"type":"array"}}},"description":"Projects available for media upload and post creation."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"List projects","tags":["Projects"],"x-woopsocial-mcp-tool-name":"projects_list"},"post":{"description":"Creates a project in the API key's organization.\n\nUse projects to isolate social accounts, media, and posts for a\nspecific user, client, or brand in your application.\n","operationId":"createProject","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProjectRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}},"description":"Project created."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Create project","tags":["Projects"],"x-woopsocial-mcp-tool-name":"projects_create"}},"/projects/{projectId}":{"delete":{"description":"Permanently deletes one project and its related data, including\nconnected social accounts, OAuth grants, media references, and posts.\n","operationId":"deleteProject","parameters":[{"$ref":"#/components/parameters/ProjectIdPath"}],"responses":{"204":{"description":"Project deleted."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Delete project","tags":["Projects"],"x-woopsocial-mcp-tool-name":"projects_delete"}},"/social-account-posts":{"get":{"description":"Returns standalone social account posts for the API key's organization.\n\nEach item includes the content, schedule, delivery status and latest stored analytics for a given social account target.\n","operationId":"listSocialAccountPosts","parameters":[{"$ref":"#/components/parameters/ProjectIdsFilter"},{"$ref":"#/components/parameters/SocialAccountIdsFilter"},{"$ref":"#/components/parameters/PostIdsFilter"},{"$ref":"#/components/parameters/SocialPlatformFilter"},{"$ref":"#/components/parameters/DeliveryStatusFilter"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSocialAccountPostsResponse"}}},"description":"Social account posts."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"List social account posts","tags":["Posts"],"x-woopsocial-mcp-tool-name":"social_account_posts_list"}},"/social-account-posts/{socialAccountPostId}":{"delete":{"description":"Deletes one social account post by ID.\n","operationId":"deleteSocialAccountPost","parameters":[{"$ref":"#/components/parameters/SocialAccountPostId"}],"responses":{"204":{"description":"Social account post deleted."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteSocialAccountPostErrorResponse"}}},"description":"Social account post not found."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteSocialAccountPostErrorResponse"}}},"description":"Internal server error."}},"security":[{"ApiKey":[]}],"summary":"Delete social account post","tags":["Posts"],"x-woopsocial-mcp-tool-name":"social_account_posts_delete"}},"/social-accounts":{"get":{"description":"Returns social accounts that can currently be used for publishing.\n\nWhen `projectId` is provided, only social accounts usable within that project are returned.\n","operationId":"listSocialAccounts","parameters":[{"$ref":"#/components/parameters/ProjectIdFilter"}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SocialAccount"},"type":"array"}}},"description":"Social accounts."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"List social accounts","tags":["Social Accounts"],"x-woopsocial-mcp-tool-name":"social_accounts_list"}},"/social-accounts/authorization-url":{"post":{"description":"Generates a browser authorization URL for connecting a new social account to a project.\n\nThis endpoint is useful for multi-user integrations where your application lets\nyour own users, clients, or brands connect their social accounts to WoopSocial\nwithout giving them access to your WoopSocial account.\n\nA common flow is:\n1. Create or select a WoopSocial project for your user, client, or brand.\n2. Call this endpoint from your backend with that `projectId`, the target `platform`,\n   and a `redirectUrl` in your application.\n3. Open the returned `url` in your user's browser.\n4. After OAuth completes, WoopSocial redirects the browser back to `redirectUrl`\n   with result query parameters.\n5. Use `projectId` and `socialAccountIds` from the redirect, or call\n   [`GET /social-accounts?projectId=...`](/api-reference/social-accounts/list-social-accounts),\n   to store or confirm the connected account in your application.\n\nWhen `redirectUrl` is provided, the browser is redirected back to that URL after\nthe OAuth callback is handled.\n\nFor Facebook, WoopSocial shows a page-selection screen after authorization\nbecause Facebook may return more pages than the user appeared to select in\nthe Facebook dialog in cases where the user has authorized with WoopSocial previously. The selected pages are connected to the single\n`projectId` from this request, then WoopSocial redirects back to\n`redirectUrl` when one was provided.\n\nWhen `redirectUrl` is provided, WoopSocial appends these query parameters on success:\n- `status=success`\n- `projectId`: the project identifier from the request\n- `platform`: the connected social platform\n- `socialAccountIds`: comma-separated connected social account identifiers. This may contain one or more IDs depending on the platform OAuth flow.\n\nWhen `redirectUrl` is provided, WoopSocial appends these query parameters on failure:\n- `status=error`\n- `projectId`: the project identifier from the request\n- `platform`: the requested social platform\n- `error`: an OAuth callback error code\n\nIf the OAuth callback state is missing or expired, WoopSocial cannot safely\ndetermine the original `redirectUrl`, so the callback returns an HTTP error\ninstead of redirecting.\n\nThe redirect never includes OAuth tokens or credentials.\n","operationId":"createOAuthAuthorization","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOAuthAuthorizationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOAuthAuthorizationResponse"}}},"description":"OAuth authorization URL created."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Generate OAuth URL","tags":["Social Accounts"],"x-woopsocial-mcp-description":"Generates a browser authorization URL for connecting a new social account to a project.\n\nFlow:\n1. Call this tool with the `projectId` and target `platform`. Omit `redirectUrl` unless the user asks for one.\n2. Give the returned `url` to the user and ask them to open it in their browser and complete the authorization.\n3. Once the user says they are done, call `social_accounts_list` with the `projectId` to confirm the connected account.\n\nFor Facebook, WoopSocial shows a page-selection screen after authorization. The selected pages are connected to the `projectId`.\n","x-woopsocial-mcp-tool-name":"oauth_create_authorization"}},"/social-accounts/{socialAccountId}":{"delete":{"description":"Deletes one social account connection by ID.\n\nThis removes the associated OAuth grant, including stored access and\nrefresh tokens, so the account no longer counts toward the\norganization's active connected-account allowance.\n","operationId":"deleteSocialAccount","parameters":[{"$ref":"#/components/parameters/SocialAccountId"}],"responses":{"204":{"description":"Social account connection deleted."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteSocialAccountErrorResponse"}}},"description":"Social account not found."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteSocialAccountErrorResponse"}}},"description":"Internal server error."}},"security":[{"ApiKey":[]}],"summary":"Delete social account","tags":["Social Accounts"],"x-woopsocial-mcp-tool-name":"social_accounts_delete"}},"/social-accounts/{socialAccountId}/platform-inputs":{"get":{"description":"Returns platform-specific input options for a connected social account.\n\nUse this endpoint to discover valid values for flattened post-target\nfields such as `pinterestBoardId` and `privacyLevel`.\n","operationId":"getSocialAccountPlatformInputs","parameters":[{"$ref":"#/components/parameters/SocialAccountId"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAccountPlatformInputs"}}},"description":"Social account-specific platform input options."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Get platform-specific input options","tags":["Social Accounts"],"x-woopsocial-mcp-tool-name":"social_accounts_get_platform_inputs"}},"/webhooks":{"get":{"description":"Returns all registered webhook endpoints for the organization. The `signingSecret` field is omitted.","operationId":"listWebhookEndpoints","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WebhookEndpoint"},"type":"array"}}},"description":"Webhook endpoints."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"List webhook endpoints","tags":["Webhooks"],"x-woopsocial-mcp-tool-name":"webhooks_list_endpoints"},"post":{"description":"Registers a URL to receive webhook events for the specified event types.\n\nThe response includes a `signingSecret` (base64-encoded, 32 bytes) that is\nreturned **once only**. Use it to verify the `X-Woop-Signature` header on\nincoming webhook payloads.\n\n**Signature format:** `t=\u003cunix\u003e,v1=\u003chmac-sha256-hex\u003e`\n**Signed payload:** `\u003cunix\u003e.\u003cjson-body\u003e`\n","operationId":"createWebhookEndpoint","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookEndpointRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}},"description":"Webhook endpoint registered."},"422":{"description":"Validation error (unknown event type, empty url, etc.)."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Register webhook endpoint","tags":["Webhooks"],"x-woopsocial-mcp-tool-name":"webhooks_create_endpoint"}},"/webhooks/{webhookId}":{"delete":{"operationId":"deleteWebhookEndpoint","parameters":[{"description":"Webhook endpoint identifier.","in":"path","name":"webhookId","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Endpoint deleted."},"404":{"description":"Endpoint not found."},"429":{"$ref":"#/components/responses/TooManyConcurrentRequests"}},"security":[{"ApiKey":[]}],"summary":"Delete webhook endpoint","tags":["Webhooks"],"x-woopsocial-mcp-tool-name":"webhooks_delete_endpoint"}}},"servers":[{"description":"WoopSocial API URL.","url":"https://api.woopsocial.com/v1"},{"description":"Local WoopSocial API URL.","url":"http://localhost:9123/api/external/v1"}],"tags":[{"description":"Post scheduling endpoints.","name":"Posts"},{"description":"Project discovery endpoints.","name":"Projects"},{"description":"Connected social account discovery endpoints.","name":"Social Accounts"},{"description":"Media upload endpoints.","name":"Media"},{"description":"Webhook endpoint management.","name":"Webhooks"},{"description":"Basic connectivity endpoints.","name":"Health"}]}