{"openapi":"3.1.0","info":{"title":"OpenPMM API","version":"1.0.0","description":"Use one API to create and manage social posts. The signup operation does not need an API key. Other operations use an account API key. Workspace endpoints also use a workspace ID. Publishing requires explicit confirmation."},"servers":[{"url":"https://api.openpmm.com/v1","description":"Production API"}],"tags":[{"name":"Signup","description":"Create access to OpenPMM and the first workspace."},{"name":"CLI Authorization","description":"Authorize the OpenPMM CLI through a browser sign-in."},{"name":"Posts","description":"Create and manage posts."},{"name":"Analytics","description":"Read and refresh current post analytics."},{"name":"Assets","description":"Upload and manage media files."},{"name":"Destinations","description":"Connect and manage social accounts."},{"name":"Account","description":"Get account details and list available workspaces."},{"name":"Billing","description":"Manage the account subscription and payment details."},{"name":"Workspaces","description":"Create and manage workspaces."},{"name":"Feedback","description":"Send product feedback to OpenPMM."},{"name":"Team","description":"Manage account members and invitations."},{"name":"Slack Notifications","description":"Configure Slack notifications."},{"name":"Webhooks","description":"Configure signed post status events."}],"security":[{"bearerAuth":[]}],"webhooks":{"postStatus":{"post":{"operationId":"receiveWebhookEvent","summary":"Receive Webhook Event","security":[],"description":"Verify `OpenPMM-Signature` over `<timestamp>.<raw request body>` with HMAC-SHA256. Reject stale timestamps. Use the event ID for event deduplication and the delivery ID for attempt correlation. The optional `content` field is present only when the endpoint uses full-content mode.","parameters":[{"name":"OpenPMM-Event-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"OpenPMM-Delivery-Id","in":"header","required":true,"schema":{"type":"string"}},{"name":"OpenPMM-Signature","in":"header","required":true,"description":"Timestamp and one or more signatures. During rotation, the header contains a signature for each active secret.","schema":{"type":"string","example":"t=1786449600,v1=0123456789abcdef"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/WebhookPostEvent"},{"$ref":"#/components/schemas/WebhookTestEvent"}]},"examples":{"metadata":{"value":{"id":"evt_01JABCDEF","object":"event","api_version":"v1","type":"post.published","workspace_id":"ws_01JABCDEF","created_at":"2026-08-11T12:00:00.000Z","data":{"object":{"id":"send_01JABCDEF","object":"post","group":"launch-2026-08","channel":"x","destination_id":"dest_01JABCDEF","state":"published","scheduled_at":null,"published_at":"2026-08-11T12:00:00.000Z","url":"https://x.com/example/status/1","error":null}}}},"full_content":{"value":{"id":"evt_01JABCDEF","object":"event","api_version":"v1","type":"post.published","workspace_id":"ws_01JABCDEF","created_at":"2026-08-11T12:00:00.000Z","data":{"object":{"id":"send_01JABCDEF","object":"post","group":"launch-2026-08","channel":"x","destination_id":"dest_01JABCDEF","state":"published","scheduled_at":null,"published_at":"2026-08-11T12:00:00.000Z","url":"https://x.com/example/status/1","error":null,"content":{"headline":null,"body":["The published post."]}}}}}}}}},"responses":{"2XX":{"description":"The receiver accepted the event."}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"OpenPMM API key","description":"Send an account API key in the `Authorization: Bearer <key>` header."}},"parameters":{"OpenPMMRequestId":{"name":"OpenPMM-Request-Id","in":"header","required":false,"description":"Optional request ID. OpenPMM returns this value when it is valid. Otherwise, OpenPMM creates a request ID.","schema":{"type":"string","maxLength":128},"example":"req_01JABCDEF"},"Limit":{"name":"limit","in":"query","required":false,"description":"Maximum number of items to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},"After":{"name":"after","in":"query","required":false,"description":"The `next_cursor` value from the previous page. Send this value without changes.","schema":{"type":"string"},"example":"eyJ2ZXJzaW9uIjoxfQ"},"AssetInclude":{"name":"include","in":"query","required":false,"description":"Set to `download` to include a five-minute download URL.","schema":{"type":"string","enum":["download"]}},"PostView":{"name":"view","in":"query","required":false,"description":"Post view to return. Use \"failed\" to list posts that need attention, the same set the \"Failed\" tab shows.","schema":{"type":"string","enum":["all","drafts","scheduled","published","attention","failed"],"default":"all"}},"ChannelFilter":{"name":"channel","in":"query","required":false,"description":"Return only entries for this publishing channel.","schema":{"type":"string","enum":["bluesky","facebook","instagram","threads","mastodon","x","linkedin","tiktok","youtube"]}},"GroupFilter":{"name":"group","in":"query","required":false,"description":"Return only entries with this post group value.","schema":{"type":"string","minLength":1,"maxLength":200}},"DestinationFilter":{"name":"destination_id","in":"query","required":false,"description":"Return only Posts for this Destination.","schema":{"type":"string","minLength":1,"maxLength":200}},"StateFilter":{"name":"state","in":"query","required":false,"description":"Return only Posts in this exact state.","schema":{"type":"string","enum":["draft","preparing","scheduled","ready","processing","awaiting-provider","published","failed","needs-attention","cancelled","missed"]}},"CreatedAfter":{"name":"created_after","in":"query","required":false,"description":"Return Posts created after this time.","schema":{"type":"string","format":"date-time"}},"ScheduledBefore":{"name":"scheduled_before","in":"query","required":false,"description":"Return Posts scheduled before this time.","schema":{"type":"string","format":"date-time"}},"PostInclude":{"name":"include","in":"query","required":false,"description":"Set to `attempts` to include sanitized attempt history.","schema":{"type":"string","enum":["attempts"]}},"AnalyticsFrom":{"name":"from","in":"query","required":true,"description":"First local publication date to include.","schema":{"type":"string","format":"date"},"example":"2026-08-01"},"AnalyticsUntil":{"name":"until","in":"query","required":true,"description":"Exclusive local publication date limit.","schema":{"type":"string","format":"date"},"example":"2026-09-01"},"AnalyticsBucket":{"name":"bucket","in":"query","required":false,"description":"Publication cohort size.","schema":{"type":"string","enum":["day","week"],"default":"day"}},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"A unique key for this operation. Use the same key when you retry the same request. Different input with the same key returns `409`.","schema":{"type":"string","minLength":1,"maxLength":200},"example":"01J4Z3Y6K2M8V7C1N5Q9R0T4XA"},"OptionalIdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"description":"Required when you publish or schedule a post. Optional when you create a draft.","schema":{"type":"string","minLength":1,"maxLength":200},"example":"01J4Z3Y6K2M8V7C1N5Q9R0T4XA"},"IfMatch":{"name":"If-Match","in":"header","required":true,"description":"The current ETag for the resource. This value prevents an update to an old version.","schema":{"type":"string"}}},"headers":{"OpenPMMRequestId":{"description":"Stable identifier for this request.","schema":{"type":"string"}},"ETag":{"description":"The current resource version for conditional updates.","schema":{"type":"string"}},"Link":{"description":"A link to the next page. This header is present only when another page exists.","schema":{"type":"string"},"example":"<https://api.openpmm.com/v1/workspaces?after=cursor>; rel=\"next\""},"WWWAuthenticate":{"description":"Bearer authentication challenge.","schema":{"type":"string"},"example":"Bearer realm=\"openpmm\""},"RetryAfter":{"description":"Number of seconds to wait before you retry the request.","schema":{"type":"integer","minimum":1}}},"requestBodies":{"CreateSignupIntent":{"required":true,"description":"Workspace and verified email details.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupIntentRequest"},"example":{"email":"publisher@example.com","workspace_name":"Acme Marketing"}}}},"CreateCliAuthorization":{"required":true,"description":"A human-readable device name and optional CLI version.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthorizationRequest"},"example":{"device_name":"Yannick MacBook Pro","cli_version":"1.8.0"}}}},"ExchangeCliAuthorization":{"required":true,"description":"The device secret returned when authorization started.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthorizationExchangeRequest"},"example":{"device_secret":"base64url-device-secret"}}}},"CreateBillingCheckoutSession":{"required":true,"description":"The billing interval and explicit confirmation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingCheckoutRequest"},"example":{"interval":"month","confirmed":true}}}},"BeginAssetUpload":{"required":true,"description":"File data that OpenPMM uses to prepare the upload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeginAssetUploadRequest"},"example":{"kind":"card","file_name":"launch.webp","content_type":"image/webp","byte_size":248312,"parts":[{"part_number":1,"checksum_crc64nvme":"rosUhgp5mIg="}]}}}},"CompleteAssetUpload":{"required":true,"description":"Uploaded parts and the full-object checksum.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteAssetUploadRequest"},"example":{"byte_size":248312,"checksum_crc64nvme":"rosUhgp5mIg=","parts":[{"part_number":1,"etag":"4f6a0d4c3f3d2db51f5ef026c9f8142b","checksum_crc64nvme":"rosUhgp5mIg="}]}}}},"PatchDestination":{"required":true,"description":"Destination settings to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchDestinationRequest"},"example":{"enabled":true,"is_default":true}}}},"CreateDestinationConnectionSession":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDestinationConnectionSessionRequest"},"examples":{"x":{"value":{"provider":"x"}},"mastodon":{"value":{"provider":"mastodon","instance_origin":"https://mastodon.social"}}}}}},"CreateWebhookEndpoint":{"required":true,"description":"Webhook endpoint configuration.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookEndpointRequest"},"example":{"name":"Production events","url":"https://example.com/openpmm/events","event_types":["post.published","post.failed","post.awaiting-provider","post.needs-attention"],"destination_filter_mode":"all","content_mode":"metadata"}}}},"PatchWebhookEndpoint":{"required":true,"description":"Webhook endpoint fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchWebhookEndpointRequest"},"example":{"enabled":false}}}},"CreatePosts":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePostsRequest"},"examples":{"publish_now":{"summary":"Publish to X and LinkedIn","value":{"confirmed":true,"when":"now","group":"launch-2026-08","posts":[{"destination_id":"dest_x_01JABCDEF","body":["First post in the thread","Second post"],"media":["ast_01JABCDEF"]},{"destination_id":"dest_linkedin_01JABCDEF","body":["The LinkedIn version, written differently."],"media":["ast_01JABCDEF"],"destination_options":{"linkedin":{"visibility":"public","allow_resharing":true}}}]}},"draft":{"summary":"Create Drafts","value":{"when":"draft","group":"launch-2026-08","posts":[{"channel":"x","body":["Draft thread"]}]}}}}}},"PatchPost":{"required":true,"description":"Draft Post fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchPostRequest"},"example":{"body":["Opening post","Reply with an image"],"asset_items":[{"asset_id":"ast_01JABCDEF","item_index":1}]}}}},"PublishPosts":{"required":true,"description":"Draft Posts and destinations to publish.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishPostsRequest"},"example":{"confirmed":true,"when":"now","time_zone":"Europe/Berlin","posts":[{"id":"send_01JABCDEF","version":1,"destination_id":"dest_01JABCDEF"}]}}}},"MovePostsInQueue":{"required":true,"description":"Queued Posts and the target local date.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MovePostsInQueueRequest"},"example":{"confirmed":true,"local_date":"2026-08-24","posts":[{"id":"send_01JABCDEF","expected_scheduled_at":"2026-08-20T07:17:00.000Z"}]}}}},"PostAction":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostActionRequest"},"example":{"confirmed":true}}}},"RetryPost":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryPostRequest"},"example":{"confirmed":true,"acknowledge_duplicate_risk":true}}}},"ReschedulePost":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReschedulePostRequest"},"example":{"confirmed":true,"scheduled_at":"2026-08-12T09:00:00+02:00","time_zone":"Europe/Berlin"}}}},"PatchWorkspace":{"required":true,"description":"Workspace fields to update.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchWorkspaceRequest"},"example":{"name":"Global Product Marketing"}}}},"CancelWorkspaceSubscription":{"required":true,"description":"Explicit Workspace subscription cancellation confirmation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelWorkspaceSubscriptionRequest"},"example":{"confirmed":true,"confirmation":"CANCEL Product Marketing"}}}},"RemoveMember":{"required":true,"description":"Explicit member removal confirmation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMemberRequest"},"example":{"confirmed":true,"confirmation":"member@example.com"}}}},"CreateInvitation":{"required":true,"description":"Invitation recipient.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInvitationRequest"},"example":{"email":"new-member@example.com"}}}},"ConfirmAction":{"required":true,"description":"Explicit confirmation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmedActionRequest"},"example":{"confirmed":true}}}},"PatchNotificationSettings":{"required":true,"description":"Slack channel selection.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchNotificationSettingsRequest"},"example":{"slack_channel_id":"C0123456789"}}}},"SubmitFeedback":{"required":true,"description":"Product feedback.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitFeedbackRequest"},"example":{"message":"The scheduled Posts view did not refresh."}}}}},"responses":{"BadRequest":{"description":"The request has invalid syntax, content, a cursor, or a header.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Unauthenticated":{"description":"Bearer authentication is missing or invalid.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"WWW-Authenticate":{"$ref":"#/components/headers/WWWAuthenticate"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"PaymentRequired":{"description":"The account subscription does not permit this operation.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Forbidden":{"description":"The credential lacks the operation’s required scope.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"NotFound":{"description":"The resource does not exist, or the API credential cannot use its workspace.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Conflict":{"description":"The request conflicts with the current state. This error also occurs when different input uses an existing idempotency key or when OpenPMM cannot determine the result of an earlier request.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"idempotency_outcome_unknown":{"summary":"The result of an earlier request is unknown","value":{"type":"https://www.openpmm.com/docs/reference/errors#public_idempotency_outcome_unknown","title":"Mutation outcome unknown","status":409,"detail":"The earlier request outcome is unknown. Inspect the affected resource before you create new work.","instance":"urn:openpmm:request:req_01JABCDEF","code":"public_idempotency_outcome_unknown","category":"conflict","request_id":"req_01JABCDEF","retryable":false,"retry":{"safety":"not_retryable","after":null},"user_action":"inspect_resource","errors":[]}},"post_group_channel_conflict":{"summary":"The group already contains the requested channel","value":{"type":"https://www.openpmm.com/docs/reference/errors#public_post_group_channel_conflict","title":"Request conflict","status":409,"detail":"This group already contains a draft Post for one or more requested channels. Update or publish the existing draft before you create another one.","instance":"urn:openpmm:request:req_01JABCDEF","code":"public_post_group_channel_conflict","category":"conflict","request_id":"req_01JABCDEF","retryable":false,"retry":{"safety":"not_retryable","after":null},"user_action":"check_request","errors":[]}}}}}},"PreconditionFailed":{"description":"The resource changed after OpenPMM created the supplied ETag.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"PayloadTooLarge":{"description":"The request body exceeds the 1 MiB edge limit.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"example":{"type":"https://www.openpmm.com/docs/reference/errors#public_payload_too_large","title":"Payload too large","status":413,"detail":"The request body exceeds the 1 MiB limit.","instance":"urn:openpmm:request:req_01JABCDEF","code":"public_payload_too_large","request_id":"req_01JABCDEF","retryable":false,"errors":[]}}}},"UnprocessableContent":{"description":"The request has valid syntax, but OpenPMM cannot publish or schedule it.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"PreconditionRequired":{"description":"This operation requires an `If-Match` header.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"RateLimited":{"description":"The request exceeded the rate limit.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}},"text/html":{"schema":{"type":"string"}}}},"InternalError":{"description":"OpenPMM could not complete the request because of an internal error.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"BadGateway":{"description":"A social provider did not return a valid response.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"ServiceUnavailable":{"description":"OpenPMM could not send the feedback email.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"schemas":{"SignupIntentRequest":{"type":"object","additionalProperties":false,"properties":{"email":{"type":"string","format":"email","maxLength":254,"example":"publisher@example.com"},"workspace_name":{"type":"string","minLength":1,"maxLength":200},"authorize_cli":{"type":"boolean","default":false},"device_name":{"type":"string","minLength":1,"maxLength":200},"cli_version":{"type":"string","minLength":1,"maxLength":100}},"required":["email","workspace_name"]},"SignupIntent":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"signup_intent"},"signup_url":{"type":"string","format":"uri","description":"Hosted page where the user completes signup."},"expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"cli_authorization":{"$ref":"#/components/schemas/CliAuthorization"}},"required":["object","signup_url","expires_at"]},"CliAuthorizationRequest":{"type":"object","additionalProperties":false,"properties":{"device_name":{"type":"string","minLength":1,"maxLength":200},"cli_version":{"type":"string","minLength":1,"maxLength":100}},"required":["device_name"]},"CliAuthorizationExchangeRequest":{"type":"object","additionalProperties":false,"properties":{"device_secret":{"type":"string","minLength":32,"maxLength":200}},"required":["device_secret"]},"CliAuthorization":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"cli_authorization"},"sensitive":{"type":"boolean","const":true,"description":"This response contains one-time credentials."},"device_secret":{"type":"string","description":"One-time device secret. Store it only until exchange."},"verification_uri":{"type":"string","format":"uri"},"verification_uri_complete":{"type":"string","format":"uri","description":"One-time sign-in URL. Treat this URL as sensitive."},"expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"interval":{"type":"integer","minimum":1,"example":5}},"required":["object","sensitive","device_secret","verification_uri","verification_uri_complete","expires_at","interval"]},"CliAuthorizationPending":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"cli_authorization"},"status":{"type":"string","const":"pending"},"retry_after":{"type":"integer","minimum":1,"example":5},"expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["object","status","retry_after","expires_at"]},"CliCredential":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"cli_credential"},"status":{"type":"string","const":"authorized"},"api_key":{"type":"string","description":"Full API key. This value is returned only once."},"workspace_id":{"type":"string","example":"ws_01JABCDEF","description":"Authorized Workspace ID."},"workspace_name":{"type":"string"},"account_id":{"type":"string","example":"acct_01JABCDEF","description":"Owning Account ID."}},"required":["object","status","api_key","workspace_id","workspace_name","account_id"]},"Account":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"acc_01JABCDEF","description":"Unique account ID."},"object":{"type":"string","const":"account"},"name":{"type":"string","example":"Acme"},"authentication":{"type":"object","additionalProperties":false,"properties":{"credential_id":{"type":"string","example":"key_01JABCDEF","description":"Unique API credential ID."},"prefix":{"type":"string","example":"opm_live_0123456789abcdef"},"name":{"type":"string","example":"Production publisher"},"environment":{"type":"string","enum":["live","test"]},"workspace_access_mode":{"type":"string","enum":["all","selected"]},"scopes":{"type":"array","items":{"type":"string","enum":["workspaces:read","workspaces:write","assets:read","assets:write","destinations:read","destinations:write","notifications:read","notifications:write","posts:read","posts:write","webhooks:read","webhooks:write","team:read","team:write","audit:read","feedback:write","billing:read","billing:write"]}},"expires_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]}},"required":["credential_id","prefix","name","environment","workspace_access_mode","scopes","expires_at"]},"created_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"updated_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["id","object","name","authentication","created_at","updated_at"]},"BillingCheckoutRequest":{"type":"object","additionalProperties":false,"properties":{"interval":{"type":"string","enum":["month","year"]},"confirmed":{"type":"boolean","const":true}},"required":["interval","confirmed"]},"BillingHostedSession":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","enum":["billing_checkout_session","billing_portal_session"]},"url":{"type":"string","format":"uri"}},"required":["object","url"]},"BillingConversion":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"billing_conversion"},"converted":{"type":"boolean","const":true}},"required":["object","converted"]},"Billing":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"billing"},"mode":{"type":"string","enum":["disabled","stripe_test","stripe_live"]},"entitlement":{"type":"string","enum":["trialing","active","grace","read_only"]},"subscription":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["pending_checkout","trialing","active","past_due","canceled","unpaid","incomplete"]},"interval":{"anyOf":[{"type":"string","enum":["month","year"]},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","example":"eur"},{"type":"null"}]},"workspace_quantity":{"type":"integer","minimum":0},"trial_ends_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"current_period_ends_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"cancel_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"cancel_at_period_end":{"type":"boolean"}},"required":["status","interval","currency","workspace_quantity","trial_ends_at","current_period_ends_at","cancel_at","cancel_at_period_end"]},{"type":"null"}]},"x_usage":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"workspace_id":{"type":"string","example":"ws_01JABCDEF","description":"Unique workspace ID."},"used":{"type":"integer","minimum":0,"maximum":50},"reserved":{"type":"integer","minimum":0,"maximum":50},"limit":{"type":"integer","const":50}},"required":["workspace_id","used","reserved","limit"]}}},"required":["object","mode","entitlement","subscription","x_usage"]},"Workspace":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"ws_01JABCDEF","description":"Unique workspace ID."},"object":{"type":"string","const":"workspace"},"account_id":{"type":"string","example":"acc_01JABCDEF","description":"ID of the account that owns the workspace."},"name":{"type":"string","example":"Acme Marketing"},"slug":{"type":"string","example":"acme-marketing"},"time_zone":{"type":"string","example":"Europe/Berlin"},"created_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"updated_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["id","object","account_id","name","slug","time_zone","created_at","updated_at"]},"Asset":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"object":{"type":"string","const":"asset"},"type":{"type":"string","enum":["card","video","poster"],"description":"Generic asset type. `video` does not select a provider placement."},"label":{"type":"string","example":"Launch artwork"},"dimensions":{"type":"string","example":"1200x675"},"width":{"anyOf":[{"type":"integer","minimum":1,"example":1200},{"type":"null"}]},"height":{"anyOf":[{"type":"integer","minimum":1,"example":675},{"type":"null"}]},"duration_sec":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"format":{"anyOf":[{"type":"string","example":"x-landscape"},{"type":"null"}]},"byte_size":{"anyOf":[{"type":"integer","minimum":0,"example":248312},{"type":"null"}]},"content_type":{"anyOf":[{"type":"string","example":"image/webp"},{"type":"null"}]},"status":{"type":"string","enum":["pending_upload","ready"]},"checksum":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"algorithm":{"type":"string","enum":["md5","crc32c","crc64nvme"]},"value":{"type":"string"}},"required":["algorithm","value"]},{"type":"null"}]},"inspected_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"retention":{"type":"object","additionalProperties":false,"properties":{"policy":{"type":"string","const":"workspace_managed"},"reusable":{"type":"boolean","const":true}},"required":["policy","reusable"]},"created_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"download_url":{"type":"string","format":"uri","writeOnly":false},"download_url_expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["id","object","type","label","dimensions","width","height","duration_sec","format","byte_size","content_type","status","checksum","inspected_at","retention","created_at"]},"BeginAssetUploadRequest":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["card","video","poster"],"description":"Generic asset kind. Use `video` for a video file. This value does not select a provider placement."},"file_name":{"type":"string","minLength":1,"maxLength":500},"content_type":{"type":"string","minLength":1,"maxLength":200},"byte_size":{"type":"integer","minimum":1},"parts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"part_number":{"type":"integer","minimum":1},"checksum_crc64nvme":{"type":"string","pattern":"^[A-Za-z0-9+/]{11}=$","example":"rosUhgp5mIg=","description":"Base64-encoded CRC64NVME checksum."}},"required":["part_number","checksum_crc64nvme"]},"minItems":1,"maxItems":10000}},"required":["kind","file_name","content_type","byte_size","parts"]},"AssetUploadInstructions":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"upl_01JABCDEF","description":"Unique upload ID."},"object":{"type":"string","const":"asset_upload"},"asset_id":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"protocol":{"type":"string","const":"multipart"},"part_size":{"type":"integer","minimum":5242880},"parts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"part_number":{"type":"integer","minimum":1},"upload_url":{"type":"string","format":"uri"},"required_headers":{"type":"object","additionalProperties":{"type":"string"},"example":{"x-amz-checksum-crc64nvme":"rosUhgp5mIg="}}},"required":["part_number","upload_url","required_headers"]},"minItems":1,"maxItems":10000},"byte_size":{"type":"integer","minimum":1},"expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["id","object","asset_id","protocol","part_size","parts","byte_size","expires_at"]},"AssetUpload":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"upl_01JABCDEF","description":"Unique upload ID."},"object":{"type":"string","const":"asset_upload"},"asset_id":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"state":{"type":"string","enum":["pending","completing","finalized","failed"]},"protocol":{"type":"string","const":"multipart"},"byte_size":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"part_size":{"anyOf":[{"type":"integer","minimum":5242880},{"type":"null"}]},"expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"finalized_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","object","asset_id","state","protocol","byte_size","part_size","expires_at","finalized_at","error"]},"CompleteAssetUploadRequest":{"type":"object","additionalProperties":false,"properties":{"byte_size":{"type":"integer","minimum":1},"checksum_crc64nvme":{"type":"string","pattern":"^[A-Za-z0-9+/]{11}=$","example":"rosUhgp5mIg=","description":"Base64-encoded CRC64NVME checksum."},"parts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"part_number":{"type":"integer","minimum":1},"etag":{"type":"string","minLength":1,"maxLength":1024},"checksum_crc64nvme":{"type":"string","pattern":"^[A-Za-z0-9+/]{11}=$","example":"rosUhgp5mIg=","description":"Base64-encoded CRC64NVME checksum."}},"required":["part_number","etag","checksum_crc64nvme"]},"minItems":1,"maxItems":10000}},"required":["byte_size","checksum_crc64nvme","parts"]},"MediaMeasure":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"number"},"value":{"type":"number"},"unit":{"type":"string"}},"required":["kind","value","unit"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"text"},"value":{"type":"string"}},"required":["kind","value"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"boolean"},"value":{"type":"boolean"}},"required":["kind","value"]}]},"MediaRequirementSummary":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"range"},"min":{"anyOf":[{"type":"number"},{"type":"null"}]},"max":{"anyOf":[{"type":"number"},{"type":"null"}]},"unit":{"type":"string"},"owner":{"type":"string","enum":["openpmm","provider","destination"]}},"required":["kind","min","max","unit","owner"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"allowed"},"allowed":{"type":"array","items":{"type":"string"}},"owner":{"type":"string","enum":["openpmm","provider","destination"]}},"required":["kind","allowed","owner"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"expected"},"expected":{"type":"string"},"owner":{"type":"string","enum":["openpmm","provider","destination"]}},"required":["kind","expected","owner"]}]},"DestinationSummary":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."},"object":{"type":"string","const":"destination","description":"Object type."},"channel":{"type":"string","enum":["bluesky","facebook","instagram","threads","mastodon","x","linkedin","tiktok","youtube"],"example":"x","description":"Channel that receives posts for this destination."},"display_name":{"anyOf":[{"type":"string","example":"@openpmm"},{"type":"null"}],"description":"Provider account or page name."},"status":{"type":"string","enum":["ready","disabled","reauthorization-required","unavailable"],"description":"Current publishing status. Only `ready` destinations accept posts."},"unavailable_reason":{"anyOf":[{"type":"string","enum":["reauthorization_required","provider_identity_missing","provider_error"]},{"type":"null"}],"description":"Reason the destination cannot accept posts. This value is null when the status is `ready` or `disabled`."},"is_default":{"type":"boolean","description":"Whether new posts for this channel use this destination by default."}},"required":["id","object","channel","display_name","status","unavailable_reason","is_default"]},"Destination":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."},"object":{"type":"string","const":"destination","description":"Object type."},"channel":{"type":"string","enum":["bluesky","facebook","instagram","threads","mastodon","x","linkedin","tiktok","youtube"],"example":"x","description":"Channel that receives posts for this destination."},"display_name":{"anyOf":[{"type":"string","example":"@openpmm"},{"type":"null"}],"description":"Provider account or page name."},"status":{"type":"string","enum":["ready","disabled","reauthorization-required","unavailable"],"description":"Current publishing status. Only `ready` destinations accept posts."},"unavailable_reason":{"anyOf":[{"type":"string","enum":["reauthorization_required","provider_identity_missing","provider_error"]},{"type":"null"}],"description":"Reason the destination cannot accept posts. This value is null when the status is `ready` or `disabled`."},"is_default":{"type":"boolean","description":"Whether new posts for this channel use this destination by default."},"provider_origin":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Provider origin. Mastodon destinations use the instance origin."},"external_id":{"anyOf":[{"type":"string","example":"1844029112345678901"},{"type":"null"}],"description":"Provider account or page ID."},"connected_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}],"description":"Time when the provider connection was created."},"expires_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}],"description":"Time when the current provider access expires."},"capabilities":{"type":"object","additionalProperties":false,"properties":{"max_body_items":{"type":"integer","minimum":1,"maximum":25,"description":"Maximum number of consecutive body items that this destination accepts."},"body_text_limit":{"type":"object","additionalProperties":false,"properties":{"maximum":{"type":"integer","minimum":1,"description":"Maximum length of each body item."},"unit":{"type":"string","enum":["characters","graphemes","weighted_characters","bytes"],"description":"Unit that OpenPMM uses to measure body length."}},"required":["maximum","unit"],"description":"Maximum length of each body item and the unit used to measure it.","example":{"maximum":25000,"unit":"weighted_characters"}},"allowed_privacy_statuses":{"type":"array","items":{"type":"string","enum":["public","private","unlisted"]},"minItems":1,"uniqueItems":true,"description":"YouTube privacy values that this deployment accepts. This field is present only for YouTube destinations."},"minimum_upload_lead_minutes":{"type":"integer","minimum":0,"maximum":1440,"description":"Minimum YouTube upload lead time. This field is present only for YouTube destinations."}},"required":["max_body_items"],"description":"Publishing limits for this destination."},"version":{"type":"integer","minimum":0,"description":"Version used to update the destination with an ETag."},"queue_policy":{"type":"object","additionalProperties":false,"properties":{"enabled_weekdays":{"type":"array","items":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Weekday in the Workspace time zone."},"maxItems":7,"description":"Weekdays when the destination queue can select a slot."},"windows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^qwin_[A-Za-z0-9_-]{1,100}$","description":"Stable queue window ID."},"weekdays":{"type":"array","items":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Weekday in the Workspace time zone."},"maxItems":7,"description":"Weekdays that use this window."},"start_time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","example":"08:00","description":"Window start time in 24-hour local time."},"end_time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","example":"11:00","description":"Window end time in 24-hour local time."}},"required":["id","weekdays","start_time","end_time"]},"maxItems":10,"description":"Local-time posting windows."}},"required":["enabled_weekdays","windows"],"description":"Weekly queue windows for this destination."}},"required":["id","object","channel","display_name","status","unavailable_reason","is_default","provider_origin","external_id","connected_at","expires_at","capabilities","version","queue_policy"]},"PatchDestinationRequest":{"type":"object","additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"is_default":{"type":"boolean"},"queue_policy":{"type":"object","additionalProperties":false,"properties":{"enabled_weekdays":{"type":"array","items":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Weekday in the Workspace time zone."},"maxItems":7,"description":"Weekdays when the destination queue can select a slot."},"windows":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","pattern":"^qwin_[A-Za-z0-9_-]{1,100}$","description":"Stable queue window ID."},"weekdays":{"type":"array","items":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"description":"Weekday in the Workspace time zone."},"maxItems":7,"description":"Weekdays that use this window."},"start_time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","example":"08:00","description":"Window start time in 24-hour local time."},"end_time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","example":"11:00","description":"Window end time in 24-hour local time."}},"required":["weekdays","start_time","end_time"]},"maxItems":10,"description":"Local-time posting windows."}},"required":["enabled_weekdays","windows"]}},"required":[],"minProperties":1},"CreateDestinationConnectionSessionRequest":{"type":"object","additionalProperties":false,"properties":{"provider":{"type":"string","enum":["bluesky","x","youtube","facebook","instagram","threads","mastodon","linkedin","tiktok"],"example":"x","description":"Provider to connect."},"instance_origin":{"type":"string","format":"uri","description":"Required only for Mastodon. Use the instance origin.","example":"https://mastodon.social"},"account_identifier":{"type":"string","description":"Required only for Bluesky. Use the account handle or DID.","example":"alice.bsky.social"}},"required":["provider"]},"DestinationConnectionSession":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"dcs_01JABCDEF","description":"Unique connection session ID."},"object":{"type":"string","const":"destination_connection_session","description":"Object type."},"provider":{"type":"string","enum":["bluesky","x","youtube","facebook","instagram","threads","mastodon","linkedin","tiktok"],"example":"x","description":"Social provider."},"status":{"type":"string","enum":["pending","completed","failed","expired"],"description":"Current authorization flow status."},"authorization_url":{"type":"string","format":"uri","description":"URL that a person must open to authorize the provider."},"expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z","description":"Time when the pending session expires."},"completed_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}],"description":"Time when authorization completed."},"failure_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Stable failure code when authorization fails."},"failed_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}],"description":"Time when authorization failed."},"selection_required":{"type":"boolean","description":"Whether you must select a Facebook Page before you can create Facebook posts."}},"required":["id","object","provider","status","authorization_url","expires_at","selection_required"]},"DestinationRefresh":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"destination_refresh","description":"Object type."},"status":{"type":"string","enum":["completed","completed_with_warnings"],"description":"Refresh result."},"warnings":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"provider":{"type":"string","enum":["bluesky","x","youtube","facebook","instagram","threads","mastodon","linkedin","tiktok"],"example":"x","description":"Social provider."},"reason":{"type":"string","enum":["provider_not_configured","feature_disabled","reauthorization_required","provider_session_missing","provider_identity_missing","provider_limits_unavailable","provider_error"],"description":"Machine-readable reason for the warning."},"message":{"type":"string","description":"Provider error message."}},"required":["provider","reason","message"]},"description":"Provider failures that did not stop the refresh."},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/DestinationSummary"},"description":"Connected publishing targets after the refresh."}},"required":["object","status","warnings","destinations"]},"DestinationDisconnect":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."},"object":{"type":"string","const":"destination","description":"Object type."},"provider":{"type":"string","enum":["bluesky","x","youtube","facebook","instagram","threads","mastodon","linkedin","tiktok"],"example":"x","description":"Social provider."},"disconnected":{"type":"boolean","const":true,"description":"Whether OpenPMM disconnected the destination."},"provider_revoked":{"type":"boolean","description":"Whether the provider confirmed token revocation."}},"required":["id","object","provider","disconnected","provider_revoked"]},"CreateWebhookEndpointRequest":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":120},"url":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048,"description":"Public HTTPS URL. Use port 443 and a DNS hostname. Do not include credentials. The hostname must not resolve to a private or reserved address."},"enabled":{"type":"boolean","default":true},"event_types":{"type":"array","items":{"type":"string","enum":["post.published","post.failed","post.awaiting-provider","post.needs-attention"]},"minItems":1,"uniqueItems":true},"destination_filter_mode":{"type":"string","enum":["all","selected"],"default":"all"},"destination_ids":{"type":"array","items":{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."},"maxItems":100,"uniqueItems":true,"default":[]},"content_mode":{"type":"string","enum":["metadata","full"],"default":"metadata"}},"required":["name","url"]},"PatchWebhookEndpointRequest":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":120},"url":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048,"description":"Public HTTPS URL. Use port 443 and a DNS hostname. Do not include credentials. The hostname must not resolve to a private or reserved address."},"enabled":{"type":"boolean"},"event_types":{"type":"array","items":{"type":"string","enum":["post.published","post.failed","post.awaiting-provider","post.needs-attention"]},"minItems":1,"uniqueItems":true},"destination_filter_mode":{"type":"string","enum":["all","selected"]},"destination_ids":{"type":"array","items":{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."},"maxItems":100,"uniqueItems":true},"content_mode":{"type":"string","enum":["metadata","full"]}},"required":[]},"WebhookEndpoint":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"wh_01JABCDEF","description":"Unique webhook endpoint ID."},"object":{"type":"string","const":"webhook_endpoint"},"name":{"type":"string"},"url":{"type":"string","format":"uri","description":"Full webhook delivery URL."},"enabled":{"type":"boolean"},"event_types":{"type":"array","items":{"type":"string","enum":["post.published","post.failed","post.awaiting-provider","post.needs-attention"]}},"destination_filter_mode":{"type":"string","enum":["all","selected"]},"destination_ids":{"type":"array","items":{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."}},"content_mode":{"type":"string","enum":["metadata","full"]},"secret_last_four":{"type":"string","minLength":4,"maxLength":4},"previous_secret_expires_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"config_version":{"type":"integer","minimum":1},"created_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"updated_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["id","object","name","url","enabled","event_types","destination_filter_mode","destination_ids","content_mode","secret_last_four","previous_secret_expires_at","config_version","created_at","updated_at"]},"WebhookEndpointSecret":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"wh_01JABCDEF","description":"Unique webhook endpoint ID."},"object":{"type":"string","const":"webhook_endpoint"},"name":{"type":"string"},"url":{"type":"string","format":"uri","description":"Full webhook delivery URL."},"enabled":{"type":"boolean"},"event_types":{"type":"array","items":{"type":"string","enum":["post.published","post.failed","post.awaiting-provider","post.needs-attention"]}},"destination_filter_mode":{"type":"string","enum":["all","selected"]},"destination_ids":{"type":"array","items":{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."}},"content_mode":{"type":"string","enum":["metadata","full"]},"secret_last_four":{"type":"string","minLength":4,"maxLength":4},"previous_secret_expires_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"config_version":{"type":"integer","minimum":1},"created_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"updated_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"secret":{"type":"string","readOnly":true,"description":"Signing secret. This value is returned only once."}},"required":["id","object","name","url","enabled","event_types","destination_filter_mode","destination_ids","content_mode","secret_last_four","previous_secret_expires_at","config_version","created_at","updated_at","secret"]},"DeletedWebhookEndpoint":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"wh_01JABCDEF","description":"Unique webhook endpoint ID."},"object":{"type":"string","const":"webhook_endpoint"},"deleted":{"type":"boolean","const":true}},"required":["id","object","deleted"]},"WebhookSecretRotation":{"type":"object","additionalProperties":false,"properties":{"secret":{"type":"string","readOnly":true,"description":"New signing secret. This value is returned only once."},"previous_secret_expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["secret","previous_secret_expires_at"]},"WebhookTest":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"webhook_test"},"event_id":{"type":"string","example":"evt_01JABCDEF","description":"Unique event ID."},"delivery_id":{"type":"string","example":"whd_01JABCDEF","description":"Stable delivery ID."},"delivered":{"type":"boolean"},"status_code":{"anyOf":[{"type":"integer","minimum":100,"maximum":599},{"type":"null"}]},"latency_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"retryable":{"type":"boolean"}},"required":["object","event_id","delivery_id","delivered","status_code","latency_ms","retryable"]},"WebhookPostEvent":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"evt_01JABCDEF","description":"Stable event ID."},"object":{"type":"string","const":"event"},"api_version":{"type":"string","const":"v1"},"type":{"type":"string","enum":["post.published","post.failed","post.awaiting-provider","post.needs-attention"]},"workspace_id":{"type":"string","example":"ws_01JABCDEF","description":"Workspace ID."},"created_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"data":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"send_01JABCDEF","description":"Unique Post ID."},"object":{"type":"string","const":"post"},"group":{"anyOf":[{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$","example":"launch-2026-08","description":"A value that groups related posts."},{"type":"null"}]},"channel":{"type":"string","enum":["bluesky","facebook","instagram","threads","mastodon","x","linkedin","tiktok","youtube"],"example":"x"},"destination_id":{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."},"state":{"type":"string","enum":["published","failed","awaiting-provider","needs-attention"]},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"published_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"error":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","retryable"]},{"type":"null"}]},"content":{"type":"object","additionalProperties":false,"properties":{"headline":{"anyOf":[{"type":"string"},{"type":"null"}]},"body":{"type":"array","items":{"type":"string"}}},"required":["headline","body"]}},"required":["id","object","group","channel","destination_id","state","scheduled_at","published_at","url","error"]}},"required":["object"]}},"required":["id","object","api_version","type","workspace_id","created_at","data"]},"WebhookTestEvent":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"evt_01JABCDEF","description":"Stable event ID."},"object":{"type":"string","const":"event"},"api_version":{"type":"string","const":"v1"},"type":{"type":"string","const":"webhook.test"},"test":{"type":"boolean","const":true},"workspace_id":{"type":"string","example":"ws_01JABCDEF","description":"Workspace ID."},"created_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"data":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"webhook_test"},"message":{"type":"string","const":"OpenPMM webhook test"}},"required":["object","message"]}},"required":["object"]}},"required":["id","object","api_version","type","test","workspace_id","created_at","data"]},"CreatePostsRequest":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean","const":true,"description":"Set to `true` when you publish or schedule. Omit this field when you create a draft."},"when":{"oneOf":[{"type":"string","enum":["now","draft","queue"]},{"type":"string","format":"date-time"}],"default":"now","description":"Use `now` to publish, `draft` to save a draft, `queue` to use the next posting window, or an ISO 8601 timestamp to schedule. A timestamp must include a UTC offset."},"time_zone":{"type":"string","default":"UTC","example":"Europe/Berlin","description":"IANA time zone for `now` or an exact schedule. Omit this field for `queue`; OpenPMM uses the Workspace time zone."},"group":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$","example":"launch-2026-08","description":"A value that groups related posts."},"posts":{"type":"array","items":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"channel":{"type":"string","enum":["bluesky","facebook","instagram","threads","mastodon","x","linkedin","tiktok","youtube"],"example":"x","description":"Channel for this draft Post."},"headline":{"anyOf":[{"type":"string","minLength":1,"maxLength":10000},{"type":"null"}]},"body":{"type":"array","items":{"type":"string","maxLength":63206},"minItems":1,"maxItems":25,"description":"Ordered post bodies. X, Bluesky, Mastodon, and Threads publish later body items as replies. On those channels, a body item can be empty when media_items attaches media to that item. X post bodies cannot contain URLs."},"media":{"type":"array","items":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"maxItems":100,"default":[],"description":"Assets for the opening post. Use media_items to attach assets to other thread items."},"media_items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"asset_id":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"item_index":{"type":"integer","minimum":0,"maximum":24,"description":"The zero-based body item that owns this asset."}},"required":["asset_id","item_index"]},"maxItems":100,"description":"Assets and their thread items. Do not use this field with media."},"destination_options":{"anyOf":[{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"bluesky":{"type":"object","additionalProperties":false,"properties":{"languages":{"type":"array","items":{"type":"string","minLength":2,"maxLength":35},"maxItems":3,"uniqueItems":true},"content_labels":{"type":"array","items":{"type":"string","enum":["porn","sexual","nudity","graphic-media"]},"maxItems":4,"uniqueItems":true},"alt_text_by_asset_id":{"type":"object","description":"Map attached asset IDs to alt text. Bluesky images require alt text. Video alt text is optional.","additionalProperties":{"type":"string","minLength":1,"maxLength":2000},"maxProperties":4}},"required":["languages","content_labels","alt_text_by_asset_id"]}},"required":["bluesky"]},{"type":"object","additionalProperties":false,"properties":{"youtube":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["short","video"]},"privacy_status":{"type":"string","enum":["public","private","unlisted"]},"category_id":{"type":"string","minLength":1,"maxLength":10,"example":"22"},"license":{"type":"string","enum":["youtube","creative_common"],"default":"youtube"},"self_declared_made_for_kids":{"type":"boolean"},"embeddable":{"type":"boolean","default":true},"contains_synthetic_media":{"type":"boolean"},"notify_subscribers":{"type":"boolean"},"thumbnail_timestamp_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"default":null,"description":"Frame time for the YouTube thumbnail, in milliseconds. Use null to let YouTube select the thumbnail."}},"required":["kind","privacy_status","category_id","self_declared_made_for_kids","contains_synthetic_media","notify_subscribers"]}},"required":["youtube"]},{"type":"object","additionalProperties":false,"properties":{"instagram":{"type":"object","additionalProperties":false,"properties":{"placement":{"type":"string","enum":["post","story","reel"]},"share_to_feed":{"type":"boolean","default":true}},"required":["placement"]}},"required":["instagram"]},{"type":"object","additionalProperties":false,"properties":{"threads":{"type":"object","additionalProperties":false,"properties":{"reply_control":{"type":"string","enum":["everyone","accounts_you_follow","mentioned_only"]}},"required":["reply_control"]}},"required":["threads"]},{"type":"object","additionalProperties":false,"properties":{"mastodon":{"type":"object","additionalProperties":false,"properties":{"visibility":{"type":"string","enum":["public","unlisted","private"]},"sensitive":{"type":"boolean"},"spoiler_text":{"type":"string","maxLength":500},"language":{"anyOf":[{"type":"string","minLength":2,"maxLength":20},{"type":"null"}]}},"required":["visibility","sensitive","spoiler_text","language"]}},"required":["mastodon"]},{"type":"object","additionalProperties":false,"properties":{"linkedin":{"type":"object","additionalProperties":false,"properties":{"visibility":{"type":"string","enum":["public","connections"]},"allow_resharing":{"type":"boolean"}},"required":["visibility","allow_resharing"]}},"required":["linkedin"]},{"type":"object","additionalProperties":false,"properties":{"tiktok":{"type":"object","additionalProperties":false,"properties":{"privacy_level":{"type":"string","enum":["public_to_everyone","mutual_follow_friends","follower_of_creator","self_only"]},"allow_comment":{"type":"boolean"},"allow_duet":{"type":"boolean"},"allow_stitch":{"type":"boolean"},"commercial_content":{"type":"string","enum":["none","own_brand","branded","both"]},"is_ai_generated":{"type":"boolean"},"video_cover_timestamp_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["privacy_level","allow_comment","allow_duet","allow_stitch","commercial_content","is_ai_generated","video_cover_timestamp_ms"]}},"required":["tiktok"]}]},{"type":"null"}]}},"required":["channel","body"]},{"type":"object","additionalProperties":false,"properties":{"destination_id":{"type":"string","example":"dest_01JABCDEF","description":"Destination for this Post."},"headline":{"anyOf":[{"type":"string","minLength":1,"maxLength":10000},{"type":"null"}]},"body":{"type":"array","items":{"type":"string","maxLength":63206},"minItems":1,"maxItems":25,"description":"Ordered post bodies. X, Bluesky, Mastodon, and Threads publish later body items as replies. On those channels, a body item can be empty when media_items attaches media to that item. X post bodies cannot contain URLs."},"media":{"type":"array","items":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"maxItems":100,"default":[],"description":"Assets for the opening post. Use media_items to attach assets to other thread items."},"media_items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"asset_id":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"item_index":{"type":"integer","minimum":0,"maximum":24,"description":"The zero-based body item that owns this asset."}},"required":["asset_id","item_index"]},"maxItems":100,"description":"Assets and their thread items. Do not use this field with media."},"destination_options":{"anyOf":[{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"bluesky":{"type":"object","additionalProperties":false,"properties":{"languages":{"type":"array","items":{"type":"string","minLength":2,"maxLength":35},"maxItems":3,"uniqueItems":true},"content_labels":{"type":"array","items":{"type":"string","enum":["porn","sexual","nudity","graphic-media"]},"maxItems":4,"uniqueItems":true},"alt_text_by_asset_id":{"type":"object","description":"Map attached asset IDs to alt text. Bluesky images require alt text. Video alt text is optional.","additionalProperties":{"type":"string","minLength":1,"maxLength":2000},"maxProperties":4}},"required":["languages","content_labels","alt_text_by_asset_id"]}},"required":["bluesky"]},{"type":"object","additionalProperties":false,"properties":{"youtube":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["short","video"]},"privacy_status":{"type":"string","enum":["public","private","unlisted"]},"category_id":{"type":"string","minLength":1,"maxLength":10,"example":"22"},"license":{"type":"string","enum":["youtube","creative_common"],"default":"youtube"},"self_declared_made_for_kids":{"type":"boolean"},"embeddable":{"type":"boolean","default":true},"contains_synthetic_media":{"type":"boolean"},"notify_subscribers":{"type":"boolean"},"thumbnail_timestamp_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"default":null,"description":"Frame time for the YouTube thumbnail, in milliseconds. Use null to let YouTube select the thumbnail."}},"required":["kind","privacy_status","category_id","self_declared_made_for_kids","contains_synthetic_media","notify_subscribers"]}},"required":["youtube"]},{"type":"object","additionalProperties":false,"properties":{"instagram":{"type":"object","additionalProperties":false,"properties":{"placement":{"type":"string","enum":["post","story","reel"]},"share_to_feed":{"type":"boolean","default":true}},"required":["placement"]}},"required":["instagram"]},{"type":"object","additionalProperties":false,"properties":{"threads":{"type":"object","additionalProperties":false,"properties":{"reply_control":{"type":"string","enum":["everyone","accounts_you_follow","mentioned_only"]}},"required":["reply_control"]}},"required":["threads"]},{"type":"object","additionalProperties":false,"properties":{"mastodon":{"type":"object","additionalProperties":false,"properties":{"visibility":{"type":"string","enum":["public","unlisted","private"]},"sensitive":{"type":"boolean"},"spoiler_text":{"type":"string","maxLength":500},"language":{"anyOf":[{"type":"string","minLength":2,"maxLength":20},{"type":"null"}]}},"required":["visibility","sensitive","spoiler_text","language"]}},"required":["mastodon"]},{"type":"object","additionalProperties":false,"properties":{"linkedin":{"type":"object","additionalProperties":false,"properties":{"visibility":{"type":"string","enum":["public","connections"]},"allow_resharing":{"type":"boolean"}},"required":["visibility","allow_resharing"]}},"required":["linkedin"]},{"type":"object","additionalProperties":false,"properties":{"tiktok":{"type":"object","additionalProperties":false,"properties":{"privacy_level":{"type":"string","enum":["public_to_everyone","mutual_follow_friends","follower_of_creator","self_only"]},"allow_comment":{"type":"boolean"},"allow_duet":{"type":"boolean"},"allow_stitch":{"type":"boolean"},"commercial_content":{"type":"string","enum":["none","own_brand","branded","both"]},"is_ai_generated":{"type":"boolean"},"video_cover_timestamp_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["privacy_level","allow_comment","allow_duet","allow_stitch","commercial_content","is_ai_generated","video_cover_timestamp_ms"]}},"required":["tiktok"]}]},{"type":"null"}]}},"required":["destination_id","body"]}]},"minItems":1,"maxItems":100}},"required":["posts"]},"PatchPostRequest":{"type":"object","additionalProperties":false,"properties":{"headline":{"anyOf":[{"type":"string","minLength":1,"maxLength":10000,"description":"Replacement headline for a draft or scheduled Post."},{"type":"null"}]},"body":{"type":"array","items":{"type":"string","maxLength":63206},"minItems":1,"maxItems":25,"description":"Replacement copy. X, Bluesky, Mastodon, and Threads accept an empty item when that item has media. Keep the same number of items on a scheduled Post."},"asset_ids":{"type":"array","items":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"maxItems":100,"description":"Replacement assets for a draft Post."},"asset_items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"asset_id":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"item_index":{"type":"integer","minimum":0,"maximum":24}},"required":["asset_id","item_index"]},"maxItems":100,"description":"Replacement assets and their body items for a draft Post. Do not use this field with asset_ids."},"destination_options":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"bluesky":{"type":"object","additionalProperties":false,"properties":{"languages":{"type":"array","items":{"type":"string","minLength":2,"maxLength":35},"maxItems":3,"uniqueItems":true},"content_labels":{"type":"array","items":{"type":"string","enum":["porn","sexual","nudity","graphic-media"]},"maxItems":4,"uniqueItems":true},"alt_text_by_asset_id":{"type":"object","description":"Map attached asset IDs to alt text. Bluesky images require alt text. Video alt text is optional.","additionalProperties":{"type":"string","minLength":1,"maxLength":2000},"maxProperties":4}},"required":["languages","content_labels","alt_text_by_asset_id"]}},"required":["bluesky"]},{"type":"object","additionalProperties":false,"properties":{"youtube":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["short","video"]},"privacy_status":{"type":"string","enum":["public","private","unlisted"]},"category_id":{"type":"string","minLength":1,"maxLength":10,"example":"22"},"license":{"type":"string","enum":["youtube","creative_common"],"default":"youtube"},"self_declared_made_for_kids":{"type":"boolean"},"embeddable":{"type":"boolean","default":true},"contains_synthetic_media":{"type":"boolean"},"notify_subscribers":{"type":"boolean"},"thumbnail_timestamp_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"default":null,"description":"Frame time for the YouTube thumbnail, in milliseconds. Use null to let YouTube select the thumbnail."}},"required":["kind","privacy_status","category_id","self_declared_made_for_kids","contains_synthetic_media","notify_subscribers"]}},"required":["youtube"]},{"type":"object","additionalProperties":false,"properties":{"instagram":{"type":"object","additionalProperties":false,"properties":{"placement":{"type":"string","enum":["post","story","reel"]},"share_to_feed":{"type":"boolean","default":true}},"required":["placement"]}},"required":["instagram"]},{"type":"object","additionalProperties":false,"properties":{"threads":{"type":"object","additionalProperties":false,"properties":{"reply_control":{"type":"string","enum":["everyone","accounts_you_follow","mentioned_only"]}},"required":["reply_control"]}},"required":["threads"]},{"type":"object","additionalProperties":false,"properties":{"mastodon":{"type":"object","additionalProperties":false,"properties":{"visibility":{"type":"string","enum":["public","unlisted","private"]},"sensitive":{"type":"boolean"},"spoiler_text":{"type":"string","maxLength":500},"language":{"anyOf":[{"type":"string","minLength":2,"maxLength":20},{"type":"null"}]}},"required":["visibility","sensitive","spoiler_text","language"]}},"required":["mastodon"]},{"type":"object","additionalProperties":false,"properties":{"linkedin":{"type":"object","additionalProperties":false,"properties":{"visibility":{"type":"string","enum":["public","connections"]},"allow_resharing":{"type":"boolean"}},"required":["visibility","allow_resharing"]}},"required":["linkedin"]},{"type":"object","additionalProperties":false,"properties":{"tiktok":{"type":"object","additionalProperties":false,"properties":{"privacy_level":{"type":"string","enum":["public_to_everyone","mutual_follow_friends","follower_of_creator","self_only"]},"allow_comment":{"type":"boolean"},"allow_duet":{"type":"boolean"},"allow_stitch":{"type":"boolean"},"commercial_content":{"type":"string","enum":["none","own_brand","branded","both"]},"is_ai_generated":{"type":"boolean"},"video_cover_timestamp_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["privacy_level","allow_comment","allow_duet","allow_stitch","commercial_content","is_ai_generated","video_cover_timestamp_ms"]}},"required":["tiktok"]}],"description":"Replacement Destination publishing options for a draft or scheduled Post."}},"required":[],"minProperties":1},"PublishPostsRequest":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean","const":true},"when":{"oneOf":[{"type":"string","enum":["now","queue"]},{"type":"string","format":"date-time"}],"default":"now","description":"Use `now`, `queue`, or an ISO 8601 timestamp with a UTC offset."},"time_zone":{"type":"string","default":"UTC","example":"Europe/Berlin","description":"IANA time zone for `now` or an exact schedule. Omit this field for `queue`; OpenPMM uses the Workspace time zone."},"posts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"send_01JABCDEF","description":"Unique Post ID."},"version":{"type":"integer","minimum":1},"destination_id":{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."}},"required":["id","version","destination_id"]},"minItems":1,"maxItems":100}},"required":["confirmed","posts"]},"MovePostsInQueueRequest":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean","const":true},"local_date":{"type":"string","format":"date","example":"2026-08-24"},"posts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"send_01JABCDEF","description":"Unique Post ID."},"expected_scheduled_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["id","expected_scheduled_at"]},"minItems":1,"maxItems":100}},"required":["confirmed","local_date","posts"]},"PostDeletion":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"send_01JABCDEF","description":"Unique Post ID."},"object":{"type":"string","const":"post"},"deleted":{"type":"boolean","const":true}},"required":["id","object","deleted"]},"PostSet":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"post_set"},"group":{"anyOf":[{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$","example":"launch-2026-08","description":"A value that groups related posts."},{"type":"null"}]},"posts":{"type":"array","items":{"$ref":"#/components/schemas/Post"}}},"required":["object","group","posts"]},"Post":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"send_01JABCDEF","description":"Unique Post ID."},"object":{"type":"string","const":"post"},"group":{"anyOf":[{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$","example":"launch-2026-08","description":"A value that groups related posts."},{"type":"null"}]},"channel":{"type":"string","enum":["bluesky","facebook","instagram","threads","mastodon","x","linkedin","tiktok","youtube"],"example":"x"},"publication_source":{"type":"string","enum":["openpmm","provider"],"description":"Where the Post was first published. `provider` means OpenPMM imported the Post from the connected destination."},"state":{"type":"string","enum":["draft","preparing","scheduled","ready","processing","awaiting-provider","published","failed","needs-attention","cancelled","missed"]},"editable":{"type":"boolean","description":"Whether you can update the Post content. A scheduled Post keeps its assets and thread structure locked."},"terminal":{"type":"boolean","description":"True when the Post can no longer change state. Poll only while this value and `action_required` are false."},"action_required":{"type":"boolean","description":"Whether a person or agent must choose the next action."},"next_action_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"retry_safety":{"type":"string","enum":["safe","may_duplicate","not_applicable"]},"available_actions":{"type":"array","items":{"type":"string","enum":["update","delete","publish","cancel","reschedule","retry","retry_with_duplicate_risk"]}},"version":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}]},"payload":{"type":"object","additionalProperties":false,"properties":{"headline":{"anyOf":[{"type":"string","minLength":1,"maxLength":10000},{"type":"null"}]},"body":{"type":"array","items":{"type":"string","maxLength":63206},"minItems":1,"maxItems":25},"destination_options":{"anyOf":[{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"bluesky":{"type":"object","additionalProperties":false,"properties":{"languages":{"type":"array","items":{"type":"string","minLength":2,"maxLength":35},"maxItems":3,"uniqueItems":true},"content_labels":{"type":"array","items":{"type":"string","enum":["porn","sexual","nudity","graphic-media"]},"maxItems":4,"uniqueItems":true},"alt_text_by_asset_id":{"type":"object","description":"Map attached asset IDs to alt text. Bluesky images require alt text. Video alt text is optional.","additionalProperties":{"type":"string","minLength":1,"maxLength":2000},"maxProperties":4}},"required":["languages","content_labels","alt_text_by_asset_id"]}},"required":["bluesky"]},{"type":"object","additionalProperties":false,"properties":{"youtube":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["short","video"]},"privacy_status":{"type":"string","enum":["public","private","unlisted"]},"category_id":{"type":"string","minLength":1,"maxLength":10,"example":"22"},"license":{"type":"string","enum":["youtube","creative_common"],"default":"youtube"},"self_declared_made_for_kids":{"type":"boolean"},"embeddable":{"type":"boolean","default":true},"contains_synthetic_media":{"type":"boolean"},"notify_subscribers":{"type":"boolean"},"thumbnail_timestamp_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"default":null,"description":"Frame time for the YouTube thumbnail, in milliseconds. Use null to let YouTube select the thumbnail."}},"required":["kind","privacy_status","category_id","self_declared_made_for_kids","contains_synthetic_media","notify_subscribers"]}},"required":["youtube"]},{"type":"object","additionalProperties":false,"properties":{"instagram":{"type":"object","additionalProperties":false,"properties":{"placement":{"type":"string","enum":["post","story","reel"]},"share_to_feed":{"type":"boolean","default":true}},"required":["placement"]}},"required":["instagram"]},{"type":"object","additionalProperties":false,"properties":{"threads":{"type":"object","additionalProperties":false,"properties":{"reply_control":{"type":"string","enum":["everyone","accounts_you_follow","mentioned_only"]}},"required":["reply_control"]}},"required":["threads"]},{"type":"object","additionalProperties":false,"properties":{"mastodon":{"type":"object","additionalProperties":false,"properties":{"visibility":{"type":"string","enum":["public","unlisted","private"]},"sensitive":{"type":"boolean"},"spoiler_text":{"type":"string","maxLength":500},"language":{"anyOf":[{"type":"string","minLength":2,"maxLength":20},{"type":"null"}]}},"required":["visibility","sensitive","spoiler_text","language"]}},"required":["mastodon"]},{"type":"object","additionalProperties":false,"properties":{"linkedin":{"type":"object","additionalProperties":false,"properties":{"visibility":{"type":"string","enum":["public","connections"]},"allow_resharing":{"type":"boolean"}},"required":["visibility","allow_resharing"]}},"required":["linkedin"]},{"type":"object","additionalProperties":false,"properties":{"tiktok":{"type":"object","additionalProperties":false,"properties":{"privacy_level":{"type":"string","enum":["public_to_everyone","mutual_follow_friends","follower_of_creator","self_only"]},"allow_comment":{"type":"boolean"},"allow_duet":{"type":"boolean"},"allow_stitch":{"type":"boolean"},"commercial_content":{"type":"string","enum":["none","own_brand","branded","both"]},"is_ai_generated":{"type":"boolean"},"video_cover_timestamp_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["privacy_level","allow_comment","allow_duet","allow_stitch","commercial_content","is_ai_generated","video_cover_timestamp_ms"]}},"required":["tiktok"]}]},{"type":"null"}]}},"required":["headline","body","destination_options"]},"asset_ids":{"type":"array","items":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"maxItems":100},"destination_id":{"anyOf":[{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."},{"type":"null"}]},"scheduled_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"time_zone":{"anyOf":[{"type":"string","example":"Europe/Berlin"},{"type":"null"}]},"schedule_mode":{"anyOf":[{"type":"string","enum":["now","exact","queue"]},{"type":"null"}]},"queue_local_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}]},"queue_window_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"attempt_count":{"type":"integer","minimum":0},"deferred":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"reason":{"type":"string","enum":["publishing_velocity","provider_cooldown"]},"until":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["reason","until"],"description":"The future time when OpenPMM can try the Post again. This value is null after that time."},{"type":"null"}]},"last_error":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","example":"provider_rejected"},"message":{"type":"string","example":"The provider rejected the post."},"retryable":{"type":"boolean"},"retry_safety":{"type":"string","enum":["safe","may_duplicate","not_applicable"]},"user_action":{"type":"string","enum":["retry","verify_provider","reauthorize","check_request"]}},"required":["code","message","retryable","retry_safety","user_action"]},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"updated_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"published_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"cancelled_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"missed_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"receipts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"rcpt_01JABCDEF","description":"Unique publication receipt ID."},"object":{"type":"string","const":"receipt"},"item_index":{"type":"integer","minimum":0,"example":0},"provider_object_id":{"type":"string","example":"1844029112345678901"},"url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"state":{"type":"string","enum":["published","processing","failed"]},"published_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]}},"required":["id","object","item_index","provider_object_id","url","state","published_at"]}},"attempts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"att_01JABCDEF","description":"Unique publishing attempt ID."},"object":{"type":"string","const":"publishing_attempt"},"number":{"type":"integer","minimum":1},"trigger":{"type":"string","enum":["initial","automatic-retry","manual-retry","provider-poll"]},"status":{"type":"string","enum":["started","succeeded","failed","ambiguous"]},"started_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"finished_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"retry_safety":{"type":"string","enum":["safe","may_duplicate"]},"error":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"user_action":{"type":"string","enum":["retry","verify_provider","reauthorize","check_request"]}},"required":["code","message","retryable","user_action"]},{"type":"null"}]},"provider":{"type":"object","additionalProperties":false,"properties":{"operation":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"request_id":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"status_code":{"anyOf":[{"type":"integer","minimum":100,"maximum":599},{"type":"null"}]},"error_code":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"subcode":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]}},"required":["operation","request_id","status_code","error_code","subcode"]}},"required":["id","object","number","trigger","status","started_at","finished_at","retry_safety","error","provider"]},"description":"Sanitized attempt history. Present only when `include=attempts`."},"destination":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"display_name":{"type":"string"},"external_id":{"type":"string"},"profile_image_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["display_name","external_id","profile_image_url"]},{"type":"null"}]},"assets":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},"type":{"type":"string","enum":["card","video","poster"],"description":"Generic asset type. `video` does not select a provider placement."},"label":{"type":"string"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"item_index":{"type":"integer","minimum":0,"description":"The zero-based body item that owns this asset."}},"required":["id","type","label","content_type","item_index"]}}},"required":["id","object","group","channel","publication_source","state","editable","terminal","action_required","next_action_at","retry_safety","available_actions","version","payload","asset_ids","destination_id","scheduled_at","time_zone","schedule_mode","queue_local_date","queue_window_id","attempt_count","deferred","last_error","created_at","updated_at","published_at","cancelled_at","missed_at","receipts","destination","assets"]},"PostAnalytics":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"post_analytics"},"post":{"type":"string","example":"send_01JABCDEF","description":"Unique Post ID."},"group":{"anyOf":[{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$","example":"launch-2026-08","description":"A value that groups related posts."},{"type":"null"}]},"channel":{"type":"string","enum":["bluesky","facebook","instagram","threads","mastodon","x","linkedin","tiktok","youtube"],"example":"x"},"published_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"state":{"type":"string","enum":["pending","running","ready","failed","reauthorization-required","unsupported"]},"metrics":{"type":"object","additionalProperties":false,"properties":{"views":{"anyOf":[{"type":"integer","minimum":0,"description":"Provider-reported number of times the Post was shown or played. This value is not unique people."},{"type":"null"}]},"comments":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"reactions":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"shares":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"saves":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"link_clicks":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["views","comments","reactions","shares","saves","link_clicks"]},"fetched_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"provider_as_of":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"next_automatic_refresh_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"last_error":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"},"at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["code","message","at"]},{"type":"null"}]}},"required":["object","post","group","channel","published_at","state","metrics","fetched_at","provider_as_of","next_automatic_refresh_at","last_error"]},"PostAnalyticsRefresh":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"post_analytics_refresh"},"outcome":{"type":"string","enum":["queued","already_queued","cooldown","unsupported","reauthorization_required"]},"analytics":{"$ref":"#/components/schemas/PostAnalytics"}},"required":["object","outcome","analytics"]},"PostGroupAnalytics":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"post_group_analytics"},"group":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$","example":"launch-2026-08","description":"A value that groups related posts."},"totals":{"type":"object","additionalProperties":false,"properties":{"views":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"comments":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"reactions":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"shares":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"saves":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"link_clicks":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]}},"required":["views","comments","reactions","shares","saves","link_clicks"]},"posts":{"type":"array","items":{"$ref":"#/components/schemas/PostAnalytics"}}},"required":["object","group","totals","posts"]},"PostGroupAnalyticsRefresh":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"post_group_analytics_refresh"},"group":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9_-]+$","example":"launch-2026-08","description":"A value that groups related posts."},"outcomes":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"post":{"type":"string","example":"send_01JABCDEF","description":"Unique Post ID."},"outcome":{"type":"string","enum":["queued","already_queued","cooldown","unsupported","reauthorization_required"]}},"required":["post","outcome"]}}},"required":["object","group","outcomes"]},"AnalyticsReport":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"analytics_report"},"from":{"type":"string","format":"date"},"until":{"type":"string","format":"date"},"bucket":{"type":"string","enum":["day","week"]},"time_zone":{"type":"string","example":"Europe/Berlin"},"buckets":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"local_start":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"bucket_end":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"local_date":{"type":"string","format":"date"},"local_end_date":{"type":"string","format":"date"},"post_count":{"type":"integer","minimum":0},"totals":{"type":"object","additionalProperties":false,"properties":{"views":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"comments":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"reactions":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"shares":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"saves":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]},"link_clicks":{"type":"object","additionalProperties":false,"properties":{"value":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"coverage":{"type":"object","additionalProperties":false,"properties":{"total_posts":{"type":"integer","minimum":0},"fetched_posts":{"type":"integer","minimum":0},"failed_posts":{"type":"integer","minimum":0}},"required":["total_posts","fetched_posts","failed_posts"]}},"required":["value","coverage"]}},"required":["views","comments","reactions","shares","saves","link_clicks"]}},"required":["local_start","bucket_end","local_date","local_end_date","post_count","totals"]}},"entries":{"type":"array","items":{"$ref":"#/components/schemas/PostAnalytics"}},"has_more":{"type":"boolean"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["object","from","until","bucket","time_zone","buckets","entries","has_more","next_cursor"]},"PostActionRequest":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean","const":true}},"required":["confirmed"]},"RetryPostRequest":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean","const":true},"acknowledge_duplicate_risk":{"type":"boolean","const":true,"description":"Required when `retry_safety` is `may_duplicate`. Verify the provider before you set this field."}},"required":["confirmed"]},"ReschedulePostRequest":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean","const":true},"scheduled_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"time_zone":{"type":"string","example":"Europe/Berlin"}},"required":["confirmed","scheduled_at","time_zone"]},"PatchWorkspaceRequest":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":200},"time_zone":{"type":"string","minLength":1,"example":"Europe/Berlin"}},"required":[]},"CancelWorkspaceSubscriptionRequest":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean","const":true},"confirmation":{"type":"string","example":"CANCEL Product Marketing"}},"required":["confirmed","confirmation"]},"WorkspaceDeletion":{"type":"object","additionalProperties":false,"properties":{"deleted":{"type":"boolean"},"removal_scheduled":{"type":"boolean"},"access_ends_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"workspace":{"$ref":"#/components/schemas/Workspace"}},"required":["deleted","removal_scheduled","access_ends_at","workspace"]},"SubmitFeedbackRequest":{"type":"object","additionalProperties":false,"properties":{"message":{"type":"string","minLength":1,"maxLength":5000,"example":"The scheduled Posts view did not refresh."}},"required":["message"]},"Feedback":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"fb_01JABCDEF","description":"Unique feedback submission ID."},"object":{"type":"string","const":"feedback"},"sent":{"type":"boolean","const":true},"submitted_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["id","object","sent","submitted_at"]},"AccountMember":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"7ccda81a-6620-4a06-8154-d138128b38d8","description":"Auth user ID."},"object":{"type":"string","const":"account_member"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}]},"joined_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["id","object","email","joined_at"]},"RemoveMemberRequest":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean","const":true},"confirmation":{"type":"string","format":"email"}},"required":["confirmed","confirmation"]},"MemberRemoval":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"7ccda81a-6620-4a06-8154-d138128b38d8","description":"Auth user ID."},"object":{"type":"string","const":"account_member"},"removed":{"type":"boolean"},"notified":{"type":"boolean"}},"required":["id","object","removed","notified"]},"CreateInvitationRequest":{"type":"object","additionalProperties":false,"properties":{"email":{"type":"string","format":"email","maxLength":254}},"required":["email"]},"AccountInvitation":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"42"},"object":{"type":"string","const":"account_invitation"},"email":{"type":"string","format":"email"},"status":{"type":"string","enum":["pending","expired"]},"created_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"delivery":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["pending","submitted","failed","ambiguous"]},"requested_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"}},"required":["status","requested_at"]},{"type":"null"}]}},"required":["id","object","email","status","created_at","expires_at","delivery"]},"InvitationRevocation":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"42"},"object":{"type":"string","const":"account_invitation"},"revoked":{"type":"boolean","const":true}},"required":["id","object","revoked"]},"ConfirmedActionRequest":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean","const":true}},"required":["confirmed"]},"NotificationSettings":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"notification_settings"},"slack":{"type":"object","additionalProperties":false,"properties":{"connection_scope":{"type":"string","const":"account"},"configured":{"type":"boolean"},"connected":{"type":"boolean"},"team":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},{"type":"null"}]},"channel":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"is_private":{"type":"boolean"}},"required":["id","name","is_private"]},{"type":"null"}]},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_notified_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"updated_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]}},"required":["connection_scope","configured","connected","team","channel","last_error","last_notified_at","updated_at"]}},"required":["object","slack"]},"PatchNotificationSettingsRequest":{"type":"object","additionalProperties":false,"properties":{"slack_channel_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["slack_channel_id"]},"SlackConnectionSession":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"dcs_01JABCDEF","description":"Unique Slack session ID."},"object":{"type":"string","const":"slack_connection_session"},"status":{"type":"string","enum":["pending","completed","failed","expired"]},"authorization_url":{"type":"string","format":"uri"},"expires_at":{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},"completed_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"failure_code":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","object","status","authorization_url","expires_at"]},"SlackDisconnect":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"slack_connection"},"disconnected":{"type":"boolean"},"provider_revoked":{"type":"boolean"},"workspace_settings_removed":{"type":"integer","minimum":0}},"required":["object","disconnected","provider_revoked","workspace_settings_removed"]},"SlackChannel":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","example":"C0123456789"},"object":{"type":"string","const":"slack_channel"},"name":{"type":"string","example":"product-marketing"},"is_private":{"type":"boolean"},"is_archived":{"type":"boolean"}},"required":["id","object","name","is_private","is_archived"]},"SlackNotificationTest":{"type":"object","additionalProperties":false,"properties":{"object":{"type":"string","const":"slack_notification_test"},"sent":{"type":"boolean","const":true},"channel":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"message_ts":{"type":"string"}},"required":["object","sent","channel","message_ts"]},"ProblemError":{"type":"object","additionalProperties":false,"properties":{"pointer":{"type":"string","example":"/posts/0/destination_id","description":"JSON Pointer to the invalid request member."},"post_id":{"type":"string","example":"send_01JABCDEF","description":"Unique Post ID."},"code":{"type":"string","example":"custom"},"detail":{"type":"string","example":"Publishing requires a destination."},"channel":{"type":"string","enum":["bluesky","facebook","instagram","threads","mastodon","x","linkedin","tiktok","youtube"],"example":"x"},"destination_id":{"anyOf":[{"type":"string","example":"dest_01JABCDEF","description":"Unique destination ID."},{"type":"null"}]},"destination_label":{"type":"string"},"asset_id":{"anyOf":[{"type":"string","example":"ast_01JABCDEF","description":"Unique asset ID."},{"type":"null"}]},"property":{"type":"string"},"media_kind":{"type":"string","enum":["image","video"]},"actual":{"anyOf":[{"$ref":"#/components/schemas/MediaMeasure"},{"type":"null"}]},"required":{"$ref":"#/components/schemas/MediaRequirementSummary"},"allowed_actions":{"type":"array","items":{"type":"string","enum":["replace_asset","remove_destination","retry"]}},"retryable":{"type":"boolean"}},"required":["code","detail"]},"Problem":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string","example":"Request failed"},"status":{"type":"integer","minimum":400,"maximum":599},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"code":{"type":"string","example":"public_invalid_request"},"category":{"type":"string","enum":["authentication","authorization","billing","conflict","internal","not_found","provider","rate_limit","validation"]},"request_id":{"type":"string","example":"req_01JABCDEF"},"retryable":{"type":"boolean"},"retry":{"type":"object","additionalProperties":false,"properties":{"safety":{"type":"string","enum":["safe","not_retryable"]},"after":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["safety","after"]},"user_action":{"type":"string","enum":["check_request","contact_support","inspect_resource","reauthorize","retry","wait"]},"reason":{"type":"string","enum":["velocity","backlog","account-paused"]},"retry_at":{"anyOf":[{"type":"string","format":"date-time","example":"2026-08-09T12:00:00.000Z"},{"type":"null"}]},"provider_requests_started":{"type":"boolean","const":false},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ProblemError"}}},"required":["type","title","status","detail","instance","code","category","request_id","retryable","retry","user_action","errors"],"description":"RFC 9457 problem details with stable OpenPMM fields.","example":{"type":"https://www.openpmm.com/docs/reference/errors#public_invalid_request","title":"Invalid request","status":400,"detail":"The request body does not match the public contract.","instance":"urn:openpmm:request:req_01JABCDEF","code":"public_invalid_request","category":"validation","request_id":"req_01JABCDEF","retryable":false,"retry":{"safety":"not_retryable","after":null},"user_action":"check_request","errors":[{"pointer":"/posts/0/destination_id","code":"custom","detail":"Publishing an entry requires a destination."}]}},"WorkspaceCollection":{"type":"object","additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Workspace"}},"has_more":{"type":"boolean","example":false},"next_cursor":{"anyOf":[{"type":"string","example":"eyJ2ZXJzaW9uIjoxfQ"},{"type":"null"}]}},"required":["data","has_more","next_cursor"]},"AssetCollection":{"type":"object","additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Asset"}},"has_more":{"type":"boolean","example":false},"next_cursor":{"anyOf":[{"type":"string","example":"eyJ2ZXJzaW9uIjoxfQ"},{"type":"null"}]}},"required":["data","has_more","next_cursor"]},"DestinationCollection":{"type":"object","additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DestinationSummary"},"description":"Connected publishing targets in the Workspace."},"has_more":{"type":"boolean","example":false},"next_cursor":{"anyOf":[{"type":"string","example":null},{"type":"null"}]}},"required":["data","has_more","next_cursor"]},"WebhookEndpointCollection":{"type":"object","additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}},"has_more":{"type":"boolean","example":false},"next_cursor":{"anyOf":[{"type":"string","example":"eyJ2ZXJzaW9uIjoxfQ"},{"type":"null"}]}},"required":["data","has_more","next_cursor"]},"PostCollection":{"type":"object","additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Post"}},"has_more":{"type":"boolean","example":false},"next_cursor":{"anyOf":[{"type":"string","example":"eyJ2ZXJzaW9uIjoxfQ"},{"type":"null"}]}},"required":["data","has_more","next_cursor"]},"AccountMemberCollection":{"type":"object","additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AccountMember"}},"has_more":{"type":"boolean","example":false},"next_cursor":{"anyOf":[{"type":"string","example":"eyJ2ZXJzaW9uIjoxfQ"},{"type":"null"}]}},"required":["data","has_more","next_cursor"]},"AccountInvitationCollection":{"type":"object","additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AccountInvitation"}},"has_more":{"type":"boolean","example":false},"next_cursor":{"anyOf":[{"type":"string","example":"eyJ2ZXJzaW9uIjoxfQ"},{"type":"null"}]}},"required":["data","has_more","next_cursor"]},"SlackChannelCollection":{"type":"object","additionalProperties":false,"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SlackChannel"}},"has_more":{"type":"boolean","example":false},"next_cursor":{"anyOf":[{"type":"string","example":"eyJ2ZXJzaW9uIjoxfQ"},{"type":"null"}]}},"required":["data","has_more","next_cursor"]}}},"paths":{"/account":{"get":{"operationId":"getAccount","x-openpmm-cli-command":"accounts show","summary":"Get Account","description":"Get the account that owns the API credential.","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The account.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/account/invitations":{"get":{"operationId":"listAccountInvitations","x-openpmm-cli-command":"team invitations list","summary":"List Invitations","description":"List pending and expired account invitations.","tags":["Team"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"All account invitations.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountInvitationCollection"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"team:read"},"post":{"operationId":"createAccountInvitation","x-openpmm-cli-command":"team invitations create","summary":"Create Invitation","description":"Create an account invitation and send its email.","tags":["Team"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/CreateInvitation"},"responses":{"201":{"description":"The created invitation.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountInvitation"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"team:write","x-idempotent":true}},"/account/invitations/{invitation_id}":{"delete":{"operationId":"revokeAccountInvitation","x-openpmm-cli-command":"team invitations revoke","summary":"Revoke Invitation","description":"Revoke a pending invitation.","tags":["Team"],"parameters":[{"name":"invitation_id","in":"path","required":true,"description":"Unique Account invitation ID.","schema":{"type":"string","example":"inv_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The revocation result.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationRevocation"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"team:write","x-idempotent":true}},"/account/invitations/{invitation_id}/resend":{"post":{"operationId":"resendAccountInvitation","x-openpmm-cli-command":"team invitations resend","summary":"Resend Invitation","description":"Send a new link for an existing pending invitation.","tags":["Team"],"parameters":[{"name":"invitation_id","in":"path","required":true,"description":"Unique Account invitation ID.","schema":{"type":"string","example":"inv_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The refreshed invitation.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountInvitation"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"team:write","x-idempotent":true}},"/account/members":{"get":{"operationId":"listAccountMembers","x-openpmm-cli-command":"team members list","summary":"List Account Members","description":"List all members in the account.","tags":["Team"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"All account members.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountMemberCollection"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"team:read"}},"/account/members/{user_id}":{"delete":{"operationId":"removeAccountMember","x-openpmm-cli-command":"team members remove","summary":"Remove Account Member","description":"Remove an account member. Send `confirmed: true` and the current member email as the confirmation value.","tags":["Team"],"parameters":[{"name":"user_id","in":"path","required":true,"description":"Unique Account member user ID.","schema":{"type":"string","example":"9c274d58-9b3a-4e5f-b2d3-733407264f02"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/RemoveMember"},"responses":{"200":{"description":"The member removal result.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberRemoval"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"team:write","x-idempotent":true}},"/account/slack-connection":{"delete":{"operationId":"disconnectSlackConnection","x-openpmm-cli-command":"slack disconnect","summary":"Disconnect Slack","description":"Disconnect Slack from the Account and clear all Workspace channel settings. Send `confirmed: true`.","tags":["Slack Notifications"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/ConfirmAction"},"responses":{"200":{"description":"The Slack disconnect result.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackDisconnect"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"notifications:write","x-idempotent":true}},"/account/slack-connection-sessions":{"post":{"operationId":"createSlackConnectionSession","x-openpmm-cli-command":"slack connect","summary":"Start Slack Connection","description":"Start an Account Slack browser consent session. Open the returned authorization URL.","tags":["Slack Notifications"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"201":{"description":"The Slack connection session.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackConnectionSession"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-required-scope":"notifications:write","x-idempotent":true}},"/account/slack-connection-sessions/{session_id}":{"get":{"operationId":"getSlackConnectionSession","x-openpmm-cli-command":"slack sessions show","summary":"Get Slack Connection","description":"Observe an Account Slack browser consent session.","tags":["Slack Notifications"],"parameters":[{"name":"session_id","in":"path","required":true,"description":"Unique connection session ID.","schema":{"type":"string","example":"dcs_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The Slack connection session.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackConnectionSession"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"notifications:read"}},"/billing":{"get":{"operationId":"getBilling","x-openpmm-cli-command":"billing show","summary":"Get Billing","description":"Get the account subscription, entitlement, and current UTC-month X usage.","tags":["Billing"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The account billing state.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Billing"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"billing:read"}},"/billing/checkout-sessions":{"post":{"operationId":"createBillingCheckoutSession","x-openpmm-cli-command":"billing subscribe","summary":"Create Checkout Session","description":"Create a Stripe-hosted paid subscription Checkout Session. New accounts receive a 14-day trial before Checkout. OpenPMM applies the configured beta offer automatically. The monthly offer gives 80% off the first paid invoice. The annual offer gives 8% off the first paid invoice. X is unavailable until the first payment succeeds. Send explicit confirmation and an idempotency key.","tags":["Billing"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/CreateBillingCheckoutSession"},"responses":{"201":{"description":"The Stripe-hosted Checkout Session.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingHostedSession"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"billing:write","x-idempotent":true,"x-live-only":true}},"/billing/portal-sessions":{"post":{"operationId":"createBillingPortalSession","x-openpmm-cli-command":"billing portal","summary":"Create Billing Portal","description":"Create a Stripe-hosted session for an existing paid subscription. Use Checkout first if the account is in the OpenPMM trial.","tags":["Billing"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"201":{"description":"The Stripe-hosted billing portal session.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingHostedSession"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"billing:write","x-idempotent":true,"x-live-only":true}},"/billing/trial-conversion":{"post":{"operationId":"convertBillingTrial","x-openpmm-cli-command":"billing convert-trial","summary":"Convert Billing Trial","description":"End a legacy Stripe-hosted trial and charge the first subscription invoice now. New OpenPMM trials must use Checkout instead. This operation unlocks X after payment succeeds. Send explicit confirmation and an idempotency key.","tags":["Billing"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/ConfirmAction"},"responses":{"200":{"description":"The completed trial conversion.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingConversion"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"billing:write","x-idempotent":true,"x-live-only":true}},"/cli-authorizations":{"post":{"operationId":"createCliAuthorization","x-openpmm-cli-command":"auth login","summary":"Start CLI Authorization","description":"Start a short-lived CLI authorization. Open the returned browser URL, sign in, and approve a Workspace before exchanging the device secret.","tags":["CLI Authorization"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"}],"requestBody":{"$ref":"#/components/requestBodies/CreateCliAuthorization"},"responses":{"201":{"description":"The pending browser authorization.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthorization"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"security":[]}},"/cli-authorizations/token":{"post":{"operationId":"exchangeCliAuthorization","x-openpmm-cli-command":"auth login","summary":"Get CLI Credential","description":"Poll a browser authorization with its device secret. A successful exchange returns the API key once and consumes the authorization.","tags":["CLI Authorization"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"}],"requestBody":{"$ref":"#/components/requestBodies/ExchangeCliAuthorization"},"responses":{"200":{"description":"The authorized CLI credential.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliCredential"}}}},"202":{"description":"Authorization is still pending.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CliAuthorizationPending"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"security":[]}},"/signup-intents":{"post":{"operationId":"createSignupIntent","x-openpmm-cli-command":"signup create","summary":"Create Signup Link","description":"Create a short-lived signup link. Open the link in a browser. Then sign up with Google or an email address and password. The verified email address must match the request.","tags":["Signup"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"}],"requestBody":{"$ref":"#/components/requestBodies/CreateSignupIntent"},"responses":{"201":{"description":"The signup link.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupIntent"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"security":[]}},"/workspaces":{"get":{"operationId":"listWorkspaces","x-openpmm-cli-command":"workspaces list","summary":"List Workspaces","description":"List the workspaces that the API credential can use.","tags":["Account"],"parameters":[{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/After"}],"responses":{"200":{"description":"A page of available workspaces.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceCollection"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"workspaces:read"}},"/workspaces/{workspace_id}":{"get":{"operationId":"getWorkspace","x-openpmm-cli-command":"workspaces show","summary":"Get Workspace","description":"Get a workspace and its current ETag.","tags":["Workspaces"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The requested workspace.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"workspaces:read"},"patch":{"operationId":"patchWorkspace","x-openpmm-cli-command":"workspaces update","summary":"Update Workspace","description":"Update the workspace name or IANA time zone. Send the current ETag in `If-Match`.","tags":["Workspaces"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"$ref":"#/components/requestBodies/PatchWorkspace"},"responses":{"200":{"description":"The updated workspace.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workspace"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"workspaces:write"}},"/workspaces/{workspace_id}/analytics":{"get":{"operationId":"getAnalyticsReport","x-openpmm-cli-command":"analytics report","summary":"Get Analytics Report","description":"Get current totals for posts published in each day or week. The totals use the latest stored value for each Post. Past buckets can increase after a refresh.","tags":["Analytics"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/AnalyticsFrom"},{"$ref":"#/components/parameters/AnalyticsUntil"},{"$ref":"#/components/parameters/AnalyticsBucket"},{"$ref":"#/components/parameters/ChannelFilter"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/After"}],"responses":{"200":{"description":"The analytics report.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsReport"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:read"}},"/workspaces/{workspace_id}/analytics/post-groups/{group}":{"get":{"operationId":"getPostGroupAnalytics","x-openpmm-cli-command":"analytics show --group","summary":"Get Group Analytics","description":"Get current totals and destination rows for one published Post group.","tags":["Analytics"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"group","in":"path","required":true,"description":"Post group value.","schema":{"type":"string","example":"launch-2026-08"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The current Post group analytics.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostGroupAnalytics"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:read"}},"/workspaces/{workspace_id}/analytics/post-groups/{group}/refresh":{"post":{"operationId":"refreshPostGroupAnalytics","x-openpmm-cli-command":"analytics refresh --group","summary":"Refresh Group Analytics","description":"Request provider refreshes for the published Posts in one group. Each Post has an independent outcome. Send an idempotency key.","tags":["Analytics"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"group","in":"path","required":true,"description":"Post group value.","schema":{"type":"string","example":"launch-2026-08"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"No Post in the group can start a refresh now.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostGroupAnalyticsRefresh"}}}},"202":{"description":"At least one Post analytics refresh is queued.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostGroupAnalyticsRefresh"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:write","x-idempotent":true}},"/workspaces/{workspace_id}/analytics/posts/{post}":{"get":{"operationId":"getPostAnalytics","x-openpmm-cli-command":"analytics show --post","summary":"Get Post Analytics","description":"Get the latest stored analytics for one published Post. This operation does not call the provider.","tags":["Analytics"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"post","in":"path","required":true,"description":"Unique Post ID.","schema":{"type":"string","example":"send_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The current Post analytics.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostAnalytics"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:read"}},"/workspaces/{workspace_id}/analytics/posts/{post}/refresh":{"post":{"operationId":"refreshPostAnalytics","x-openpmm-cli-command":"analytics refresh --post","summary":"Refresh Post Analytics","description":"Request a provider refresh for one published Post. The request returns before provider work starts. Send an idempotency key.","tags":["Analytics"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"post","in":"path","required":true,"description":"Unique Post ID.","schema":{"type":"string","example":"send_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The Post cannot start another refresh now.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostAnalyticsRefresh"}}}},"202":{"description":"The Post analytics refresh is queued.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostAnalyticsRefresh"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:write","x-idempotent":true}},"/workspaces/{workspace_id}/asset-uploads":{"post":{"operationId":"beginAssetUpload","x-openpmm-cli-command":"asset-uploads create","summary":"Create Asset Upload","description":"Create a multipart upload. Calculate one CRC64NVME checksum for each part. Send each part to its `upload_url` with all `required_headers`. Record each response ETag. Then complete the upload.","tags":["Assets"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/BeginAssetUpload"},"responses":{"201":{"description":"Upload instructions and the reserved asset identifier.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUploadInstructions"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"assets:write","x-idempotent":true}},"/workspaces/{workspace_id}/asset-uploads/{upload_id}":{"get":{"operationId":"getAssetUpload","x-openpmm-cli-command":"asset-uploads show","summary":"Get Asset Upload","description":"Get the status of an asset upload.","tags":["Assets"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"upload_id","in":"path","required":true,"description":"Unique asset upload ID.","schema":{"type":"string","example":"upl_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The upload session.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetUpload"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"assets:read"}},"/workspaces/{workspace_id}/asset-uploads/{upload_id}/complete":{"post":{"operationId":"completeAssetUpload","x-openpmm-cli-command":"asset-uploads complete","summary":"Complete Asset Upload","description":"Complete a multipart asset upload. Send the full checksum and the ETag and checksum for each uploaded part.","tags":["Assets"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"upload_id","in":"path","required":true,"description":"Unique asset upload ID.","schema":{"type":"string","example":"upl_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/CompleteAssetUpload"},"responses":{"200":{"description":"The finalized asset.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asset"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"assets:write","x-idempotent":true}},"/workspaces/{workspace_id}/assets":{"get":{"operationId":"listAssets","x-openpmm-cli-command":"assets list","summary":"List Assets","description":"List the assets in a workspace. Results use cursor order.","tags":["Assets"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/After"}],"responses":{"200":{"description":"A page of assets.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetCollection"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"assets:read"}},"/workspaces/{workspace_id}/assets/{asset_id}":{"get":{"operationId":"getAsset","x-openpmm-cli-command":"assets show","summary":"Get Asset","description":"Get an asset. Set `include=download` to get a signed download URL that is valid for five minutes.","tags":["Assets"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"asset_id","in":"path","required":true,"description":"Unique asset ID.","schema":{"type":"string","example":"ast_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/AssetInclude"}],"responses":{"200":{"description":"The requested asset.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asset"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"assets:read"},"delete":{"operationId":"deleteAsset","x-openpmm-cli-command":"assets delete","summary":"Delete Asset","description":"Delete an asset. You cannot delete an asset that a draft or post uses.","tags":["Assets"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"asset_id","in":"path","required":true,"description":"Unique asset ID.","schema":{"type":"string","example":"ast_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The deleted asset.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Asset"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"assets:write","x-idempotent":true}},"/workspaces/{workspace_id}/cancellation":{"post":{"operationId":"cancelWorkspaceSubscription","x-openpmm-cli-command":"workspaces cancel-subscription","summary":"Cancel Workspace Subscription","description":"Schedule Workspace subscription cancellation at the end of the paid term. Send `CANCEL` and the exact Workspace name as the confirmation value. OpenPMM keeps the Workspace available until the end of the term and does not issue a credit. Send `confirmed: true`, an idempotency key, and the current ETag.","tags":["Workspaces"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"$ref":"#/components/requestBodies/CancelWorkspaceSubscription"},"responses":{"200":{"description":"The Workspace subscription cancellation schedule.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceDeletion"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"billing:write","x-idempotent":true,"x-live-only":true}},"/workspaces/{workspace_id}/destination-connection-sessions":{"post":{"operationId":"createDestinationConnectionSession","x-openpmm-cli-command":"destinations connect","summary":"Start Destination Connection","description":"Start the provider authorization flow. Open `authorization_url` in a browser. Then use the session endpoint to check the status. The request schema lists all supported providers.","tags":["Destinations"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/CreateDestinationConnectionSession"},"responses":{"201":{"description":"A pending provider connection session.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationConnectionSession"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-required-scope":"destinations:write","x-idempotent":true}},"/workspaces/{workspace_id}/destination-connection-sessions/{session_id}":{"get":{"operationId":"getDestinationConnectionSession","x-openpmm-cli-command":"destinations sessions show","summary":"Get Connection Status","description":"Get the status of a provider connection. A pending session expires at `expires_at`. After Facebook authorization, select a Page when `selection_required` is true.","tags":["Destinations"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"session_id","in":"path","required":true,"description":"Unique connection session ID.","schema":{"type":"string","example":"dcs_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The requested connection session.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationConnectionSession"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"destinations:read"}},"/workspaces/{workspace_id}/destinations":{"get":{"operationId":"listDestinations","x-openpmm-cli-command":"destinations list","summary":"List Destinations","description":"List the connected publishing destinations in a workspace. This endpoint does not use pagination.","tags":["Destinations"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"All destinations in the workspace.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationCollection"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"destinations:read"}},"/workspaces/{workspace_id}/destinations/{destination_id}":{"get":{"operationId":"getDestination","x-openpmm-cli-command":"destinations show","summary":"Get Destination","description":"Get a connected publishing destination and its ETag.","tags":["Destinations"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"destination_id","in":"path","required":true,"description":"Unique destination ID.","schema":{"type":"string","example":"dest_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The requested destination.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Destination"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"destinations:read"},"patch":{"operationId":"patchDestination","x-openpmm-cli-command":"destinations update","summary":"Update Destination","description":"Enable or disable a destination. You can also make it the default destination for its channel. Send the current ETag in `If-Match`.","tags":["Destinations"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"destination_id","in":"path","required":true,"description":"Unique destination ID.","schema":{"type":"string","example":"dest_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"$ref":"#/components/requestBodies/PatchDestination"},"responses":{"200":{"description":"The updated destination.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Destination"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"destinations:write"}},"/workspaces/{workspace_id}/destinations/{destination_id}/disconnect":{"post":{"operationId":"disconnectDestination","x-openpmm-cli-command":"destinations disconnect","summary":"Disconnect Destination","description":"Disconnect the provider account for a destination and disable its publishable targets. For YouTube, this also permanently deletes the data OpenPMM retrieved from the YouTube API for this connection: the channel information, the stored performance statistics, and the upload status of each video. The identifier and link of each published video stay. This deletion cannot be undone. Send `confirmed: true`.","tags":["Destinations"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"destination_id","in":"path","required":true,"description":"Unique destination ID.","schema":{"type":"string","example":"dest_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/ConfirmAction"},"responses":{"200":{"description":"The destination disconnect result.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationDisconnect"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"destinations:write","x-idempotent":true}},"/workspaces/{workspace_id}/destinations/refresh":{"post":{"operationId":"refreshDestinations","x-openpmm-cli-command":"destinations refresh","summary":"Refresh Destinations","description":"Refresh connection state and publishable targets for all destinations. A warning has a machine-readable reason. OpenPMM keeps the last known destination state when discovery is not authoritative.","tags":["Destinations"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The destination refresh result.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestinationRefresh"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/BadGateway"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-required-scope":"destinations:write","x-idempotent":true}},"/workspaces/{workspace_id}/feedback":{"post":{"operationId":"submitFeedback","x-openpmm-cli-command":"feedback submit","summary":"Submit Feedback","description":"Send product feedback for a workspace. OpenPMM sends replies to the email of the API credential creator.","tags":["Feedback"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/SubmitFeedback"},"responses":{"201":{"description":"The feedback receipt.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Feedback"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-required-scope":"feedback:write","x-idempotent":true,"x-live-only":true}},"/workspaces/{workspace_id}/notification-settings":{"get":{"operationId":"getNotificationSettings","x-openpmm-cli-command":"slack show","summary":"Get Notification Settings","description":"Get the Account Slack connection and this Workspace channel setting.","tags":["Slack Notifications"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The notification settings.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationSettings"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"notifications:read"},"patch":{"operationId":"patchNotificationSettings","x-openpmm-cli-command":"slack update","summary":"Update Notification Settings","description":"Select or clear the Slack notification channel.","tags":["Slack Notifications"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"requestBody":{"$ref":"#/components/requestBodies/PatchNotificationSettings"},"responses":{"200":{"description":"The updated notification settings.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationSettings"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/BadGateway"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-required-scope":"notifications:write"}},"/workspaces/{workspace_id}/posts":{"post":{"operationId":"createPosts","x-openpmm-cli-command":"posts create","summary":"Create Post","description":"Create one or more Posts. Set `when` to publish now, schedule, or save drafts. X, Bluesky, Mastodon, and Threads publish later body items as replies. Use `media_items` to attach Assets to a body item. A Bluesky body item accepts up to four images or one MP4 video. Bluesky images require alt text. A Facebook Post with a video uses the Reel placement automatically. Immediate publication returns before provider work completes. Active provider work returns `202` and `Retry-After`. Read the Post while `terminal` and `action_required` are both false. Do not send Create Post again. Publishing requires `confirmed: true` and a live credential. X Post bodies cannot contain URLs.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/OptionalIdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/CreatePosts"},"responses":{"200":{"description":"An idempotent replay of the existing Post set.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSet"}}}},"201":{"description":"The created draft or post set.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSet"}}}},"202":{"description":"The accepted immediate Post set. Provider work continues.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSet"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-required-scope":"posts:write","x-idempotent":true},"get":{"operationId":"listPosts","x-openpmm-cli-command":"posts list","summary":"List Posts","description":"List posts in cursor order. Each item includes destination and asset details.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/After"},{"$ref":"#/components/parameters/PostView"},{"$ref":"#/components/parameters/ChannelFilter"},{"$ref":"#/components/parameters/GroupFilter"},{"$ref":"#/components/parameters/DestinationFilter"},{"$ref":"#/components/parameters/StateFilter"},{"$ref":"#/components/parameters/CreatedAfter"},{"$ref":"#/components/parameters/ScheduledBefore"},{"$ref":"#/components/parameters/PostInclude"}],"responses":{"200":{"description":"A page of posts.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCollection"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:read"}},"/workspaces/{workspace_id}/posts/{post}":{"get":{"operationId":"getPost","x-openpmm-cli-command":"posts show","summary":"Get Post","description":"Get a post, its current status, its attempt count, and its publication receipts.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"post","in":"path","required":true,"description":"Unique Post ID.","schema":{"type":"string","example":"send_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/PostInclude"}],"responses":{"200":{"description":"The requested post.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:read"},"patch":{"operationId":"patchPost","x-openpmm-cli-command":"posts update","summary":"Update Post","description":"Update the content, publishing options, or assets of a draft Post. You can update content and publishing options on a scheduled Post. Cancel its schedule before you change its assets or thread structure. Send the current Post ETag in `If-Match`.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"post","in":"path","required":true,"description":"Unique Post ID.","schema":{"type":"string","example":"send_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"$ref":"#/components/requestBodies/PatchPost"},"responses":{"200":{"description":"The updated Post.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:write"},"delete":{"operationId":"deletePost","x-openpmm-cli-command":"posts delete","summary":"Delete Post","description":"Delete a draft Post. A submitted Post cannot be deleted. Send the current Post ETag in `If-Match`.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"post","in":"path","required":true,"description":"Unique Post ID.","schema":{"type":"string","example":"send_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/IfMatch"}],"responses":{"200":{"description":"The deletion result.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostDeletion"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:write","x-idempotent":true}},"/workspaces/{workspace_id}/posts/{post}/cancel":{"post":{"operationId":"cancelPost","x-openpmm-cli-command":"posts cancel","summary":"Cancel Post","description":"Cancel a Post before provider delivery. A scheduled or queued Post returns to the draft state. An accepted immediate Post returns with the cancelled state. Send `confirmed: true` and the current Post ETag.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"post","in":"path","required":true,"description":"Unique Post ID.","schema":{"type":"string","example":"send_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"$ref":"#/components/requestBodies/PostAction"},"responses":{"200":{"description":"The updated Post.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:write","x-idempotent":true,"x-live-only":true}},"/workspaces/{workspace_id}/posts/{post}/reschedule":{"post":{"operationId":"reschedulePost","x-openpmm-cli-command":"posts reschedule","summary":"Reschedule Post","description":"Set a new publication time for a scheduled post. Include a UTC offset in `scheduled_at`. Use `time_zone` to keep the local scheduling context.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"post","in":"path","required":true,"description":"Unique Post ID.","schema":{"type":"string","example":"send_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"$ref":"#/components/requestBodies/ReschedulePost"},"responses":{"200":{"description":"The rescheduled post.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:write","x-idempotent":true,"x-live-only":true}},"/workspaces/{workspace_id}/posts/{post}/retry":{"post":{"operationId":"retryPost","x-openpmm-cli-command":"posts retry","summary":"Retry Post","description":"Retry a failed Post. OpenPMM resumes items that have receipts. A Post in `needs-attention` can have a provider object without a receipt. Set `acknowledge_duplicate_risk` to true only after you verify the provider.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"post","in":"path","required":true,"description":"Unique Post ID.","schema":{"type":"string","example":"send_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"$ref":"#/components/requestBodies/RetryPost"},"responses":{"200":{"description":"The post queued for retry.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"202":{"description":"The accepted retry. Provider work continues.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Post"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:write","x-idempotent":true,"x-live-only":true}},"/workspaces/{workspace_id}/posts/move-in-queue":{"post":{"operationId":"movePostsInQueue","x-openpmm-cli-command":"posts move-in-queue","summary":"Move Queued Posts","description":"Move one or more queued Posts to a local calendar date. OpenPMM selects a new time from each destination queue policy in the Workspace time zone. The move is atomic.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/MovePostsInQueue"},"responses":{"200":{"description":"The moved Post set.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSet"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"posts:write","x-idempotent":true}},"/workspaces/{workspace_id}/posts/publish":{"post":{"operationId":"publishPosts","x-openpmm-cli-command":"posts publish","summary":"Publish Posts","description":"Publish or schedule every draft Post in one group. The operation returns after OpenPMM accepts the state change. It does not wait for provider completion. Active provider work returns `202` and `Retry-After`. Read each Post while `terminal` and `action_required` are both false. Do not send Publish Posts again. The response includes all stored receipts. Each Post keeps its ID. Send explicit confirmation and an idempotency key.","tags":["Posts"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/PublishPosts"},"responses":{"200":{"description":"A replayed publication.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSet"}}}},"201":{"description":"The scheduled Post set.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSet"}}}},"202":{"description":"The accepted immediate Post set. Provider work continues.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostSet"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/BadGateway"}},"x-required-scope":"posts:write","x-idempotent":true,"x-live-only":true}},"/workspaces/{workspace_id}/slack-channels":{"get":{"operationId":"listSlackChannels","x-openpmm-cli-command":"slack channels","summary":"List Slack Channels","description":"List Slack channels available to the connected bot.","tags":["Slack Notifications"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"All available Slack channels.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackChannelCollection"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/BadGateway"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-required-scope":"notifications:read"}},"/workspaces/{workspace_id}/slack-notification-tests":{"post":{"operationId":"createSlackNotificationTest","x-openpmm-cli-command":"slack test","summary":"Create Slack Test","description":"Send a real test message to the selected Slack channel. Send `confirmed: true`.","tags":["Slack Notifications"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/ConfirmAction"},"responses":{"201":{"description":"The Slack test result.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackNotificationTest"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/UnprocessableContent"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/BadGateway"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-required-scope":"notifications:write","x-idempotent":true,"x-live-only":true}},"/workspaces/{workspace_id}/webhook-endpoints":{"get":{"operationId":"listWebhookEndpoints","x-openpmm-cli-command":"webhooks list","summary":"List Webhook Endpoints","description":"List webhook endpoints in a workspace. The response never contains signing secrets.","tags":["Webhooks"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/After"}],"responses":{"200":{"description":"All webhook endpoints in the workspace.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCollection"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"webhooks:read"},"post":{"operationId":"createWebhookEndpoint","x-openpmm-cli-command":"webhooks create","summary":"Create Webhook Endpoint","description":"Create a webhook endpoint. The response contains the signing secret once. Full-content delivery also requires `posts:read`.","tags":["Webhooks"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"$ref":"#/components/requestBodies/CreateWebhookEndpoint"},"responses":{"201":{"description":"The endpoint and its new signing secret.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointSecret"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"webhooks:write","x-idempotent":true}},"/workspaces/{workspace_id}/webhook-endpoints/{endpoint_id}":{"get":{"operationId":"getWebhookEndpoint","x-openpmm-cli-command":"webhooks show","summary":"Get Webhook Endpoint","description":"Get a webhook endpoint.","tags":["Webhooks"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"endpoint_id","in":"path","required":true,"description":"Unique webhook endpoint ID.","schema":{"type":"string","example":"wh_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"}],"responses":{"200":{"description":"The webhook endpoint.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"webhooks:read"},"patch":{"operationId":"patchWebhookEndpoint","x-openpmm-cli-command":"webhooks update","summary":"Update Webhook Endpoint","description":"Update a webhook endpoint. Full-content delivery also requires `posts:read`. Send the current ETag in `If-Match`.","tags":["Webhooks"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"endpoint_id","in":"path","required":true,"description":"Unique webhook endpoint ID.","schema":{"type":"string","example":"wh_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IfMatch"}],"requestBody":{"$ref":"#/components/requestBodies/PatchWebhookEndpoint"},"responses":{"200":{"description":"The updated endpoint.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"webhooks:write"},"delete":{"operationId":"deleteWebhookEndpoint","x-openpmm-cli-command":"webhooks delete","summary":"Delete Webhook Endpoint","description":"Delete a webhook endpoint. Pending deliveries for the endpoint stop. Send the current ETag in `If-Match`.","tags":["Webhooks"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"endpoint_id","in":"path","required":true,"description":"Unique webhook endpoint ID.","schema":{"type":"string","example":"wh_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IfMatch"}],"responses":{"200":{"description":"Confirmation that the endpoint was deleted.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedWebhookEndpoint"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"webhooks:write"}},"/workspaces/{workspace_id}/webhook-endpoints/{endpoint_id}/rotate-secret":{"post":{"operationId":"rotateWebhookEndpointSecret","x-openpmm-cli-command":"webhooks rotate-secret","summary":"Rotate Webhook Secret","description":"Create a new signing secret. OpenPMM also signs with the previous secret for 24 hours.","tags":["Webhooks"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"endpoint_id","in":"path","required":true,"description":"Unique webhook endpoint ID.","schema":{"type":"string","example":"wh_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The new secret and the previous-secret expiry time.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecretRotation"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"webhooks:write","x-idempotent":true}},"/workspaces/{workspace_id}/webhook-endpoints/{endpoint_id}/test":{"post":{"operationId":"testWebhookEndpoint","x-openpmm-cli-command":"webhooks test","summary":"Test Webhook Endpoint","description":"Send one signed `webhook.test` event. The event contains no post or post content.","tags":["Webhooks"],"parameters":[{"name":"workspace_id","in":"path","required":true,"description":"Unique workspace ID.","schema":{"type":"string","example":"ws_01JABCDEF"}},{"name":"endpoint_id","in":"path","required":true,"description":"Unique webhook endpoint ID.","schema":{"type":"string","example":"wh_01JABCDEF"}},{"$ref":"#/components/parameters/OpenPMMRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"responses":{"200":{"description":"The result of the test attempt.","headers":{"OpenPMM-Request-Id":{"$ref":"#/components/headers/OpenPMMRequestId"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTest"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}},"x-required-scope":"webhooks:write","x-idempotent":true}}}}