Table of contents
This document provides a reference for using the Robopost Public API directly via HTTP, rather than through the Python client library. Here, you’ll find endpoint details, request and response structures, authentication parameters, and usage examples in a REST context.
Base URL: https://public-api.robopost.app/v1If you want to use the API through our Python Wrapper, click here.
Authentication
All requests to the Robopost Public API must include your API key as a query parameter:
?apikey=YOUR_API_KEY
For example:
POST /v1/scheduled_posts?apikey=YOUR_API_KEY
If the apikey is missing or invalid, the server will respond with an appropriate 4xx error status.
All endpoints discussed here require an API key, passed as a query parameter named apikey. You can generate API Keys under "Team" > "Manage API Keys".
Upload Media
Use this endpoint to upload images or videos that you want to attach to your scheduled posts. Each upload returns a media object containing the ID and a storage_object_id, which you’ll reference later when creating a scheduled post.
POST /medias/upload
- Authentication: apikeyquery parameter
- Request: multipart/form-datawith a single field namedfile(the binary file to upload).
- Response: A JSON object describing the uploaded media.
Example Request (cURL)
curl -X POST \
  "https://public-api.robopost.app/v1/medias/upload?apikey=YOUR_API_KEY" \
  -F "file=@path/to/image.jpg"
Example Successful Response (JSON)
{
  "id": "64f20e2c915d2f1970ec8c09",
  "name": "image.jpg",
  "extension": "jpg",
  "storage_object_id": "9f73ad62-xxxxx-xxxxx-xxxxx-9556dcb903f4"
}
| Field | Description | 
|---|---|
| id | Internal Robopost ID for this media | 
| name | Original file name | 
| extension | File extension (e.g., png,jpg,mp4) | 
| storage_object_id | Unique identifier for referencing this file in scheduled posts (important!) | 
Create Scheduled Posts
Use this endpoint to schedule new posts (including drafts and recurring posts) across one or multiple social channels. You will need:
- The channel_id(or multiple IDs) for each social account.
- (Optionally) the storage_object_idfor media uploads (if you plan to attach images or video).
POST /scheduled_posts/
- Authentication: apikeyquery parameter
- Request Body: JSON object matching the PublicAPIScheduledPostCreateHTTPPayloadschema (see below).
- Response: Array of objects matching the PublicAPIScheduledPostReadschema, each representing a newly created scheduled post.
Note: The endpoint always returns an array (even if you only schedule one post).
URL
POST /v1/scheduled_posts/?apikey=YOUR_API_KEY
Example Request (cURL)
Below is an example showing how to schedule one post (with text, channel IDs, and attached medias).
You'll find several additional cURL examples demonstrating how to use the image_urls, gif_url, and video_url fields in your payload:
Example: Using image_urls
This example shows how to post with multiple image URLs. The API will download each image from the provided URLs, process, and upload them automatically.
curl -X POST \
  "https://public-api.robopost.app/v1/scheduled_posts/?apikey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Check out these images!",
    "channel_ids": ["my_instagram_channel_id"],
    "image_urls": [
      "https://example.com/image1.jpg",
      "https://example.com/image2.jpg"
    ],
    "schedule_at": "2025-03-01T10:00:00Z",
    "is_draft": false
  }'
Example: Using gif_url
Here’s an example of scheduling a post with a direct URL for a GIF. The API will automatically handle downloading and processing the GIF.
curl -X POST \
  "https://public-api.robopost.app/v1/scheduled_posts/?apikey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Animated fun with this GIF!",
    "channel_ids": ["my_facebook_channel_id"],
    "gif_url": "https://example.com/animated.gif",
    "schedule_at": "2025-03-01T12:00:00Z",
    "is_draft": false
  }'
Example: Using video_url
This example demonstrates how to post a video using a direct URL. The API will download, process, and upload the video automatically.
curl -X POST \
  "https://public-api.robopost.app/v1/scheduled_posts/?apikey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Watch this amazing video!",
    "channel_ids": ["my_youtube_channel_id"],
    "video_url": "https://example.com/video.mp4",
    "schedule_at": "2025-03-01T14:00:00Z",
    "is_draft": false
  }'
