Publishing
The URL of the media to upload.
https://example.com/image.jpgDefault Response
Uploaded and validated blotato media URL.
https://database.blotato.io/media/12345.jpgThe internal ID of the uploaded media.
media_12345Forbidden
Validation error
Rate limit exceeded
Server error
POST /v2/media HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 39
{
"url": "https://example.com/image.jpg"
}{
"url": "https://database.blotato.io/media/12345.jpg",
"id": "media_12345"
}The filename including extension, used to determine content type.
my-video.mp4Default Response
URL to PUT the file to. Expires after a short period.
The final public URL of the uploaded media, to be used when creating a post.
Forbidden
Default Response
POST /v2/media/uploads HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 27
{
"filename": "my-video.mp4"
}{
"presignedUrl": "text",
"publicUrl": "text"
}Only include posts whose post time is on or after this ISO 8601 timestamp. Defaults to 7 days ago.
2026-08-07T23:02:22.000ZOnly include posts whose post time is on or before this ISO 8601 timestamp. Defaults to 7 days from now.
2026-08-21T23:02:22.000ZMaximum number of posts to return. Defaults to 50.
50Opaque cursor returned by a previous call. Pass it to fetch the next page.
Which published posts to include: 'blotato' (default) returns only posts published through Blotato; 'all' also includes any externally-published posts that were brought into Blotato.
Default Response
Cursor for the next page. Absent when there are no more posts.
Forbidden
Validation error
Server error
GET /v2/posts HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Accept: */*
{
"items": [
{
"id": "text",
"postTime": "text",
"state": {
"type": "scheduled"
},
"text": "My text",
"mediaUrls": [
"https://database.blotato.io/some-image-path.jpg"
],
"platform": "twitter"
}
],
"cursor": "text"
}General
Examples
Post to a Platform Immediately
POST https://backend.blotato.com/v2/posts HTTP/1.1
Content-Type: application/json
Headers:
{
"post": {
"accountId": "acc_12345",
"content": {
"text": "Hello, world!",
"mediaUrls": [],
"platform": "twitter"
},
"target": {
"targetType": "twitter"
}
}
}Post at a Scheduled Time
Post an Image or a Video
Post a Twitter-like Thread with Multiple Posts
The ID of the existing post draft to use for creating the post. Unused in the API call
12345If provided, indicates whether to use the next available free slot for scheduling the post. If set to true, the post will be scheduled at the next available slot time for the specified platform. If neither scheduledTime nor slot is provided, and this is set to true, the post will be scheduled at the next available slot time.
The timestamp (ISO 8601) when the post should be published.
2026-08-21T23:02:22.000ZSubmitted
Submitted
The ID of the post submission. Use this ID to track the status of the post. This status code is returned when the post is already scheduled.
123e4567-e89b-12d3-a456-426614174000The resolved UTC time the post is scheduled to publish. Omitted when the post is published immediately.
2025-03-10T15:30:00ZSubmitted
Forbidden
Validation error
Rate limit exceeded
Server error
POST /v2/posts HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 328
{
"post": {
"target": {
"targetType": "tiktok",
"isYourBrand": false,
"autoAddMusic": false,
"disabledDuet": false,
"privacyLevel": "SELF_ONLY",
"isAiGenerated": false,
"disabledStitch": false,
"disabledComments": false,
"isBrandedContent": false
},
"content": {
"text": "Hello, blotato!",
"mediaUrls": [
"https://database.blotato.io/some-media-path.mp4"
]
}
}
}{
"postSubmissionId": "123e4567-e89b-12d3-a456-426614174000",
"scheduledTime": "2025-03-10T15:30:00Z"
}The ID of the post submission to check.
123e4567-e89b-12d3-a456-426614174000Default Response
The ID of the post submission.
123e4567-e89b-12d3-a456-426614174000The current status of the post.
publishedPossible values: The scheduled time of the post if it is scheduled. Null if the post was published immediately.
2025-03-11T15:30:00.000ZThe public URL of the post if it was published.
https://x.com/post/12345The error message if the post failed.
Unsupported media typeForbidden
Not found
Rate limit exceeded
Server error
GET /v2/posts/{postSubmissionId} HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Accept: */*
{
"postSubmissionId": "123e4567-e89b-12d3-a456-426614174000",
"status": "published",
"scheduledTime": "2025-03-11T15:30:00.000Z",
"publicUrl": "https://x.com/post/12345",
"errorMessage": "Unsupported media type"
}020Default Response
Forbidden
Validation error
Server error
GET /v2/published-posts HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Accept: */*
{
"items": [
{
"id": "text",
"content": "text",
"postUrl": "text",
"platform": "twitter",
"createdAt": "text",
"mediaUrls": [
"text"
],
"latestMetrics": {
"fetchedAt": "text",
"metrics": {
"clicksCount": "text",
"commentsCount": "text",
"followsCount": "text",
"impressionsCount": "text",
"interactionsSum": "text",
"likesCount": "text",
"navigationsCount": "text",
"playsCount": "text",
"profileActivityCount": "text",
"profileVisitsCount": "text",
"reachCount": "text",
"repliesCount": "text",
"savesCount": "text",
"sharesCount": "text",
"viewTimeMsSum": "text",
"viewsCount": "text",
"watchTimeMsAvg": "text",
"twitterRetweetsCount": "text",
"twitterQuotesCount": "text",
"blueskyRepostsCount": "text",
"blueskyQuotesCount": "text",
"threadsRepostsCount": "text",
"threadsQuotesCount": "text",
"linkedinFirstLevelCommentsCount": "text",
"linkedinReactionsByType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"pinterestPinClicksCount": "text",
"pinterestReactionsCount": "text",
"pinterestVideoP95ViewsCount": "text",
"pinterestVideo10sViewsCount": "text",
"pinterestVideoMrcViewsCount": "text",
"pinterestVideoV50WatchTimeMsSum": "text",
"pinterestSaveRate": 1,
"twitterPerMediaVideoViewsCount": [
"text"
],
"twitterPerMediaVideoPlaybackStartCount": [
"text"
],
"twitterPerMediaVideoPlayback25Count": [
"text"
],
"twitterPerMediaVideoPlayback50Count": [
"text"
],
"twitterPerMediaVideoPlayback75Count": [
"text"
],
"twitterPerMediaVideoPlaybackCompleteCount": [
"text"
],
"facebookPostMediaViewsCount": "text",
"facebookPostMediaViewsUniqueCount": "text",
"facebookPostReactionsByType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookBlueReelsPlaysCount": "text",
"facebookFbReelsReplaysCount": "text",
"facebookFbReelsTotalPlaysCount": "text",
"facebookPostVideoWatchTimeMsAvg": "text",
"facebookPostVideoFollowersCount": "text",
"facebookPostVideoLikesByReactionType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookPostVideoSocialActionsByType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookPostVideoViewTimeMsSum": "text",
"facebookTotalVideoViewsCount": "text",
"facebookTotalVideoViewsUniqueCount": "text",
"facebookTotalVideoViewsAutoplayedCount": "text",
"facebookTotalVideoViewsClickedToPlayCount": "text",
"facebookTotalVideoViewsSoundOnCount": "text",
"facebookTotalVideoCompleteViewsCount": "text",
"facebookTotalVideoCompleteViewsUniqueCount": "text",
"facebookTotalVideoCompleteViewsAutoplayedCount": "text",
"facebookTotalVideoCompleteViewsClickedToPlayCount": "text",
"facebookTotalVideoCompleteViewsOrganicCount": "text",
"facebookTotalVideoCompleteViewsOrganicUniqueCount": "text",
"facebookTotalVideoCompleteViewsPaidCount": "text",
"facebookTotalVideoCompleteViewsPaidUniqueCount": "text",
"facebookTotalVideoViews10sCount": "text",
"facebookTotalVideoViews10sUniqueCount": "text",
"facebookTotalVideoViews10sAutoplayedCount": "text",
"facebookTotalVideoViews10sClickedToPlayCount": "text",
"facebookTotalVideoViews10sOrganicCount": "text",
"facebookTotalVideoViews10sPaidCount": "text",
"facebookTotalVideoViews10sSoundOnCount": "text",
"facebookTotalVideoViews15sCount": "text",
"facebookTotalVideoViews60sExcludesShorterCount": "text",
"facebookTotalVideoWatchTimeMsAvg": "text",
"facebookTotalVideoViewTimeMsSum": "text",
"facebookTotalVideoViewTimeOrganicMsSum": "text",
"facebookTotalVideoViewTimePaidMsSum": "text",
"facebookTotalVideoStoriesByActionType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookTotalVideoReactionsByType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookTotalVideoViewTimeMsByAgeBucketAndGender": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookTotalVideoViewTimeMsByRegionId": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookTotalVideoViewsByDistributionType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"youtubeDislikesCount": "text",
"youtubeSubscribersLostCount": "text",
"youtubeVideosAddedToPlaylistsCount": "text",
"youtubeVideosRemovedFromPlaylistsCount": "text",
"youtubeRedViewsCount": "text",
"youtubeRedViewTimeMsSum": "text",
"youtubeEngagedViewsCount": "text",
"youtubeAverageViewPercentage": 1,
"youtubeCardClicksCount": "text",
"youtubeCardImpressionsCount": "text",
"youtubeCardClickRate": 1,
"youtubeCardTeaserClicksCount": "text",
"youtubeCardTeaserImpressionsCount": "text",
"youtubeCardTeaserClickRate": 1,
"youtubeAnnotationClicksCount": "text",
"youtubeAnnotationClickableImpressionsCount": "text",
"youtubeAnnotationClosesCount": "text",
"youtubeAnnotationClosableImpressionsCount": "text",
"youtubeAnnotationImpressionsCount": "text",
"youtubeAnnotationClickThroughRate": 1,
"youtubeAnnotationCloseRate": 1
}
},
"metricsHistory": [
{
"fetchedAt": "text",
"metrics": {
"clicksCount": "text",
"commentsCount": "text",
"followsCount": "text",
"impressionsCount": "text",
"interactionsSum": "text",
"likesCount": "text",
"navigationsCount": "text",
"playsCount": "text",
"profileActivityCount": "text",
"profileVisitsCount": "text",
"reachCount": "text",
"repliesCount": "text",
"savesCount": "text",
"sharesCount": "text",
"viewTimeMsSum": "text",
"viewsCount": "text",
"watchTimeMsAvg": "text",
"twitterRetweetsCount": "text",
"twitterQuotesCount": "text",
"blueskyRepostsCount": "text",
"blueskyQuotesCount": "text",
"threadsRepostsCount": "text",
"threadsQuotesCount": "text",
"linkedinFirstLevelCommentsCount": "text",
"linkedinReactionsByType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"pinterestPinClicksCount": "text",
"pinterestReactionsCount": "text",
"pinterestVideoP95ViewsCount": "text",
"pinterestVideo10sViewsCount": "text",
"pinterestVideoMrcViewsCount": "text",
"pinterestVideoV50WatchTimeMsSum": "text",
"pinterestSaveRate": 1,
"twitterPerMediaVideoViewsCount": [
"text"
],
"twitterPerMediaVideoPlaybackStartCount": [
"text"
],
"twitterPerMediaVideoPlayback25Count": [
"text"
],
"twitterPerMediaVideoPlayback50Count": [
"text"
],
"twitterPerMediaVideoPlayback75Count": [
"text"
],
"twitterPerMediaVideoPlaybackCompleteCount": [
"text"
],
"facebookPostMediaViewsCount": "text",
"facebookPostMediaViewsUniqueCount": "text",
"facebookPostReactionsByType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookBlueReelsPlaysCount": "text",
"facebookFbReelsReplaysCount": "text",
"facebookFbReelsTotalPlaysCount": "text",
"facebookPostVideoWatchTimeMsAvg": "text",
"facebookPostVideoFollowersCount": "text",
"facebookPostVideoLikesByReactionType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookPostVideoSocialActionsByType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookPostVideoViewTimeMsSum": "text",
"facebookTotalVideoViewsCount": "text",
"facebookTotalVideoViewsUniqueCount": "text",
"facebookTotalVideoViewsAutoplayedCount": "text",
"facebookTotalVideoViewsClickedToPlayCount": "text",
"facebookTotalVideoViewsSoundOnCount": "text",
"facebookTotalVideoCompleteViewsCount": "text",
"facebookTotalVideoCompleteViewsUniqueCount": "text",
"facebookTotalVideoCompleteViewsAutoplayedCount": "text",
"facebookTotalVideoCompleteViewsClickedToPlayCount": "text",
"facebookTotalVideoCompleteViewsOrganicCount": "text",
"facebookTotalVideoCompleteViewsOrganicUniqueCount": "text",
"facebookTotalVideoCompleteViewsPaidCount": "text",
"facebookTotalVideoCompleteViewsPaidUniqueCount": "text",
"facebookTotalVideoViews10sCount": "text",
"facebookTotalVideoViews10sUniqueCount": "text",
"facebookTotalVideoViews10sAutoplayedCount": "text",
"facebookTotalVideoViews10sClickedToPlayCount": "text",
"facebookTotalVideoViews10sOrganicCount": "text",
"facebookTotalVideoViews10sPaidCount": "text",
"facebookTotalVideoViews10sSoundOnCount": "text",
"facebookTotalVideoViews15sCount": "text",
"facebookTotalVideoViews60sExcludesShorterCount": "text",
"facebookTotalVideoWatchTimeMsAvg": "text",
"facebookTotalVideoViewTimeMsSum": "text",
"facebookTotalVideoViewTimeOrganicMsSum": "text",
"facebookTotalVideoViewTimePaidMsSum": "text",
"facebookTotalVideoStoriesByActionType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookTotalVideoReactionsByType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookTotalVideoViewTimeMsByAgeBucketAndGender": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookTotalVideoViewTimeMsByRegionId": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"facebookTotalVideoViewsByDistributionType": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"youtubeDislikesCount": "text",
"youtubeSubscribersLostCount": "text",
"youtubeVideosAddedToPlaylistsCount": "text",
"youtubeVideosRemovedFromPlaylistsCount": "text",
"youtubeRedViewsCount": "text",
"youtubeRedViewTimeMsSum": "text",
"youtubeEngagedViewsCount": "text",
"youtubeAverageViewPercentage": 1,
"youtubeCardClicksCount": "text",
"youtubeCardImpressionsCount": "text",
"youtubeCardClickRate": 1,
"youtubeCardTeaserClicksCount": "text",
"youtubeCardTeaserImpressionsCount": "text",
"youtubeCardTeaserClickRate": 1,
"youtubeAnnotationClicksCount": "text",
"youtubeAnnotationClickableImpressionsCount": "text",
"youtubeAnnotationClosesCount": "text",
"youtubeAnnotationClosableImpressionsCount": "text",
"youtubeAnnotationImpressionsCount": "text",
"youtubeAnnotationClickThroughRate": 1,
"youtubeAnnotationCloseRate": 1
}
}
]
}
],
"count": 1
}Default Response
Forbidden
Default Response
GET /v2/schedules HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Accept: */*
{
"items": [
{
"id": "text",
"account": {
"id": "text",
"name": "text",
"username": "text",
"profileImageUrl": "text",
"subaccountId": "text",
"subId": "text",
"subaccountName": "text"
},
"draft": {
"accountId": "1",
"content": {
"text": "My text",
"mediaUrls": [
"https://database.blotato.io/some-image-path.jpg"
],
"platform": "twitter",
"additionalPosts": [
{
"text": "My text",
"mediaUrls": [
"https://database.blotato.io/some-image-path.jpg"
]
}
]
},
"target": {
"targetType": "webhook",
"url": "https://example.com/webhook"
}
},
"scheduledAt": "text"
}
],
"count": "text",
"cursor": "text"
}Default Response
Forbidden
Not found
Server error
GET /v2/schedules/{id} HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Accept: */*
{
"schedule": {
"id": "text",
"account": {
"id": "text",
"name": "text",
"username": "text",
"profileImageUrl": "text",
"subaccountId": "text",
"subId": "text",
"subaccountName": "text"
},
"draft": {
"accountId": "1",
"content": {
"text": "My text",
"mediaUrls": [
"https://database.blotato.io/some-image-path.jpg"
],
"platform": "twitter",
"additionalPosts": [
{
"text": "My text",
"mediaUrls": [
"https://database.blotato.io/some-image-path.jpg"
]
}
]
},
"target": {
"targetType": "webhook",
"url": "https://example.com/webhook"
}
},
"scheduledAt": "text"
}
}The ID of the schedule to delete.
Default Response
Forbidden
Default Response
DELETE /v2/schedules/{id} HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Accept: */*
{}Updates a scheduled post. The post must be in scheduled state to be updated. You can update the scheduled time or change the post contents.
The ID of the schedule to update.
Default Response
Forbidden
Not found
Validation error
Default Response
PATCH /v2/schedules/{id} HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 347
{
"patch": {
"draft": {
"accountId": "1",
"content": {
"text": "My text",
"mediaUrls": [
"https://database.blotato.io/some-image-path.jpg"
],
"platform": "twitter",
"additionalPosts": [
{
"text": "My text",
"mediaUrls": [
"https://database.blotato.io/some-image-path.jpg"
]
}
]
},
"target": {
"targetType": "webhook",
"url": "https://example.com/webhook"
}
},
"scheduledTime": "text"
}
}{}Default Response
Forbidden
Validation error
Default Response
POST /v2/source-resolutions-v3 HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 74
{
"source": {
"sourceType": "text",
"text": "text"
},
"customInstructions": "text"
}{
"id": "text"
}Default Response
Forbidden
Not found
Default Response
GET /v2/source-resolutions-v3/{id} HTTP/1.1
Host: backend.blotato.com
blotato-api-key: YOUR_API_KEY
Accept: */*
{
"id": "text",
"status": "completed",
"title": "text",
"content": "text",
"referenceUrl": "text"
}Last updated