Table of contents
This is the combined, code-aligned REST reference for the Robopost Public API over HTTP (without the Python wrapper).
- Base URL:
https://public-api.robopost.app/v1 - Auth:
apikeyquery parameter on every/v1/*endpoint - Health endpoint (no auth):
GET https://public-api.robopost.app/ping
If you prefer the Python wrapper, use the separate Python-client documentation.
Table of Contents
- Coverage and Corrections
- Authentication
- Endpoint Index
- Auth Endpoint
- Channels Endpoints
- Post Collections Endpoints
- Media Upload Endpoints
- Scheduled Posts Endpoints
- Aggregated Analytics Endpoints
- Social Inbox Endpoints
- Video Series Endpoints
- Video Tasks Endpoints
- Request/Response Models
- Enums
- Error Handling
- Operational Notes
Coverage and Corrections
This file covers all implemented public-api routes currently registered in robopost-public-api/app/main.py:
authchannelspost_collectionsmediasscheduled_postsaggregated_posts_analyticssocial_inbox_itemsvideo-seriesvideo-tasksping
Corrections vs earlier draft:
- Added missing sections for:
aggregated_posts_analyticssocial_inbox_items
- Corrected scheduled-post create response shape:
- Actual:
{ "scheduled_posts": [ ... ] } - Not a raw array response.
- Actual:
- Corrected recurrence payload slot fields for scheduled posts:
daily_recur_interval_time_slotsweekly_recur_interval_time_slots
- Clarified media upload supported extensions (upload endpoint does not include
gif). - Corrected/expanded video caption defaults from current models (for example
font_colordefaults toWHITEin current code). - Included
caption_stylefor video series models.
Authentication
All /v1/* endpoints require API key query param:
?apikey=YOUR_API_KEY
Example:
POST /v1/scheduled_posts/?apikey=YOUR_API_KEY
Auth behavior:
- Missing API key:
401with"API key is required." - Invalid API key:
401with"Invalid API key." - API key with missing team mapping:
404
Create keys in Robopost app under Team -> Manage API Keys.
Endpoint Index
| Method | Path | Description |
|---|---|---|
GET |
/ping |
Health check (no API key needed) |
GET |
/v1/auth/ |
Validate API key and team |
GET |
/v1/channels/ |
List channels for team |
GET |
/v1/post_collections/ |
List post collections for team |
POST |
/v1/medias/upload |
Upload media file |
POST |
/v1/scheduled_posts/ |
Create scheduled posts/drafts/collection posts |
GET |
/v1/aggregated_posts_analytics/ |
List aggregated analytics |
GET |
/v1/aggregated_posts_analytics/{id} |
Get one analytics record |
GET |
/v1/social_inbox_items/ |
List social inbox items |
GET |
/v1/social_inbox_items/unread/count |
Total unread count |
GET |
/v1/social_inbox_items/unread/by_channel |
Unread counts by channel |
GET |
/v1/social_inbox_items/channels/{channel_id}/gmb/threads |
GMB-only threaded comments for one channel |
GET |
/v1/social_inbox_items/threads |
Group inbox items by post_id with threads |
GET |
/v1/social_inbox_items/{id} |
Get one inbox item |
POST |
/v1/video-series/ |
Create video series |
GET |
/v1/video-series/ |
List video series |
GET |
/v1/video-series/{series_id} |
Get video series |
PUT |
/v1/video-series/{series_id} |
Update video series |
DELETE |
/v1/video-series/{series_id} |
Soft-delete video series |
POST |
/v1/video-tasks/{series_id}/generate |
Create video generation task |
GET |
/v1/video-tasks/{task_id} |
Get task status |
GET |
/v1/video-tasks/ |
List video tasks |
GET |
/v1/video-tasks/{task_id}/details |
Get task details |
DELETE |
/v1/video-tasks/{task_id} |
Cancel task |
Auth Endpoint
Validate API Key
GET /v1/auth/- Auth:
apikey - Response
200:
{
"message": "Welcome team My Team",
"team_name": "My Team"
}
Channels Endpoints
List Channels
GET /v1/channels/- Auth:
apikey - Response:
PublicAPIChannelRead[]
curl -X GET \
"https://public-api.robopost.app/v1/channels/?apikey=YOUR_API_KEY"
Post Collections Endpoints
List Post Collections
GET /v1/post_collections/- Auth:
apikey - Response:
PostCollectionRead[]
curl -X GET \
"https://public-api.robopost.app/v1/post_collections/?apikey=YOUR_API_KEY"
Media Upload Endpoints
Upload Media
POST /v1/medias/upload- Auth:
apikey - Content-Type:
multipart/form-data - Form field:
file - Response
201:PublicAPIMediaRead
Supported extensions:
- Video:
mp4,mov,webm,mpeg,avi,flv,wmv,3gp,m4v - Image:
jpg,jpeg,png,bmp,heic,tiff,webp
Notes:
- Unsupported extension ->
415 - Corrupted/invalid video ->
400with{"error":"VIDEO_CORRUPTED", ...} - Images are optimized after upload.
- Videos may be converted to MP4 and enriched with thumbnail/metadata.
curl -X POST \
"https://public-api.robopost.app/v1/medias/upload?apikey=YOUR_API_KEY" \
-F "file=@/path/to/file.jpg"
Example response:
{
"id": "64f20e2c915d2f1970ec8c09",
"name": "image",
"extension": "jpg",
"storage_object_id": "9f73ad62-xxxxx-xxxxx-xxxxx-9556dcb903f4"
}
Scheduled Posts Endpoints
Create Scheduled Post(s)
POST /v1/scheduled_posts/- Auth:
apikey - Request body:
PublicAPIScheduledPostCreateHTTPPayload - Response
200:{ "scheduled_posts": PublicAPIScheduledPostRead[] }
curl -X POST \
"https://public-api.robopost.app/v1/scheduled_posts/?apikey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Hello from the Public API",
"channel_ids": ["my_channel_id"],
"image_object_ids": ["9f73ad62-xxxxx-xxxxx-xxxxx-9556dcb903f4"],
"schedule_at": "2025-03-01T10:00:00Z",
"is_draft": false
}'
You can also provide source URLs instead of uploaded object IDs:
image_urls: string[]video_url: stringgif_url: string
Behavior notes:
- If
is_draft=false,channel_idsis required. - One scheduled post is created per channel in
channel_idswhen scheduled mode is used. - If
is_draft=trueorpost_collection_idis set, a single draft/collection-style post is created. - If URL media fields are used (
image_urls,video_url,gif_url), records are created inDATA_LOADINGflow internally. - Request includes
recur_generate_new_ai_image_model, but current implementation storesFLUX_DEV.
Example success response:
{
"scheduled_posts": [
{
"id": "64f20e2c915d2f1970ec8c09",
"text": "Hello from the Public API",
"channel_ids": ["my_channel_id"],
"image_object_ids": ["9f73ad62-xxxxx-xxxxx-xxxxx-9556dcb903f4"],
"video_object_id": null,
"gif_object_id": null,
"facebook_settings": { "postType": "POST" },
"instagram_settings": { "locationId": "", "postType": "POST" },
"pinterest_settings": { "pinTitle": "", "destinationLink": "" },
"wordpress_settings": {
"postTitle": "",
"postText": "",
"postSlug": "",
"postType": "POST",
"postCategories": [],
"postTags": [],
"postFeaturedImage": null,
"postParentPage": 0
},
"youtube_settings": {
"videoObject": null,
"videoTitle": "",
"videoType": "video",
"videoDescription": "",
"videoPrivacyStatus": "public",
"videoThumbnailImageObject": null,
"videoThumbnailGroupUuid": null
},
"tiktok_settings": {
"title": "",
"privacyLevel": "PUBLIC_TO_EVERYONE",
"disableDuet": false,
"disableComment": false,
"disableStitch": false,
"videoCoverTimestampMs": 0,
"videoObject": null,
"videoThumbnailGroupUuid": null,
"autoAddMusic": true
},
"gmb_settings": {
"postTopicType": "STANDARD",
"offerTitle": "",
"offerCouponCode": "",
"offerRedeemOnlineUrl": "",
"offerTermsConditions": "",
"offerStartDt": null,
"offerEndDt": null,
"eventTitle": "",
"eventStartDt": null,
"eventEndDt": null,
"ctaButtonActionType": "ACTION_TYPE_UNSPECIFIED",
"ctaUrl": ""
},
"is_draft": false,
"post_collection_id": null,
"schedule_at": "2025-03-01T10:00:00Z",
"is_recur": false,
"recur_interval": "DAILY",
"recur_generate_new_ai_image": false,
"recur_generate_new_ai_image_model": "FLUX_DEV",
"recur_until_dt": null,
"recur_until_dt_enabled": false,
"recur_rephrase_text_with_ai": false,
"recur_rephrase_text_with_ai_tone": "FRIENDLY",
"first_comment": ""
}
]
}
Aggregated Analytics Endpoints
List Aggregated Analytics
GET /v1/aggregated_posts_analytics/- Auth:
apikey - Response:
AggregatedPostsAnalyticsRead[]
Query params:
interval:DAILY | WEEKLY | MONTHLYsocial_network:SocialNetworkenum valueoverall_only:true|false- If
true, returns entries wheresocial_networkisnull.
- If
dt_from: ISO datetimedt_to: ISO datetimelimit: default200, min1, max1000skip: default0
curl -X GET \
"https://public-api.robopost.app/v1/aggregated_posts_analytics/?apikey=YOUR_API_KEY&interval=DAILY&limit=100"
Get Aggregated Analytics by ID
GET /v1/aggregated_posts_analytics/{id}- Auth:
apikey - Response:
AggregatedPostsAnalyticsRead
curl -X GET \
"https://public-api.robopost.app/v1/aggregated_posts_analytics/analytics_id?apikey=YOUR_API_KEY"
Social Inbox Endpoints
List Social Inbox Items
GET /v1/social_inbox_items/- Auth:
apikey - Response:
SocialInboxItemRead[]
Query params:
search_textchannel_idsocial_networkis_read(true|false)unread_only(defaultfalse)post_idexternal_idexternal_parent_idparent_social_inbox_item_idskip(default0)limit(default10)sort_by_field(defaultcomment_created_at)sort_order(defaultdesc; non-descis treated as ascending)
curl -X GET \
"https://public-api.robopost.app/v1/social_inbox_items/?apikey=YOUR_API_KEY&unread_only=true&limit=20"
Get Unread Count
GET /v1/social_inbox_items/unread/count- Response: integer
curl -X GET \
"https://public-api.robopost.app/v1/social_inbox_items/unread/count?apikey=YOUR_API_KEY"
Get Unread Count by Channel
GET /v1/social_inbox_items/unread/by_channel- Response:
{ "<channel_id>": <count>, ... }
curl -X GET \
"https://public-api.robopost.app/v1/social_inbox_items/unread/by_channel?apikey=YOUR_API_KEY"
Get GMB Threads for One Channel
GET /v1/social_inbox_items/channels/{channel_id}/gmb/threads- Response:
SocialInboxThreadRead[] - Channel must be GMB (
GMBorGOOGLE_BUSINESSmapping).
Query params:
skip(default0)limit(default10)sort_by_field(defaultcomment_created_at)sort_order(defaultdesc)
curl -X GET \
"https://public-api.robopost.app/v1/social_inbox_items/channels/my_channel_id/gmb/threads?apikey=YOUR_API_KEY"
Get Threads Grouped by Post
GET /v1/social_inbox_items/threads- Response:
SocialInboxPostThreadRead[]
Supports same filters/pagination/sort query params as /v1/social_inbox_items/.
curl -X GET \
"https://public-api.robopost.app/v1/social_inbox_items/threads?apikey=YOUR_API_KEY&channel_id=my_channel_id"
Get Single Social Inbox Item
GET /v1/social_inbox_items/{id}- Response:
SocialInboxItemRead
curl -X GET \
"https://public-api.robopost.app/v1/social_inbox_items/item_id?apikey=YOUR_API_KEY"
Note:
- Social inbox responses are encoded from alias-based models and can include
_idas identifier key in payloads.
Video Series Endpoints
Create Video Series
POST /v1/video-series/- Auth:
apikey - Body:
PublicAPIGeneratedFacelessVideoSeriesCreate - Response
201:PublicAPIGeneratedFacelessVideoSeriesRead
curl -X POST \
"https://public-api.robopost.app/v1/video-series/?apikey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My Educational Series",
"content_type": "ELI5",
"style": "ANIME",
"voice": "ALICE",
"lang": "en",
"max_duration": 60,
"format": "PORTRAIT",
"font_size": 120,
"font_color": "YELLOW",
"position": "CENTER_BOTTOM",
"caption_style": "OPUS_BOX",
"channel_ids": ["channel_id_1"],
"is_recur": true,
"recur_interval": "DAILY",
"timezone": "America/New_York"
}'
List Video Series
GET /v1/video-series/- Response:
PublicAPIGeneratedFacelessVideoSeriesRead[]
Query params:
search_text(optional)skip(default0)limit(default10, max100)sort_by_field(defaultcreated_at)sort_order(asc|desc, defaultdesc)
Get Video Series
GET /v1/video-series/{series_id}
Update Video Series
PUT /v1/video-series/{series_id}- Body:
PublicAPIGeneratedFacelessVideoSeriesUpdate - Partial update for provided fields.
Delete Video Series
DELETE /v1/video-series/{series_id}- Soft-delete behavior.
Video Tasks Endpoints
Generate Video Task
POST /v1/video-tasks/{series_id}/generate- Response
201:PublicAPIVideoTaskResponse
curl -X POST \
"https://public-api.robopost.app/v1/video-tasks/series_123456/generate?apikey=YOUR_API_KEY"
Get Video Task
GET /v1/video-tasks/{task_id}- Response:
PublicAPIVideoTaskResponse
List Video Tasks
GET /v1/video-tasks/- Response:
PublicAPIVideoTaskResponse[]
Query params:
series_id(optional)status:IN_PROGRESS | COMPLETE | ERROR | NO_CREDITSskip(default0)limit(default10, max100)sort_order(asc|desc, defaultdesc)
Get Video Task Details
GET /v1/video-tasks/{task_id}/details- Response: detailed raw object (includes internal task fields, and generated video details when complete).
Cancel Video Task
DELETE /v1/video-tasks/{task_id}- Marks task state as error with cancellation message.
Request/Response Models
PublicAPIMediaRead
| Field | Type | Description |
|---|---|---|
id |
string |
Media ID |
name |
string |
File base name |
extension |
string |
File extension |
storage_object_id |
string |
Upload storage UUID used in post payloads |
PublicAPIScheduledPostCreateHTTPPayload
| Field | Type | Notes |
|---|---|---|
id (alias _id) |
string |
Optional; auto-generated UUID |
text |
string |
Post text |
channel_ids |
string[] |
Required when is_draft=false |
image_object_ids |
string[] |
Uploaded image object UUIDs |
video_object_id |
string |
Uploaded video object UUID |
gif_object_id |
string |
Uploaded GIF object UUID |
image_urls |
string[] |
Ingest by URL |
video_url |
string |
Ingest by URL |
gif_url |
string |
Ingest by URL |
facebook_settings |
FacebookSettings |
Platform settings |
instagram_settings |
InstagramSettings |
Platform settings |
pinterest_settings |
PinterestSettings |
Platform settings |
wordpress_settings |
WordpressSettings |
Platform settings |
youtube_settings |
YoutubeSettings |
Platform settings |
tiktok_settings |
TikTokSettings |
Platform settings |
gmb_settings |
GMBSettings |
Platform settings |
is_draft |
boolean |
Draft mode |
post_collection_id |
string |
Collection target |
schedule_at |
datetime |
Scheduled timestamp |
is_recur |
boolean |
Recurrence enabled |
recur_interval |
AutomationRecurInterval |
Recurrence interval |
recur_generate_new_ai_image |
boolean |
Recurrence image refresh |
recur_generate_new_ai_image_model |
AIImageModel |
Accepted field; currently stored as FLUX_DEV |
recur_until_dt |
datetime |
Recurrence end |
recur_until_dt_enabled |
boolean |
End-date toggle |
recur_rephrase_text_with_ai |
boolean |
AI rephrase |
recur_rephrase_text_with_ai_tone |
PostAIGenerateVoiceTone |
Tone |
daily_recur_interval_time_slots |
string[] |
Daily specific-time slots |
weekly_recur_interval_time_slots |
string[] |
Weekly specific-time slots |
first_comment |
string |
Optional first comment |
PublicAPIScheduledPostRead
| Field | Type |
|---|---|
id |
string |
text |
string |
channel_ids |
string[] |
image_object_ids |
string[] |
video_object_id |
string |
gif_object_id |
string |
facebook_settings |
object |
instagram_settings |
object |
pinterest_settings |
object |
wordpress_settings |
object |
youtube_settings |
object |
tiktok_settings |
object |
gmb_settings |
object |
is_draft |
boolean |
post_collection_id |
string |
schedule_at |
datetime |
is_recur |
boolean |
recur_interval |
AutomationRecurInterval |
recur_generate_new_ai_image |
boolean |
recur_generate_new_ai_image_model |
AIImageModel |
recur_until_dt |
datetime |
recur_until_dt_enabled |
boolean |
recur_rephrase_text_with_ai |
boolean |
recur_rephrase_text_with_ai_tone |
PostAIGenerateVoiceTone |
first_comment |
string |
Create endpoint envelope:
{
"scheduled_posts": [/* PublicAPIScheduledPostRead */]
}
PublicAPIChannelRead
Common fields returned by channel list:
| Field | Type |
|---|---|
id |
string |
name |
string |
social_network |
SocialNetwork |
social_object_type |
SocialObjectType |
social_object_id |
string |
logo_url |
string |
metadata |
object |
must_reconnect |
boolean |
created_at |
datetime |
updated_at |
datetime |
Additional channel settings fields are also returned (UTM defaults, watermark settings, etc.).
PostCollectionRead
| Field | Type |
|---|---|
id |
string |
name |
string |
color |
string |
automation_id |
string |
next_scheduled_post_id |
string |
posting_strategy |
PostCollectionPostingStrategy |
delete_post_after_posting |
boolean |
is_recur |
boolean |
timezone |
string |
posts_count |
number |
recur_dt |
datetime |
recur_interval |
AutomationRecurInterval |
recur_interval_time_slots |
string[] |
recur_interval_weekly_time_slots |
string[] |
recur_until_dt |
datetime |
recur_until_dt_enabled |
boolean |
next_scheduled_post |
object |
AggregatedPostsAnalyticsRead
| Field | Type |
|---|---|
team_id |
string |
interval |
AggregatedPostsAnalyticsInterval |
social_network |
SocialNetwork or null |
impressions |
number |
engagements_total |
number |
reactions_like |
number |
comments_count |
number |
shares_count |
number |
saves_count |
number |
engagement_rate |
number |
analytics_last_sync |
datetime |
dt |
datetime |
SocialInboxItemRead
| Field | Type |
|---|---|
_id/id |
string |
attachments |
object[] |
text |
string |
channel_id |
string |
social_network |
SocialNetwork |
external_id |
string |
external_parent_id |
string |
parent_social_inbox_item_id |
string |
post_id |
string |
comment_author |
string |
is_read |
boolean |
reactions_count |
number |
rating |
number (nullable) |
comment_created_at |
datetime |
received_at |
datetime |
created_at |
datetime |
updated_at |
datetime |
scheduled_post |
object (nullable) |
SocialInboxThreadRead
| Field | Type |
|---|---|
parent |
SocialInboxItemRead |
children |
SocialInboxItemRead[] |
SocialInboxPostThreadRead
| Field | Type |
|---|---|
post_id |
string |
scheduled_post |
object |
threads |
SocialInboxThreadRead[] |
items |
SocialInboxItemRead[] |
PublicAPIGeneratedFacelessVideoSeriesCreate
Fields include:
- Content setup:
name,content_type,style,voice,text_prefix,text_suffix,lang,stick_to_script,content_custom - Video setup:
format,max_duration,prevent_text_in_video - Audio setup:
narration_volume,bgm_volume - Caption setup:
font_size,font_color,stroke_width,stroke_color,shadow_strength,shadow_blur,highlight_current_word,word_highlight_color,line_count,padding,position,caption_style - Content source:
use_knowledge_base,knowledge_base_id - BGM/splash:
bgm_bucket_id,splash_screen_object - Posting:
create_scheduled_post,post_to,post_collection_ids,channel_ids - Recurrence:
is_recur,timezone,recur_dt,recur_interval,recur_interval_time_slots,recur_interval_weekly_time_slots,recur_until_dt,recur_until_dt_enabled
PublicAPIGeneratedFacelessVideoSeriesUpdate
Partial-update model for most series fields including content/audio/caption/posting/recurrence settings.
Notable: current public update model does not expose use_knowledge_base/knowledge_base_id fields.
PublicAPIGeneratedFacelessVideoSeriesRead
Create/read fields plus:
idautomation_idis_deletedcreated_atupdated_at
PublicAPIVideoTaskResponse
| Field | Type |
|---|---|
task_id |
string |
video_url |
string (nullable) |
video_series_id |
string |
status |
string |
created_at |
datetime |
Enums
Scheduling and posting
AutomationPostTo:DIRECT,DRAFT,POST_COLLECTIONAutomationRecurInterval:DAILY_SPECIFIC_TIME_SLOTSWEEKLY_SPECIFIC_TIME_SLOTSEVERY_3_HOURSEVERY_6_HOURSBI_DAILYDAILYWEEKLYMONTHLYYEARLY
AIImageModel:DALLE,FLUX_SCHNELL,FLUX_DEV,FLUX_PROPostAIGenerateVoiceTone:POLITE,WITTY,ENTHUSIASTIC,INFORMATIONAL,FUNNY,FORMAL,INFORMAL,HUMOROUS,SERIOUS,OPTIMISTIC,MOTIVATING,RESPECTFUL,ASSERTIVE,CONVERSATIONAL,CASUAL,PROFESSIONAL,SMART,NOSTALGIC,FRIENDLY
Platform settings
FacebookPostType:POST,REELSInstagramPostType:POST,REELS,STORIESWordpressPostType:POST,PAGEYoutubeVideoType:video,shortYoutubePrivacyStatus:public,private,unlistedTikTokPrivacyLevel:PUBLIC_TO_EVERYONEGMBPostTopicType:STANDARD,OFFER,EVENTGMBCTAButtonActionType:ACTION_TYPE_UNSPECIFIED,BOOK,ORDER,SHOP,LEARN_MORE,SIGN_UP,CALL
Social and analytics
SocialNetwork:FACEBOOK,INSTAGRAM,TIKTOK,YOUTUBE,TWITTER,PINTEREST,LINKEDIN,GOOGLE_BUSINESS,WORDPRESS,GMB,TELEGRAM,THREADS,BLUESKY
AggregatedPostsAnalyticsInterval:DAILY,WEEKLY,MONTHLY
Video generation
GeneratedFacelessVideoProcessState:IN_PROGRESS,COMPLETE,ERROR,NO_CREDITSGeneratedFacelessVideoSeriesContentType:RANDOM_AI_STORY,SCARY_STORIES,BEDTIME_STORIES,INTERESTING_HISTORY,URBAN_LEGENDS,MOTIVATIONAL,FUN_FACTS,LONG_FORM_JOKES,LIFE_PRO_TIPS,ELI5,DID_YOU_KNOW,PHILOSOPHY,RECIPES,FITNESS,BEAUTY,GROWTH_ADVICE,PRODUCT_MARKETING,CUSTOM,BLOG_ARTICLE
GeneratedFacelessVideoStyle:DEFAULT,REALISM,IMPRESSIONISM,SURREALISM,ABSTRACT,ART_NOUVEAU,CUBISM,POP_ART,FUTURISM,FANTASY_CONCEPT_ART,MINIMALISM,WATERCOLOR,GOTHIC_MEDIEVAL_ART,ANIME,COMIC
GeneratedVideoFormat:PORTRAIT,WIDESCREEN,SQUAREVideoColor:BLACK,WHITE,YELLOW,RED,BLUE,GREEN,ORANGE,PURPLE,CYAN,MAGENTAVideoCaptionPosition:CENTER_CENTER,CENTER_TOP,CENTER_BOTTOM,LEFT_CENTER,LEFT_TOP,LEFT_BOTTOM,RIGHT_CENTER,RIGHT_TOP,RIGHT_BOTTOM
VideoCaptionStyle:OPUS,OPUS_BOX,CLEAN,NEON,IMPACT,LEGACY- Built-in AI voices include:
ALICE,BILL,SARAH,BRIAN,LAURA,ARIA,CALLUM,CHARLIE
Error Handling
Common statuses across endpoints:
| Status | Meaning | Typical body shape |
|---|---|---|
200 OK |
Successful read/action | JSON payload |
201 Created |
Resource/task/media created | JSON payload |
400 Bad Request |
Validation/business rule failure | {"msg":"..."} or {"detail":"..."} |
401 Unauthorized |
Missing/invalid API key | {"detail":"API key is required."} / {"detail":"Invalid API key."} |
404 Not Found |
Missing resource/team linkage | {"detail":"... not found"} or {"msg":"404"} |
409 Conflict |
State/plan conflicts | for example account frozen/limit hit/task cannot cancel |
415 Unsupported Media Type |
Unsupported file extension on upload | {"error":"File extension 'xxx' not supported."} |
500 Internal Server Error |
Server-side failure | {"detail":"..."} or {"error":"..."} |
Scheduled-post specific conflicts:
{"msg":"ACCOUNT_USAGE_FROZEN","reason":"..."}{"msg":"PLAN_LIMIT_HIT","max":<limit>}
Operational Notes
- Datetimes are ISO 8601 (UTC recommended in client usage).
- API key auth is query-param based (
apikey), not bearer token. - For scheduled posts:
is_draft=truecreates draft-style entries.is_draft=falserequireschannel_ids.post_collection_idis supported.
- Social inbox endpoints are read-only in Public API at this time.
- Video generation is asynchronous:
- create task -> poll task status -> fetch
video_urlwhen available.
- create task -> poll task status -> fetch
Robopost public product site: https://robopost.app