Each of these examples shows a different media type being used directly via URL. Simply replace the URL(s) and channel IDs with your own values as needed.
You can also use image_object_ids, video_id or gif_id, by passing the "storage_object_id" attribute that you got from /medias/upload endpoint.
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 REST API!",
    "channel_ids": ["my_facebook_channel_id"],
    "image_object_ids": ["9f73ad62-xxxxx-xxxxx-xxxxx-9556dcb903f4"],
    "schedule_at": "2025-03-01T10:00:00Z",
    "is_draft": false
  }'
Example Successful Response
[
  {
    "id": "64f20e2c915d2f1970ec8c09",
    "text": "Hello from the REST API!",
    "channel_ids": ["my_facebook_channel_id"],
    "image_object_ids": ["9f73ad62-xxxxx-xxxxx-xxxxx-9556dcb903f4"],
    "video_object_id": null,
    "gif_object_id": null,
    "facebook_settings": {
      "postType": "POST"
    },
    "instagram_settings": {
      "postType": "POST"
    },
    "pinterest_settings": {
      "pinTitle": "",
      "destinationLink": ""
    },
    "wordpress_settings": {
      "postTitle": "",
      "postText": "",
      "postSlug": "",
      "postType": "POST",
      "postCategories": [],
      "postTags": [],
      "postFeaturedImage": null,
      "postParentPage": 0
    },
    "youtube_settings": {
      "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,
      "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": "DALLE",
    "recur_until_dt": null,
    "recur_until_dt_enabled": false,
    "recur_rephrase_text_with_ai": false,
    "recur_rephrase_text_with_ai_tone": "FRIENDLY",
    "recur_interval_time_slots": []
  }
]
Request and Response Models
Below are the essential models for scheduling a post via the Robopost Public API.
These closely match the Python Pydantic models, but here we’ll describe them in a pure REST context.
PublicAPIScheduledPostCreateHTTPPayload
| Field | Type | Description | Required/Default | 
|---|---|---|---|
| _id(alias: id) | string (UUID) | Unique ID for the scheduled post. Normally auto-generated by the backend if not provided. | Defaults to uuid4() | 
| text | string | The main text/caption for the post. | Default: ""(empty) | 
| first_comment | string | First comment to add after posting to social media. Useful for adding hashtags or additional context without cluttering the main post. | Default: ""(empty) | 
| channel_ids | string[] | An array of channel IDs where this post should be published. If is_draft=false, at least one channel ID is required. | Default: [] | 
| image_urls | string[] | A list of direct URLs for images. The API will download each image from the provided URL(s) and process/upload them automatically. | Optional; Default: [] | 
| gif_url | string | A direct URL for a GIF file. The API will download and process/upload the GIF automatically if provided. | Optional; Default: null | 
| video_url | string | A direct URL for a video file. The API will download and process/upload the video automatically if provided. | Optional; Default: null | 
| image_object_ids | string[] | Array of storage_object_ids for images uploaded via/medias/upload. | Default: [] | 
| video_object_id | string | storage_object_idfor a video file (if any). | Optional; Default: null | 
| gif_object_id | string | storage_object_idfor a GIF file (if any). | Optional; Default: null | 
| facebook_settings | FacebookSettings | Additional settings for Facebook posts. | Default: see FacebookSettings | 
| instagram_settings | InstagramSettings | Additional settings for Instagram posts. | Default: see InstagramSettings | 
| pinterest_settings | PinterestSettings | Additional settings for Pinterest pins. | Default: see PinterestSettings | 
| wordpress_settings | WordpressSettings | Additional settings for WordPress posts. | Default: see WordpressSettings | 
| youtube_settings | YoutubeSettings | Additional settings for YouTube posts. | Default: see YoutubeSettings | 
| tiktok_settings | TikTokSettings | Additional settings for TikTok posts. | Default: see TikTokSettings | 
| gmb_settings | GMBSettings | Additional settings for Google My Business (GMB) posts. | Default: see GMBSettings | 
| is_draft | boolean | Set to trueif creating a draft; otherwisefalsefor a scheduled post. | Default: false | 
| post_collection_id | string | If you want to group this post into a “post collection” (i.e., a folder or batch), specify the collection ID here. | Optional; Default: null | 
| schedule_at | string (DateTime, UTC) | The date/time to schedule the post (in UTC). If omitted, defaults to datetime.now()(UTC) on the server. | Default: current UTC time | 
| is_recur | boolean | Whether this post should recur. | Default: false | 
| recur_interval | AutomationRecurInterval | The interval or rule for recurrence. Only relevant if is_recur=true. | Default: DAILY | 
| recur_generate_new_ai_image | boolean | Whether to generate a new AI image each time this post recurs. | Default: false | 
| recur_generate_new_ai_image_model | AIImageModel | If recur_generate_new_ai_image=true, specify which AI model to use (e.g.,DALLE). | Default: DALLE | 
| recur_until_dt | string (DateTime, UTC) | The optional end date for recurrence. | Optional; Default: null | 
| recur_until_dt_enabled | boolean | Set to trueif you want to limit recurrence torecur_until_dt; otherwisefalse. | Default: false | 
| recur_rephrase_text_with_ai | boolean | If true, the text caption will be automatically rephrased for each recurrence using AI. | Default: false | 
| recur_rephrase_text_with_ai_tone | PostAIGenerateVoiceTone | If recur_rephrase_text_with_ai=true, this specifies the voice/tone of the rephrased text (e.g.,FUNNY,FRIENDLY). | Default: FRIENDLY | 
| recur_interval_time_slots | string[] (ISO 8601 UTC) | For intervals like DAILY_SPECIFIC_TIME_SLOTSorWEEKLY_SPECIFIC_TIME_SLOTS, specify the times (or date-times) in UTC. | Default: [] | 
PublicAPIScheduledPostRead
Represents the newly created scheduled post (or draft) returned by the API. Most fields mirror those in the PublicAPIScheduledPostCreateHTTPPayload. Notable difference: the id is always set and additional fields reflect the final stored state.
| Field | Type | Description | 
|---|---|---|
| id | string | Unique identifier of the scheduled post | 
| text | string | Main text of the post | 
| first_comment | string | First comment to add after posting to social media. Useful for adding hashtags or additional context without cluttering the main post. | 
| channel_ids | string[] | Channels targeted by this post | 
| image_object_ids | string[] | IDs for attached images | 
| video_object_id | string | ID for the attached video (if any) | 
| gif_object_id | string | ID for the attached GIF (if any) | 
| facebook_settings | FacebookSettings | Readback of platform-specific fields for Facebook | 
| instagram_settings | InstagramSettings | Readback of platform-specific fields for Instagram | 
| pinterest_settings | PinterestSettings | Readback of platform-specific fields for Pinterest | 
| wordpress_settings | WordpressSettings | Readback of platform-specific fields for WordPress | 
| youtube_settings | YoutubeSettings | Readback of platform-specific fields for YouTube | 
| tiktok_settings | TikTokSettings | Readback of platform-specific fields for TikTok | 
| gmb_settings | GMBSettings | Readback of platform-specific fields for Google My Business (GMB) | 
| is_draft | boolean | trueif saved as a draft, otherwisefalse | 
| post_collection_id | string | ID of the post collection if grouped | 
| schedule_at | string (DateTime, UTC) | The scheduled date/time in UTC | 
| is_recur | boolean | Whether the post is recurring | 
| recur_interval | AutomationRecurInterval | Interval for recurrence | 
| recur_generate_new_ai_image | boolean | If true, each recurrence generates a new AI image | 
| recur_generate_new_ai_image_model | AIImageModel | AI model used for generating images (if above is true) | 
| recur_until_dt | string (DateTime, UTC) | End date/time for recurrence (if enabled) | 
| recur_until_dt_enabled | boolean | trueif recurrence is capped atrecur_until_dt | 
| recur_rephrase_text_with_ai | boolean | trueif text is rephrased by AI each time | 
| recur_rephrase_text_with_ai_tone | PostAIGenerateVoiceTone | AI rephrase tone (if above is true) | 
| recur_interval_time_slots | string[] (ISO 8601 UTC) | Time slots for certain recurrence rules (daily/weekly-specific) | 
FacebookSettings
| Field | Type | Description | Default | 
|---|---|---|---|
| postType | FacebookPostType | POSTorREELS | POST | 
InstagramSettings
| Field | Type | Description | Default | 
|---|---|---|---|
| postType | InstagramPostType | POST,REELS, orSTORIES | POST | 
PinterestSettings
| Field | Type | Description | Default | 
|---|---|---|---|
| pinTitle | string | The title of your pin | "" | 
| destinationLink | string | The link/URL that your pin redirects to | "" | 
WordpressSettings
| Field | Type | Description | Default | 
|---|---|---|---|
| postTitle | string | Title of the WordPress post | "" | 
| postText | string | Full HTML or text for the post body | "" | 
| postSlug | string | Slug (if desired) | "" | 
| postType | WordpressPostType | POST,PAGE(etc., if supported by your WP instance) | POST | 
| postCategories | string[] | One or more category names or IDs | [] | 
| postTags | string[] | One or more tag names or IDs | [] | 
| postFeaturedImage | string | (Optional) Featured image URL or ID | null | 
| postParentPage | number | (Optional) Parent page ID for hierarchical WP setups | 0 | 
YoutubeSettings
| Field | Type | Description | Default | 
|---|---|---|---|
| videoTitle | string | Title of the video/short | "" | 
| videoType | YoutubeVideoType | videoorshort | video | 
| videoDescription | string | Description/body text | "" | 
| videoPrivacyStatus | YoutubePrivacyStatus | public,private, orunlisted | public | 
| videoThumbnailImageObject | string | (Optional) An image ID for the thumbnail (if customizing) | null | 
| videoThumbnailGroupUuid | string | (Optional) Another ID for advanced thumbnail grouping (internal usage) | null | 
Note: The actual uploaded video is tied tovideo_object_idin the main payload. ThevideoTypeandvideoPrivacyStatusfurther configure how YouTube handles it.
TikTokSettings
| Field | Type | Description | Default | 
|---|---|---|---|
| title | string | Caption/title for the TikTok | "" | 
| privacyLevel | TikTokPrivacyLevel | PUBLIC_TO_EVERYONE | PUBLIC_TO_EVERYONE | 
| disableDuet | boolean | Whether to disable duets | false | 
| disableComment | boolean | Whether to disable comments | false | 
| disableStitch | boolean | Whether to disable stitching | false | 
| videoCoverTimestampMs | number | Milliseconds timestamp for the cover thumbnail | 0 | 
| videoThumbnailGroupUuid | string | (Optional) ID for advanced thumbnail grouping | null | 
| autoAddMusic | boolean | Whether TikTok should automatically add music | true | 
Note: The actual uploaded TikTok video is tied to video_object_id in the main payload.GMBSettings
| Field | Type | Description | Default | 
|---|---|---|---|
| postTopicType | GMBPostTopicType | STANDARD,OFFER, orEVENT | STANDARD | 
| offerTitle | string | Offer title (if OFFERtype) | "" | 
| offerCouponCode | string | Coupon code (if OFFERtype) | "" | 
| offerRedeemOnlineUrl | string | URL where users can redeem the offer | "" | 
| offerTermsConditions | string | Terms and conditions | "" | 
| offerStartDt | string (DateTime, UTC) | Start date/time for an offer | null | 
| offerEndDt | string (DateTime, UTC) | End date/time for an offer | null | 
| eventTitle | string | Event title (if EVENTtype) | "" | 
| eventStartDt | string (DateTime, UTC) | Start date/time for the event | null | 
| eventEndDt | string (DateTime, UTC) | End date/time for the event | null | 
| ctaButtonActionType | GMBCTAButtonActionType | CTA button action: e.g. BOOK,ORDER,SHOP,LEARN_MORE,SIGN_UP,CALL | ACTION_TYPE_UNSPECIFIED | 
| ctaUrl | string | URL/phone number for the CTA button | "" | 
Enums
- AIImageModel- DALLE,- FLUX_SCHNELL,- FLUX_DEV,- FLUX_PRO
 
- PostAIGenerateVoiceTone- Examples: POLITE,WITTY,INFORMATIONAL,FUNNY,FRIENDLY, etc.
 
- Examples: 
- AutomationRecurInterval- DAILY_SPECIFIC_TIME_SLOTS,- WEEKLY_SPECIFIC_TIME_SLOTS,- EVERY_3_HOURS,- EVERY_6_HOURS,- BI_DAILY,- DAILY,- WEEKLY,- MONTHLY,- YEARLY
 
- FacebookPostType- POST,- REELS
 
- InstagramPostType- POST,- REELS,- STORIES
 
- WordpressPostType- POST,- PAGE(other types may be supported by your WP environment)
 
- 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
 
Error Handling
The Robopost Public API responds with standard HTTP status codes to indicate success or failure:
| Status Code | Reason | Example Response | 
|---|---|---|
| 200 OK | Request succeeded; check the response body for details | (For successful operations) | 
| 201 Created | Resource created (not typically used by these endpoints) | |
| 400 Bad Request | Missing or invalid fields in the request body | {"msg": "channel_ids is required ... unless the post is a draft."} | 
| 401 Unauthorized or 403 Forbidden | Invalid or missing apikey | {"detail": "Not authenticated"} | 
| 409 Conflict | Account usage is frozen or plan limit exceeded | {"msg": "ACCOUNT_USAGE_FROZEN", "reason": "Your subscription has expired."} | 
Typical error responses include a JSON body describing the cause. For instance, if you try to schedule a post with no channel_ids (and is_draft=false), you’ll receive a 400 error.
Example Workflow
- Upload Media (Optional)- POST /medias/upload?apikey=YOUR_API_KEYwith- multipart/form-datato get- storage_object_id.
 
- Create Scheduled Post- POST /scheduled_posts/?apikey=YOUR_API_KEYwith a JSON body that includes:- channel_ids(unless you’re making a draft)
- image_object_idsor- video_object_idreferencing any uploaded media
- schedule_atin UTC
- Any optional platform-specific settings (FacebookSettings,YouTubeSettings, etc.)
 
 
- Receive Confirmation- The API returns an array of newly created post objects in JSON format.
 
Notes
- Dates/Times: Provide all datetimes in ISO 8601 format in UTC (e.g., "2025-03-02T15:30:00Z").
- Recurring Posts: If is_recur=true, you must specifyrecur_intervaland any relevant fields for daily or weekly specific time slots (recur_interval_time_slots).
- Draft vs. Scheduled: Use is_draft=truefor a draft (no immediate scheduling) oris_draft=falsefor an actual scheduled post.
- Post Collections: Provide post_collection_idif you want to group your posts; otherwise leave it asnullor omit it.
For additional usage examples, please refer to the Python Client documentation or contact support.
Video Generation Endpoints
Video Series Management
Create Video Series
Create a new faceless video series configuration for generating multiple videos with consistent settings.
POST /video-series/
Authentication: apikey query parameter
Example Request
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",
    "channel_ids": ["channel_id_1", "channel_id_2"],
    "is_recur": true,
    "recur_interval": "DAILY",
    "timezone": "America/New_York"
  }'Example Response
{
  "id": "series_123456",
  "name": "My Educational Series",
  "content_type": "ELI5",
  "style": "ANIME",
  "voice": "ALICE",
  "format": "PORTRAIT",
  "max_duration": 60,
  "is_recur": true,
  "recur_interval": "DAILY",
  "created_at": "2025-01-10T10:00:00Z",
  "updated_at": "2025-01-10T10:00:00Z"
}List Video Series
Get all video series for your team with optional filtering and pagination.
GET /video-series/
Authentication: apikey query parameter
Query Parameters:
- search_text(optional): Search in series names
- skip(optional, default: 0): Number of items to skip
- limit(optional, default: 10, max: 100): Maximum items to return
- sort_by_field(optional, default: "created_at"): Field to sort by
- sort_order(optional, default: "desc"): Sort order ("asc" or "desc")
Example Request
curl -X GET \
  "https://public-api.robopost.app/v1/video-series/?apikey=YOUR_API_KEY&search_text=educational&limit=20"Get Video Series
