API reference · v1.3.0
API reference
Every endpoint of the Publishing Studio API, generated from its OpenAPI spec.
API access follows the issuing member's current organization and ecosystem permissions, narrowed to the key's account groups when it has them. Social access tokens never leave Publishing Studio. Every response carries X-Request-Id; API-key responses also carry X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset and X-RateLimit-Bucket (read or write). GET requests spend a separate read budget (default 1800/min) from writes (default 600/min).
- Base URL
https://dashboard.lifebliss.app/api/v1- Auth
Authorization: Bearer ps_…· scopes- Endpoints
- 33 · Download openapi.json
Accounts
Who you are, and the accounts and groups your key may publish to.
curl "https://dashboard.lifebliss.app/api/v1/identity" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
curl "https://dashboard.lifebliss.app/api/v1/accounts" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
List permitted account groups
/account-groupscurl "https://dashboard.lifebliss.app/api/v1/account-groups" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
curl "https://dashboard.lifebliss.app/api/v1/org/accounts/ID/boards" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
Posts
Create, publish, schedule, read, cancel and retry posts. Read the guide →
List latest 50 accessible posts, or the status of up to 100 posts by ID
/postsWithout ids: the latest 50 posts with progress counts. With ids (1–100 comma-separated UUIDs): each post's status, progress and every target's status, platformPostUrl and error, in request order; IDs the key cannot see are returned in notFound.
Parameters
idsquery · stringComma-separated post IDs (max 100) for batch status.
curl "https://dashboard.lifebliss.app/api/v1/posts" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
Create, publish or schedule a post
/postsParameters
Idempotency-Keyheader · stringrequiredPreferheader · "respond-async"
Body CreatePost
At least one target or group is required. Scheduling and queue allocation are mutually exclusive.
contentstringmediaItemsarray of MediaItemtargetsarray of objectgroupIdsarray of string, uuidpublishNowbooleandefault false
scheduledForstring, date-timetimezonestringdefault "UTC"
useQueuebooleanqueueIdstring, uuid
curl -X POST "https://dashboard.lifebliss.app/api/v1/posts" \
-H "Authorization: Bearer $PS_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"content": "The full session is live.",
"mediaItems": [
{
"type": "video",
"url": "https://cdn.example.org/talk.mp4"
}
],
"targets": [
{
"accountId": "FACEBOOK_ACCOUNT_ID"
},
{
"accountId": "YOUTUBE_ACCOUNT_ID",
"customContent": "Full session ↓"
}
],
"scheduledFor": "2026-11-01T18:30:00Z",
"timezone": "Asia/Kolkata"
}'Responses
- 200Synchronous publishing completed
- 201Draft or scheduled post created
- 202Queued for publishing
- 207Partial synchronous result
- 400Invalid request
- 401Unauthorized
- 403Forbidden
- 409Duplicate content or request in flight
- 422Validation error or idempotency key reused
- 429Rate limited
Read post and paginated target results
/posts/{id}Parameters
idpath · string, uuidrequiredpagequery · integerstatusquery · "pending" | "publishing" | "published" | "failed"
curl "https://dashboard.lifebliss.app/api/v1/posts/ID" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
curl -X DELETE "https://dashboard.lifebliss.app/api/v1/posts/ID" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
curl -X POST "https://dashboard.lifebliss.app/api/v1/posts/ID/retry" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 202Failed targets enqueued
- 404Post unavailable or retry failed
Media
Signed upload URLs for images and video. Read the guide →
Request a signed media upload URL
/media/presignBody
filenamestringrequiredcontentTypestringrequiredsizeintegerrequiredmin 1
curl -X POST "https://dashboard.lifebliss.app/api/v1/media/presign" \
-H "Authorization: Bearer $PS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "talk.mp4",
"contentType": "video/mp4",
"size": 48213004
}'Responses
- 200Success
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
Validation
Network limits, and checking a post against them. No key needed. Read the guide →
Read platform capabilities
/validatecurl "https://dashboard.lifebliss.app/api/v1/validate"Responses
- 200Capabilities
Validate content without publishing
/validateBody
contentstringplatformsarray of stringrequiredmediaItemsarray of MediaItem
curl -X POST "https://dashboard.lifebliss.app/api/v1/validate" \
-H "Content-Type: application/json" \
-d '{
"platforms": [
"platform"
],
"content": "The full session is live.",
"mediaItems": [
{
"type": "image",
"url": "https://cdn.example.org/talk.mp4"
}
]
}'Responses
- 200Validation result
Connect
Headless OAuth: let your users connect accounts from your product. Read the guide →
Start a white-label OAuth connection
/connect/{platform}/headlessAfter consent the user lands on redirectUrl with connect_token. Only this API key can use that token.
Parameters
platformpath · stringrequiredAn OAuth platform, e.g. facebook, instagram, youtube, linkedin, tiktok, mastodon.
Body HeadlessConnectStart
redirectUrlstring, urirequiredhttps:// (http only for localhost). Receives connect_token, platform and step, or error.
ecosystemIdstring, uuidprofileIdstring, uuidinstancestringMastodon-family platforms: the user's server.
curl -X POST "https://dashboard.lifebliss.app/api/v1/connect/PLATFORM/headless" \
-H "Authorization: Bearer $PS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"redirectUrl": "https://app.example.org/connected",
"ecosystemId": "ECOSYSTEM_ID",
"profileId": "PROFILE_ID"
}'Responses
- 201Send the user to authUrl within 15 minutes
- 400Invalid redirect URL, instance, or a platform that does not use OAuth
- 401Invalid or expired credential
- 402Plan required
- 403Insufficient permission
- 424The user's server refused registration
- 429Rate limit exceeded
List what a headless connection can publish to
/connect/selectMust use the API key that started the flow.
Parameters
tokenquery · stringrequiredsearchquery · stringpagequery · integer
curl "https://dashboard.lifebliss.app/api/v1/connect/select?token=TOKEN" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Choices
- 401Invalid or expired credential
- 403Insufficient permission
- 410Token expired
- 429Rate limit exceeded
Finish a headless connection
/connect/selectMust use the API key that started the flow.
Body FinishConnect
tokenstringrequiredplatformAccountIdstringplatformAccountIdsarray of stringmax 500 items
groupIdstring, uuidRequired for a key limited to account groups; must be one of its groups.
newGroupNamestringmax 80 chars
curl -X POST "https://dashboard.lifebliss.app/api/v1/connect/select" \
-H "Authorization: Bearer $PS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"token": "CONNECT_TOKEN",
"platformAccountId": "PLATFORM_ACCOUNT_ID",
"platformAccountIds": [
"PLATFORM_ACCOUNT_ID"
]
}'Responses
- 201Connected
- 400Invalid request, or a group-limited key without groupId
- 401Invalid or expired credential
- 402Plan limit
- 403Insufficient permission
- 409Accounts no longer offered
- 410Token expired
- 429Rate limit exceeded
Webhooks
Endpoints, deliveries and replays for signed event notifications. Read the guide →
List webhook endpoints
/webhook-endpointsOrg admins only. Not available to keys limited to account groups.
curl "https://dashboard.lifebliss.app/api/v1/webhook-endpoints" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Endpoints and subscribable events
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
Create a webhook endpoint
/webhook-endpointsOrg admins only. Not available to keys limited to account groups.
Body CreateWebhookEndpoint
urlstring, urirequiredPublic https:// URL.
eventsarray of "post.published" | "post.partial" | "post.failed" | "account.connected" | "account.needs_reauth" | "account.disconnected"requireddescriptionstringmax 200 chars
curl -X POST "https://dashboard.lifebliss.app/api/v1/webhook-endpoints" \
-H "Authorization: Bearer $PS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://cdn.example.org/talk.mp4",
"events": [
"post.published"
],
"description": "Production listener"
}'Responses
- 201Created; the secret is shown only now
- 400Invalid URL or event
- 401Invalid or expired credential
- 403Insufficient permission
- 409Organization already has 10 endpoints
- 429Rate limit exceeded
Get a webhook endpoint
/webhook-endpoints/{id}Org admins only. Not available to keys limited to account groups.
Parameters
idpath · string, uuidrequired
curl "https://dashboard.lifebliss.app/api/v1/webhook-endpoints/ID" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Endpoint
- 401Invalid or expired credential
- 403Insufficient permission
- 404Not found
- 429Rate limit exceeded
Update, enable, disable or rotate a webhook endpoint
/webhook-endpoints/{id}Org admins only. Not available to keys limited to account groups.
Parameters
idpath · string, uuidrequired
Body UpdateWebhookEndpoint
urlstring, urieventsarray of "post.published" | "post.partial" | "post.failed" | "account.connected" | "account.needs_reauth" | "account.disconnected"descriptionstringmax 200 chars
enabledbooleanEnabling clears disabledReason and resumes queued deliveries.
rotateSecretbooleanIssue a new secret; the old one stops working immediately.
curl -X PATCH "https://dashboard.lifebliss.app/api/v1/webhook-endpoints/ID" \
-H "Authorization: Bearer $PS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://cdn.example.org/talk.mp4",
"events": [
"post.published"
],
"description": "Production listener"
}'Responses
- 200Updated; includes secret when rotated
- 400Invalid change
- 401Invalid or expired credential
- 403Insufficient permission
- 404Not found
- 429Rate limit exceeded
Delete a webhook endpoint and its delivery log
/webhook-endpoints/{id}Org admins only. Not available to keys limited to account groups.
Parameters
idpath · string, uuidrequired
curl -X DELETE "https://dashboard.lifebliss.app/api/v1/webhook-endpoints/ID" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Deleted
- 401Invalid or expired credential
- 403Insufficient permission
- 404Not found
- 429Rate limit exceeded
Send a webhook.test event now
/webhook-endpoints/{id}/testSent whether or not the endpoint is enabled. Never retried and never counts toward auto-disable.
Parameters
idpath · string, uuidrequired
curl -X POST "https://dashboard.lifebliss.app/api/v1/webhook-endpoints/ID/test" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Result of the attempt; ok is false when the receiver rejected it
- 401Invalid or expired credential
- 403Insufficient permission
- 404Not found
- 429Rate limit exceeded
List deliveries, newest first
/webhook-endpoints/{id}/deliveriesOrg admins only. Not available to keys limited to account groups.
Parameters
idpath · string, uuidrequiredstatusquery · "pending" | "sending" | "succeeded" | "dead"beforequery · string, date-timecreatedAt of the last row of the previous page.
curl "https://dashboard.lifebliss.app/api/v1/webhook-endpoints/ID/deliveries" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 20050 per page; kept 30 days
- 400Invalid filter
- 401Invalid or expired credential
- 403Insufficient permission
- 404Not found
- 429Rate limit exceeded
Queue a delivery again with a fresh set of attempts
/webhook-endpoints/{id}/deliveries/{deliveryId}/retryOrg admins only. Not available to keys limited to account groups.
Parameters
idpath · string, uuidrequireddeliveryIdpath · string, uuidrequired
curl -X POST "https://dashboard.lifebliss.app/api/v1/webhook-endpoints/ID/deliveries/DELIVERY_ID/retry" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 202Queued
- 401Invalid or expired credential
- 403Insufficient permission
- 404Not found
- 409In flight, a test event, or missing
- 429Rate limit exceeded
Analytics
Social media analytics report
/analytics/reportThe connected accounts' analytics, as on the Analytics page: followers and follower growth per account, metric totals (reach, impressions, views, likes, comments, shares, saves, quotes, clicks), engagement grouped by day, post type, account, campaign and topic, best times to post, and the posts themselves with their metrics, paged. Only accounts the key's owner can reach are included; a key limited to account groups sees only those groups' accounts. Metrics a network doesn't report are null, not zero.
Parameters
rangequery · "24h" | "7" | "30" | "90"Days ending today, or the last 24 hours. Ignored when from/to are given.
fromquery · string, dateFirst day (YYYY-MM-DD), with to.
toquery · string, dateLast day (YYYY-MM-DD), with from.
timezonequery · stringIANA timezone for days and the window, e.g. Asia/Kolkata.
platformquery · stringOnly this network, e.g. youtube, instagram, facebook.
accountquery · string, uuidOnly this account id.
ecosystemquery · string, uuidOnly accounts in this ecosystem id.
groupquery · string, uuidOnly accounts in this account group id.
sourcequery · "all" | "tool" | "native"Posts published through the studio (tool), directly on the network (native), or both.
modequery · "lifetime" | "period" | "age7"lifetime: each post's latest totals. period: activity inside the window, on any post. age7: each post's totals at 7 days old.
campaignquery · stringOnly posts tagged with this campaign.
topicquery · stringOnly posts tagged with this topic.
sortquery · "published" | "engagement" | "views" | "likes" | "comments" | "reach"Order of posts.items, highest first (published: newest first).
limitquery · integerPosts per page.
offsetquery · integerPosts to skip.
curl "https://dashboard.lifebliss.app/api/v1/analytics/report" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 400Invalid filter
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
Site
Website visit analytics
/site/visitsVisits to the public website: people (each counted once a month, with no cookies and no IP addresses stored), visits, page views, bounce rate and time on site; by day (by hour for 24h), page, source, campaign, country and device; where visits end; page-by-page journeys; the visit-to-account funnel; and answers to the "what stopped you today?" question. Platform staff, signed-in studio users and scanners are left out of the people numbers. Staff keys only.
Parameters
rangequery · "24h" | "7d" | "30d" | "90d"Time window ending now.
curl "https://dashboard.lifebliss.app/api/v1/site/visits" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 400Invalid filter
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
Sign-up and sign-in analytics
/site/signinsPeople who opened the sign-up and log-in pages, sign-up and sign-in attempts with failures and their reasons, the latest attempts, and the newest accounts with whether they confirmed their email. Includes email addresses. Staff keys only.
Parameters
rangequery · "24h" | "7d" | "30d" | "90d"Time window ending now.
curl "https://dashboard.lifebliss.app/api/v1/site/signins" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 400Invalid filter
- 401Invalid or expired credential
- 403Insufficient permission
- 429Rate limit exceeded
Live
YouTube Live channels and their stream keys
/live/channelsThe org's connected YouTube channels, each with the stream (RTMP server and key) its broadcasts use. Org admins' keys only.
Parameters
rangequery · "24h" | "7" | "30" | "90"Days ending today, or the last 24 hours. Ignored when from/to are given.
fromquery · string, dateFirst day (YYYY-MM-DD), with to.
toquery · string, dateLast day (YYYY-MM-DD), with from.
timezonequery · stringIANA timezone for days and the window, e.g. Asia/Kolkata.
platformquery · stringOnly this network, e.g. youtube, instagram, facebook.
accountquery · string, uuidOnly this account id.
ecosystemquery · string, uuidOnly accounts in this ecosystem id.
groupquery · string, uuidOnly accounts in this account group id.
sourcequery · "all" | "tool" | "native"Posts published through the studio (tool), directly on the network (native), or both.
modequery · "lifetime" | "period" | "age7"lifetime: each post's latest totals. period: activity inside the window, on any post. age7: each post's totals at 7 days old.
campaignquery · stringOnly posts tagged with this campaign.
topicquery · stringOnly posts tagged with this topic.
sortquery · "published" | "engagement" | "views" | "likes" | "comments" | "reach"Order of posts.items, highest first (published: newest first).
limitquery · integerPosts per page.
offsetquery · integerPosts to skip.
curl "https://dashboard.lifebliss.app/api/v1/live/channels" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 400Invalid filter
- 401Invalid or expired credential
- 402The plan doesn't include Live
- 403Insufficient permission
- 429Rate limit exceeded
Stream keys available on a channel
/live/streamsEvery live stream on the channel in YouTube, for choosing which one it uses. Costs YouTube API quota.
Parameters
accountIdquery · string, uuidrequired
curl "https://dashboard.lifebliss.app/api/v1/live/streams?accountId=ACCOUNTID" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 400Invalid filter
- 401Invalid or expired credential
- 402The plan doesn't include Live
- 403Insufficient permission
- 429Rate limit exceeded
Set a channel's stream key
/live/mapChoose which of the channel's streams its broadcasts bind to. Sends the live.key_set webhook.
Parameters
rangequery · "24h" | "7" | "30" | "90"Days ending today, or the last 24 hours. Ignored when from/to are given.
fromquery · string, dateFirst day (YYYY-MM-DD), with to.
toquery · string, dateLast day (YYYY-MM-DD), with from.
timezonequery · stringIANA timezone for days and the window, e.g. Asia/Kolkata.
platformquery · stringOnly this network, e.g. youtube, instagram, facebook.
accountquery · string, uuidOnly this account id.
ecosystemquery · string, uuidOnly accounts in this ecosystem id.
groupquery · string, uuidOnly accounts in this account group id.
sourcequery · "all" | "tool" | "native"Posts published through the studio (tool), directly on the network (native), or both.
modequery · "lifetime" | "period" | "age7"lifetime: each post's latest totals. period: activity inside the window, on any post. age7: each post's totals at 7 days old.
campaignquery · stringOnly posts tagged with this campaign.
topicquery · stringOnly posts tagged with this topic.
sortquery · "published" | "engagement" | "views" | "likes" | "comments" | "reach"Order of posts.items, highest first (published: newest first).
limitquery · integerPosts per page.
offsetquery · integerPosts to skip.
Body
accountIdstring, uuidrequiredstreamIdstringrequired
curl -X POST "https://dashboard.lifebliss.app/api/v1/live/map" \
-H "Authorization: Bearer $PS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "ACCOUNT_ID",
"streamId": "streamId"
}'Responses
- 200Success
- 400Invalid filter
- 401Invalid or expired credential
- 402The plan doesn't include Live
- 403Insufficient permission
- 429Rate limit exceeded
- 502YouTube refused, or the stream no longer exists
Recent live broadcasts
/liveThe 20 latest scheduled broadcasts with per-channel counts.
Parameters
rangequery · "24h" | "7" | "30" | "90"Days ending today, or the last 24 hours. Ignored when from/to are given.
fromquery · string, dateFirst day (YYYY-MM-DD), with to.
toquery · string, dateLast day (YYYY-MM-DD), with from.
timezonequery · stringIANA timezone for days and the window, e.g. Asia/Kolkata.
platformquery · stringOnly this network, e.g. youtube, instagram, facebook.
accountquery · string, uuidOnly this account id.
ecosystemquery · string, uuidOnly accounts in this ecosystem id.
groupquery · string, uuidOnly accounts in this account group id.
sourcequery · "all" | "tool" | "native"Posts published through the studio (tool), directly on the network (native), or both.
modequery · "lifetime" | "period" | "age7"lifetime: each post's latest totals. period: activity inside the window, on any post. age7: each post's totals at 7 days old.
campaignquery · stringOnly posts tagged with this campaign.
topicquery · stringOnly posts tagged with this topic.
sortquery · "published" | "engagement" | "views" | "likes" | "comments" | "reach"Order of posts.items, highest first (published: newest first).
limitquery · integerPosts per page.
offsetquery · integerPosts to skip.
curl "https://dashboard.lifebliss.app/api/v1/live" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 400Invalid filter
- 401Invalid or expired credential
- 402The plan doesn't include Live
- 403Insufficient permission
- 429Rate limit exceeded
Schedule a live broadcast on many channels
/liveCreates one YouTube broadcast per channel, each bound to that channel's mapped stream key. Channels are created in the background; each sends live.broadcast_scheduled when ready.
Parameters
rangequery · "24h" | "7" | "30" | "90"Days ending today, or the last 24 hours. Ignored when from/to are given.
fromquery · string, dateFirst day (YYYY-MM-DD), with to.
toquery · string, dateLast day (YYYY-MM-DD), with from.
timezonequery · stringIANA timezone for days and the window, e.g. Asia/Kolkata.
platformquery · stringOnly this network, e.g. youtube, instagram, facebook.
accountquery · string, uuidOnly this account id.
ecosystemquery · string, uuidOnly accounts in this ecosystem id.
groupquery · string, uuidOnly accounts in this account group id.
sourcequery · "all" | "tool" | "native"Posts published through the studio (tool), directly on the network (native), or both.
modequery · "lifetime" | "period" | "age7"lifetime: each post's latest totals. period: activity inside the window, on any post. age7: each post's totals at 7 days old.
campaignquery · stringOnly posts tagged with this campaign.
topicquery · stringOnly posts tagged with this topic.
sortquery · "published" | "engagement" | "views" | "likes" | "comments" | "reach"Order of posts.items, highest first (published: newest first).
limitquery · integerPosts per page.
offsetquery · integerPosts to skip.
Body ScheduleLive
Give groupId or accountIds.
groupIdstring, uuid, nullableaccountIdsarray of string, uuidtitlestringrequiredmax 100 chars
descriptionstringmax 5000 chars
scheduledStartTimestring, date-timerequiredprivacy"public" | "unlisted" | "private"default "public"
thumbnailUrlstring, uri, nullableautoStartbooleandefault true
autoStopbooleandefault true
curl -X POST "https://dashboard.lifebliss.app/api/v1/live" \
-H "Authorization: Bearer $PS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "title",
"scheduledStartTime": "2026-11-01T18:30:00Z",
"groupId": "GROUP_ID",
"accountIds": [
"ACCOUNT_ID"
]
}'Responses
- 202Accepted
- 400Invalid request
- 401Invalid or expired credential
- 402The plan doesn't include Live
- 403Insufficient permission
- 429Rate limit exceeded
A broadcast's channels, keys and status
/live/{id}Each channel's status, stream key, RTMP server and watch URL.
Parameters
idpath · string, uuidrequiredBroadcast id
curl "https://dashboard.lifebliss.app/api/v1/live/ID" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 400Invalid filter
- 401Invalid or expired credential
- 402The plan doesn't include Live
- 403Insufficient permission
- 404Not found
- 429Rate limit exceeded
Cancel or end one channel's broadcast
/live/targets/{id}/cancelDeletes a scheduled broadcast, or ends a live one.
Parameters
idpath · string, uuidrequiredTarget id from GET /live/{id}
curl -X POST "https://dashboard.lifebliss.app/api/v1/live/targets/ID/cancel" \
-H "Authorization: Bearer $PS_API_KEY"Responses
- 200Success
- 400Invalid filter
- 401Invalid or expired credential
- 402The plan doesn't include Live
- 403Insufficient permission
- 429Rate limit exceeded
Schemas
Objects used in requests and responses.
ErrorerrorstringrequiredcodestringrequestIdstringSame value as the X-Request-Id header, on errors raised before the handler runs.
MediaItemtype"image" | "video" | "gif" | "document"requiredurlstring, urirequiredthumbnailUrlstring, urialtTextstringfilenamestringmimeTypestringsizeintegermin 1
widthintegermin 1
heightintegermin 1
durationMsnumber
CreatePostAt least one target or group is required. Scheduling and queue allocation are mutually exclusive.contentstringmediaItemsarray of MediaItemtargetsarray of objectgroupIdsarray of string, uuidpublishNowbooleandefault false
scheduledForstring, date-timetimezonestringdefault "UTC"
useQueuebooleanqueueIdstring, uuid
AcceptedPostidstring, uuidrequiredstatusstringrequiredqueuedintegertargetCountinteger
IdentitytenantIdstring, uuiduserIdstring, uuidrole"admin" | "member" | "viewer"keyobject
WebhookEndpointidstring, uuidurlstring, uridescriptionstringeventsarray of "post.published" | "post.partial" | "post.failed" | "account.connected" | "account.needs_reauth" | "account.disconnected"enabledbooleandisabledReasonstring, nullableSet when Studio disabled the endpoint after repeated dead-lettered deliveries.
lastSuccessAtstring, date-time, nullablelastFailureAtstring, date-time, nullablecreatedAtstring, date-timeupdatedAtstring, date-time
WebhookEndpointWithSecretendpointWebhookEndpointsecretstringwhsec_ signing secret. Returned only on creation and rotation.
CreateWebhookEndpointurlstring, urirequiredPublic https:// URL.
eventsarray of "post.published" | "post.partial" | "post.failed" | "account.connected" | "account.needs_reauth" | "account.disconnected"requireddescriptionstringmax 200 chars
UpdateWebhookEndpointurlstring, urieventsarray of "post.published" | "post.partial" | "post.failed" | "account.connected" | "account.needs_reauth" | "account.disconnected"descriptionstringmax 200 chars
enabledbooleanEnabling clears disabledReason and resumes queued deliveries.
rotateSecretbooleanIssue a new secret; the old one stops working immediately.
WebhookDeliveryidstring, uuideventIdstringeventTypestringstatus"pending" | "sending" | "succeeded" | "dead"attemptsintegernextAttemptAtstring, date-timelastAttemptAtstring, date-time, nullablelastStatusCodeinteger, nullablelastErrorstring, nullablelastResponsestring, nullableFirst 500 characters of the response body.
lastDurationMsinteger, nullabledeliveredAtstring, date-time, nullablecreatedAtstring, date-timebodystringThe exact JSON that was signed and sent.
WebhookEventBody of every webhook request. Signed per Standard Webhooks (webhook-id, webhook-timestamp, webhook-signature).idstringevt_... Same on every retry; deduplicate on it.
type"post.published" | "post.partial" | "post.failed" | "account.connected" | "account.needs_reauth" | "account.disconnected" | "live.key_set" | "live.broadcast_scheduled" | "webhook.test"createdAtstring, date-timedataobjectpost.*: {post, progress, targets (first 100), targetsTruncated}. account.*: {account: {id, platform, displayName, username}}. live.key_set: {channel: LiveChannel, previousStreamId}. live.broadcast_scheduled: {broadcast: {id, title, scheduledStartTime, privacy, youtubeBroadcastId, watchUrl}, channel: LiveChannel, stream: {id, server, key}, usesChannelKey}. live.* bodies carry stream keys: they are stored encrypted and masked in the delivery log.
TestDeliveryResultdeliveryIdstring, uuideventIdstringokbooleanstatusstringstatusCodeinteger, nullableerrorstring, nullabledurationMsinteger
HeadlessConnectStartredirectUrlstring, urirequiredhttps:// (http only for localhost). Receives connect_token, platform and step, or error.
ecosystemIdstring, uuidprofileIdstring, uuidinstancestringMastodon-family platforms: the user's server.
HeadlessConnectStartedauthUrlstring, uristatestringexpiresInSecondsinteger
ConnectChoicesplatformstringtotalintegermatchedintegerpageintegerpageSizeintegerhasMorebooleanaccountsarray of objectmatchedIdsarray of stringEvery platformAccountId matching the search, across pages.
redirectUrlstring, nullable
FinishConnecttokenstringrequiredplatformAccountIdstringplatformAccountIdsarray of stringmax 500 items
groupIdstring, uuidRequired for a key limited to account groups; must be one of its groups.
newGroupNamestringmax 80 chars
ConnectResultaccountsarray of objectconnectedintegerunavailablearray of stringgroupobject, nullablewarningsarray of string
LiveStreamA reusable YouTube stream: what an encoder (or Stream Desk) pushes to.idstringtitlestringserverstringRTMP ingest, e.g. rtmp://a.rtmp.youtube.com/live2
rtmpsServerstring, nullablekeystringThe stream key. Secret: anyone holding it can broadcast to the channel.
LiveChannelaccountIdstring, uuidnamestringusernamestring, nullableyoutubeChannelIdstringYouTube's channel id (UC…)
ecosystemobject, nullablestreamany, nullableThe key broadcasts bind to; null until one is mapped.
ScheduleLiveGive groupId or accountIds.groupIdstring, uuid, nullableaccountIdsarray of string, uuidtitlestringrequiredmax 100 chars
descriptionstringmax 5000 chars
scheduledStartTimestring, date-timerequiredprivacy"public" | "unlisted" | "private"default "public"
thumbnailUrlstring, uri, nullableautoStartbooleandefault true
autoStopbooleandefault true