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: apikey query 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

  1. Coverage and Corrections
  2. Authentication
  3. Endpoint Index
  4. Auth Endpoint
  5. Channels Endpoints
  6. Post Collections Endpoints
  7. Media Upload Endpoints
  8. Scheduled Posts Endpoints
  9. Aggregated Analytics Endpoints
  10. Social Inbox Endpoints
  11. Video Series Endpoints
  12. Video Tasks Endpoints
  13. Request/Response Models
  14. Enums
  15. Error Handling
  16. Operational Notes

Coverage and Corrections

This file covers all implemented public-api routes currently registered in robopost-public-api/app/main.py:

  • auth
  • channels
  • post_collections
  • medias
  • scheduled_posts
  • aggregated_posts_analytics
  • social_inbox_items
  • video-series
  • video-tasks
  • ping

Corrections vs earlier draft:

  • Added missing sections for:
    • aggregated_posts_analytics
    • social_inbox_items
  • Corrected scheduled-post create response shape:
    • Actual: { "scheduled_posts": [ ... ] }
    • Not a raw array response.
  • Corrected recurrence payload slot fields for scheduled posts:
    • daily_recur_interval_time_slots
    • weekly_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_color defaults to WHITE in current code).
  • Included caption_style for 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: 401 with "API key is required."
  • Invalid API key: 401 with "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 -> 400 with {"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: string
  • gif_url: string

Behavior notes:

  • If is_draft=false, channel_ids is required.
  • One scheduled post is created per channel in channel_ids when scheduled mode is used.
  • If is_draft=true or post_collection_id is set, a single draft/collection-style post is created.
  • If URL media fields are used (image_urls, video_url, gif_url), records are created in DATA_LOADING flow internally.
  • Request includes recur_generate_new_ai_image_model, but current implementation stores FLUX_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 | MONTHLY
  • social_network: SocialNetwork enum value
  • overall_only: true|false
    • If true, returns entries where social_network is null.
  • dt_from: ISO datetime
  • dt_to: ISO datetime
  • limit: default 200, min 1, max 1000
  • skip: default 0
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_text
  • channel_id
  • social_network
  • is_read (true|false)
  • unread_only (default false)
  • post_id
  • external_id
  • external_parent_id
  • parent_social_inbox_item_id
  • skip (default 0)
  • limit (default 10)
  • sort_by_field (default comment_created_at)
  • sort_order (default desc; non-desc is 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 (GMB or GOOGLE_BUSINESS mapping).

Query params:

  • skip (default 0)
  • limit (default 10)
  • sort_by_field (default comment_created_at)
  • sort_order (default desc)
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 _id as 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 (default 0)
  • limit (default 10, max 100)
  • sort_by_field (default created_at)
  • sort_order (asc|desc, default desc)

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_CREDITS
  • skip (default 0)
  • limit (default 10, max 100)
  • sort_order (asc|desc, default desc)

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:

  • id
  • automation_id
  • is_deleted
  • created_at
  • updated_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_COLLECTION
  • AutomationRecurInterval:
    • DAILY_SPECIFIC_TIME_SLOTS
    • WEEKLY_SPECIFIC_TIME_SLOTS
    • EVERY_3_HOURS
    • EVERY_6_HOURS
    • BI_DAILY
    • DAILY
    • WEEKLY
    • MONTHLY
    • YEARLY
  • AIImageModel: DALLE, FLUX_SCHNELL, FLUX_DEV, FLUX_PRO
  • PostAIGenerateVoiceTone:
    • POLITE, WITTY, ENTHUSIASTIC, INFORMATIONAL, FUNNY, FORMAL, INFORMAL, HUMOROUS, SERIOUS,
    • OPTIMISTIC, MOTIVATING, RESPECTFUL, ASSERTIVE, CONVERSATIONAL, CASUAL, PROFESSIONAL, SMART,
    • NOSTALGIC, FRIENDLY

Platform settings

  • FacebookPostType: POST, REELS
  • InstagramPostType: POST, REELS, STORIES
  • WordpressPostType: POST, PAGE
  • YoutubeVideoType: video, short
  • YoutubePrivacyStatus: public, private, unlisted
  • TikTokPrivacyLevel: PUBLIC_TO_EVERYONE
  • GMBPostTopicType: STANDARD, OFFER, EVENT
  • GMBCTAButtonActionType: 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_CREDITS
  • GeneratedFacelessVideoSeriesContentType:
    • 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, SQUARE
  • VideoColor: BLACK, WHITE, YELLOW, RED, BLUE, GREEN, ORANGE, PURPLE, CYAN, MAGENTA
  • VideoCaptionPosition:
    • 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=true creates draft-style entries.
    • is_draft=false requires channel_ids.
    • post_collection_id is supported.
  • Social inbox endpoints are read-only in Public API at this time.
  • Video generation is asynchronous:
    • create task -> poll task status -> fetch video_url when available.

Robopost public product site: https://robopost.app