Retrieve a specific video series by ID.
GET /video-series/{series_id}
Authentication: apikey query parameter
Path Parameters:
- series_id: The ID of the video series
Example Request
curl -X GET \
  "https://public-api.robopost.app/v1/video-series/series_123456?apikey=YOUR_API_KEY"Update Video Series
Update an existing video series configuration.
PUT /video-series/{series_id}
Authentication: apikey query parameter
Path Parameters:
- series_id: The ID of the video series Request Body: JSON object with fields to update
Example Request
curl -X PUT \
  "https://public-api.robopost.app/v1/video-series/series_123456?apikey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Series Name",
    "max_duration": 90,
    "font_color": "RED"
  }'Delete Video Series
Soft delete a video series (marks as deleted but preserves data).
DELETE /video-series/{series_id}
Authentication: apikey query parameter
Path Parameters:
- series_id: The ID of the video series
Example Request
curl -X DELETE \
  "https://public-api.robopost.app/v1/video-series/series_123456?apikey=YOUR_API_KEY"Video Generation Tasks
Generate Video
Create a new video generation task from a video series.
POST /video-tasks/{series_id}/generate
Authentication: apikey query parameter
Path Parameters:
- series_id: The ID of the video series to generate from
Example Request
curl -X POST \
  "https://public-api.robopost.app/v1/video-tasks/series_123456/generate?apikey=YOUR_API_KEY"Example Response
{
  "task_id": "task_789012",
  "video_series_id": "series_123456",
  "status": "IN_PROGRESS",
  "created_at": "2025-01-10T10:30:00Z"
}Get Video Task Status
Check the status of a video generation task.
GET /video-tasks/{task_id}
Authentication: apikey query parameter
Path Parameters:
- task_id: The ID of the video task
Example Request
curl -X GET \
  "https://public-api.robopost.app/v1/video-tasks/task_789012?apikey=YOUR_API_KEY"Example Response
{
  "task_id": "task_789012",
  "video_series_id": "series_123456",
  "video_url": "https://api.robopost.app/stored_objects/123456789/download",
  "status": "COMPLETE",
  "created_at": "2025-01-10T10:30:00Z"
}List Video Tasks
List all video generation tasks with optional filtering.
GET /video-tasks/
Authentication: apikey query parameter
Query Parameters:
- series_id(optional): Filter by video series ID
- status(optional): Filter by task status
- skip(optional, default: 0): Number of items to skip
- limit(optional, default: 10, max: 100): Maximum items to return
- sort_order(optional, default: "desc"): Sort order by creation date
Example Request
curl -X GET \
  "https://public-api.robopost.app/v1/video-tasks/?apikey=YOUR_API_KEY&status=IN_PROGRESS&limit=50"Get Video Task Details
