Connection check
verified live · 28h ago
uplika
Publish to social channels from your AI agent. Threads is live; nine more await review.
Tools
20
GitHub stars
—
Installs / wk
—
Licence
—
Transport
streamable-http
Last checked
28h ago
Tools & capabilities
20 toolsRead from the running server on 28h ago.
delete_post
can modify data
id*
Delete a post from the channel for good. This is not reversible, so confirm with the person first. Daily delete limits differ per channel: Threads 100 a day, Instagram not supporte… Delete a post from the channel for good. This is not reversible, so confirm with the person first. Daily delete limits differ per channel: Threads 100 a day, Instagram not supported, YouTube 20 a day, Facebook 50 a day. On Threads and YouTube this also works on posts written in the channel's own app, given the link. Instagram does not let apps delete posts at all, and Facebook only lets us delete Page posts this app published — a post made in the Facebook app cannot be deleted through us.
get_insights
read-only
id*
Views, likes, replies, reposts, quotes and shares for one publish. Views and shares can be null when the platform does not report them yet — null is not zero. Views, likes, replies, reposts, quotes and shares for one publish. Views and shares can be null when the platform does not report them yet — null is not zero.
get_post
read-only
id*
One publish: per-target status and the reason any target failed. For a post link you probably want open_post instead. One publish: per-target status and the reason any target failed. For a post link you probably want open_post instead.
get_quota
read-only
accountIdworkspaceId
How much of the 24 hour allowance is already used for posts, replies and deletes. Check this before a burst of publishing. This is live usage from the platform, not the static limi… How much of the 24 hour allowance is already used for posts, replies and deletes. Check this before a burst of publishing. This is live usage from the platform, not the static limits in list_platforms. We also cap how fast one account can publish, so publish can return rate_limited even when the platform allowance still has room.
hide_reply
can modify data
hidepostId*replyId*
Hide a reply on the channel, or show it again with hide: false. The reply id comes from list_replies, and postId is the publish it belongs to. Hide a reply on the channel, or show it again with hide: false. The reply id comes from list_replies, and postId is the publish it belongs to.
list_accounts
read-only
workspaceId
Connected social accounts. **Call this before publishing anything.** Each item has id, platform (threads etc.), handle and status. The accountIds you pass to publish are these ids,… Connected social accounts. **Call this before publishing anything.** Each item has id, platform (threads etc.), handle and status. The accountIds you pass to publish are these ids, and only "active" ones publish. If the person did not name a channel, target every active account. If the list is empty, no channel is connected yet. Send the person to https://uplika.com/dashboard/connections.
list_channel_posts
read-only
limitaccountIdworkspaceId
What is actually on the channel right now, including posts written in the channel's own app. Use this to find a post when you do not have its link. Each item carries a permalink yo… What is actually on the channel right now, including posts written in the channel's own app. Use this to find a post when you do not have its link. Each item carries a permalink you can pass straight to open_post, reply or delete_post.
list_platforms
read-only
Every channel and its rules: character limit, whether media is required, image and video limits, and what state the channel is in. Read this instead of guessing a platform's limits… Every channel and its rules: character limit, whether media is required, image and video limits, and what state the channel is in. Read this instead of guessing a platform's limits. status is one of three: live means anyone can connect; beta means the channel is in platform review and only accounts registered as testers on our app can connect yet, though publishing works normally for those accounts; soon means it is not connectable at all. charCount tells you how that channel counts a character, so you can check the length before calling publish instead of after it fails.
list_posts
read-only
limitbeforestatusworkspaceId
Recent publishes made through us and the per-target status of each. Newest first, 20 by default. Pass limit for more or fewer, up to 100. hasMore means the list was cut short; pass… Recent publishes made through us and the per-target status of each. Newest first, 20 by default. Pass limit for more or fewer, up to 100. hasMore means the list was cut short; pass the returned nextBefore as before to keep going. Posts that already existed on the channel are not here. Use list_channel_posts for those.
list_replies
read-only
id*
The whole reply thread under a post, nested replies included. `truncated` tells you we stopped before the end. The count here can differ from the replies metric in get_insights, wh… The whole reply thread under a post, nested replies included. `truncated` tells you we stopped before the end. The count here can differ from the replies metric in get_insights, which is normal.
media_complete
id*
Step 2 of attaching an image. Call it after the upload finishes. We check the file really landed before marking it ready. Only a ready media id can be passed to publish. Step 2 of attaching an image. Call it after the upload finishes. We check the file really landed before marking it ready. Only a ready media id can be passed to publish.
media_from_url
url*altText
Attach an image or video that is already on the public web. We download it, copy it into our storage and give you a media id you can pass to publish. One step, no upload needed. ht… Attach an image or video that is already on the public web. We download it, copy it into our storage and give you a media id you can pass to publish. One step, no upload needed. https only. Google Drive and Dropbox **share** links do not work: they return an HTML preview page, not the file. Use a direct file URL that ends in the file itself. If you can see the image, write altText describing it.
media_presign
bytes*widthheightaltTextfileName*contentType*
+1
Step 1 of attaching an image or video. Returns a media id and a one-time uploadUrl. PUT the file bytes to uploadUrl with the same contentType, then call media_complete. Images: ima… Step 1 of attaching an image or video. Returns a media id and a one-time uploadUrl. PUT the file bytes to uploadUrl with the same contentType, then call media_complete. Images: image/jpeg, image/png, up to 8MB. Video: video/mp4, video/quicktime, up to 1GB, 300 seconds, 1920px wide. Aspect ratio up to 10:1. Any image pixel width is fine. If you can see the image, write altText describing it. The response has mediaExpiresAt: this media id disappears after that time if it was never published, and publish will then fail with media_expired.
media_upload_link
note
Ask the person to upload files from their own device. Returns a short-lived link. **Give the link to the person, then wait.** Poll media_upload_status with the token until it retur… Ask the person to upload files from their own device. Returns a short-lived link. **Give the link to the person, then wait.** Poll media_upload_status with the token until it returns ready, and only then call publish with the media ids it gives you. Do not publish before the status is ready. Use this when the file is on their computer or phone; use media_from_url when the file already has a public https address.
media_upload_status
read-only
token*
Has the person uploaded yet? Returns waiting, ready or expired, plus every media id uploaded through that link. Pass those ids to publish as mediaIds. Has the person uploaded yet? Returns waiting, ready or expired, plus every media id uploaded through that link. Pass those ids to publish as mediaIds.
open_post
read-only
id*
Everything about one post in a single call: the text, the whole reply thread, and its metrics. This is the right tool when someone hands you a post link. Replies or metrics can com… Everything about one post in a single call: the text, the whole reply thread, and its metrics. This is the right tool when someone hands you a post link. Replies or metrics can come back null if the platform refused just that part.
publish
can modify data
waitcontentoptionsmediaIdstopicTagaccountIds*
+2
Post to social channels. Channels open today: threads, instagram, youtube, facebook. Get accountIds from select_channels — do not guess which channel the person meant. Text limits… Post to social channels. Channels open today: threads, instagram, youtube, facebook. Get accountIds from select_channels — do not guess which channel the person meant. Text limits differ per channel: Threads 500 characters, Instagram 2200 characters, YouTube 5000 UTF-8 bytes, Facebook 63206 characters. Over the limit nothing goes out to any channel, so shorten it before calling. Images and video both work on the channels that take them, and a carousel can mix them. YouTube is different: it takes exactly one video, no images, and it needs options.youtube.title. Its description is measured in UTF-8 bytes, so Korean and Japanese cost three per character. Instagram cannot publish text alone: every post needs at least one image or video. A single video becomes a reel there. Set options.instagram.contentType to story for a story; stories show no caption. Non-JPEG images are converted for Instagram automatically. Facebook publishes to a Page, never a personal profile. options.facebook.link makes a link post (no media alongside), and a single video becomes a reel (3-90 seconds). There are three ways to get a media id, pick by where the file is: media_from_url when it already has a public https address, media_upload_link when it is on the person's own device, media_presign plus media_complete when you can PUT the bytes yourself. Then pass the media ids here. This publishes immediately on every channel except two that take native scheduling: YouTube with options.youtube.publishAt while privacyStatus is private, and Facebook feed posts with options.facebook.scheduledPublishTime (10 minutes to 28 days out). If the user asks to schedule anywhere else, tell them uplika cannot do that yet. A YouTube video published before Google finishes reviewing this app is locked to private viewing, so say that when you report a YouTube post as done. Returns while the post is still publishing. The permalink is null at that moment. Call get_post with the returned id to see the final status and link. Pass wait: true to hold the response until it is really out — then you can tell the person it is posted instead of guessing. For a long post use threadItems instead of publish-then-reply: we keep the order and wait for each piece to land before sending the next one.
reply
can modify data
id*content*replyTo
Reply to a post or to a reply. Leave replyTo empty to reply to the post itself; pass a reply id from list_replies to nest a reply under that reply.Like publish, this returns before… Reply to a post or to a reply. Leave replyTo empty to reply to the post itself; pass a reply id from list_replies to nest a reply under that reply.Like publish, this returns before the reply is live. Call get_post with the returned id to see the final status and link.
retry_post
can modify data
id*
Retry the targets that failed on a publish. Targets that already went out are left alone, so this never double-posts. If nothing failed you get nothing_to_retry. Only applies to po… Retry the targets that failed on a publish. Targets that already went out are left alone, so this never double-posts. If nothing failed you get nothing_to_retry. Only applies to posts published through us.
select_channels
read-only
scopeworkspaceId