Get detailed information about a video generation task including error messages and results.
GET /video-tasks/{task_id}/details
Authentication: apikey query parameter
Path Parameters:
- task_id: The ID of the video task
Example Request
curl -X GET \
  "https://public-api.robopost.app/v1/video-tasks/task_789012/details?apikey=YOUR_API_KEY"Cancel Video Task
Cancel an in-progress video generation task.
DELETE /video-tasks/{task_id}
Authentication: apikey query parameter
Path Parameters:
- task_id: The ID of the video task
Example Request
curl -X DELETE \
  "https://public-api.robopost.app/v1/video-tasks/task_789012?apikey=YOUR_API_KEY"Video Series Models
PublicAPIGeneratedFacelessVideoSeriesCreate
| Field | Type | Description | Required/Default | 
|---|---|---|---|
| name | string | Name of the video series | Required | 
| content_type | GeneratedFacelessVideoSeriesContentType | Type of content (ELI5, SCARY_STORIES, etc.) | Default: ELI5 | 
| style | GeneratedFacelessVideoStyle | Visual style (DEFAULT, ANIME, etc.) | Default: DEFAULT | 
| voice | string | AI voice name or ElevenLabs ID | Default: ALICE | 
| text_prefix | string | Text to add before main content | Default: "" | 
| text_suffix | string | Text to add after main content | Default: "" | 
| lang | string | Language code | Default: "en" | 
| stick_to_script | boolean | Strictly follow script or allow AI improvisation | Default: false | 
| content_custom | string | Custom content instructions | Default: "" | 
| format | GeneratedVideoFormat | Video format (PORTRAIT, WIDESCREEN, SQUARE) | Default: PORTRAIT | 
| max_duration | integer | Maximum video duration in seconds (5-600) | Default: 60 | 
| prevent_text_in_video | boolean | Prevent text overlays in video | Default: false | 
| narration_volume | float | Narration volume multiplier (0.6-1.8) | Default: 1.2 | 
| bgm_volume | float | Background music volume (0.05-0.4) | Default: 0.2 | 
| font_size | integer | Caption font size (10-300) | Default: 110 | 
| font_color | VideoColor | Caption text color | Default: YELLOW | 
| stroke_width | integer | Caption stroke width (0-20) | Default: 3 | 
| stroke_color | VideoColor | Caption stroke color | Default: BLACK | 
| shadow_strength | float | Caption shadow strength (0-5) | Default: 1.0 | 
| shadow_blur | float | Caption shadow blur (0-10) | Default: 0.1 | 
| highlight_current_word | boolean | Highlight currently spoken word | Default: true | 
| word_highlight_color | VideoColor | Current word highlight color | Default: RED | 
| line_count | integer | Max caption lines on screen (1-10) | Default: 1 | 
| padding | integer | Caption padding from edges (0-500) | Default: 50 | 
| position | VideoCaptionPosition | Caption position on screen | Default: CENTER_CENTER | 
| use_knowledge_base | boolean | Use knowledge base for content | Default: false | 
| knowledge_base_id | string | ID of knowledge base to use | Optional | 
| bgm_bucket_id | string | Background music bucket ID | Optional | 
| splash_screen_object | object | Splash screen configuration | Optional | 
| create_scheduled_post | boolean | Create scheduled posts for videos | Default: false | 
| post_to | AutomationPostTo | Where to post videos (DIRECT, DRAFT, POST_COLLECTION) | Default: DIRECT | 
| post_collection_ids | string[] | Post collection IDs | Default: [] | 
| channel_ids | string[] | Channel IDs for posting | Default: [] | 
| is_recur | boolean | Enable recurring generation | Default: false | 
| timezone | string | Timezone for scheduling | Optional | 
| recur_dt | datetime | Next scheduled generation time | Optional | 
| recur_interval | AutomationRecurInterval | Recurrence interval | Optional | 
| recur_interval_time_slots | string[] | Daily time slots | Default: [] | 
| recur_interval_weekly_time_slots | string[] | Weekly time slots | Default: [] | 
| recur_until_dt | datetime | End date for recurrence | Optional | 
| recur_until_dt_enabled | boolean | Enable recurrence end date | Default: false | 
Video Task Response Model
| Field | Type | Description | 
|---|---|---|
| task_id | string | Unique identifier for the task | 
| video_series_id | string | ID of the video series | 
| status | string | Current task status (IN_PROGRESS, COMPLETE, ERROR, NO_CREDITS) | 
| created_at | datetime | Task creation timestamp | 
Enums for Video Generation
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
AI Voices
- ALICE, BILL, SARAH, BRIAN, LAURA, ARIA, CALLUM, CHARLIE
- Custom ElevenLabs voice IDs
Error Handling
| Status Code | Reason | Example Response | 
|---|---|---|
| 200 OK | Request succeeded | (Successful operations) | 
| 201 Created | Resource created | (New video series/task created) | 
| 400 Bad Request | Invalid request data | {"msg": "Invalid content_type"} | 
| 401/403 | Invalid or missing API key | {"detail": "Not authenticated"} | 
| 404 Not Found | Resource not found | {"detail": "Video series not found"} | 
| 409 Conflict | Resource conflict or limit exceeded | {"msg": "NO_CREDITS", "reason": "Video generation limit reached"} | 
| 500 Internal Server Error | Server error | {"detail": "Internal server error"} | 
Example Video Generation Workflow
- Create a Video Series
curl -X POST \
  "https://public-api.robopost.app/v1/video-series/?apikey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Daily Facts Series",
    "content_type": "FUN_FACTS",
    "style": "POP_ART",
    "voice": "ARIA",
    "max_duration": 45,
    "format": "PORTRAIT",
    "channel_ids": ["instagram_channel_id"],
    "create_scheduled_post": true
  }'- Generate a Video
curl -X POST \
  "https://public-api.robopost.app/v1/video-tasks/series_123456/generate?apikey=YOUR_API_KEY"- Check Task Status
curl -X GET \
  "https://public-api.robopost.app/v1/video-tasks/task_789012?apikey=YOUR_API_KEY"- When Complete, Video is Automatically Posted (if create_scheduled_postwas true)
Notes
- Credits: Video generation consumes credits based on your plan
- Processing Time: Videos typically take 20 minutes to generate
- Recurring Series: Use is_recur=truewith appropriate interval settings for automated generation
- Knowledge Base: Link a knowledge base for content-aware video generation
- Custom Content: Use content_type="CUSTOM"withcontent_customfield for specific instructions
Robopost – all-in-one AI-driven social media management!
For more information, visit: robopost.app
 
                            