OpenAPI clients
Using VidSyndicate with ChatGPT and AI Agents
VidSyndicate can act as the social publishing layer between an AI application and supported social networks. An AI client can prepare content, inspect the authenticated account’s available destinations, and ask VidSyndicate to create a draft, publish immediately, or schedule distribution.
The public OpenAPI 3.1 schema is designed for OpenAPI-compatible applications and preparation for systems such as ChatGPT GPT Actions. This is API compatibility, not an official ChatGPT integration.
Developers use one VidSyndicate publishing API instead of separately maintaining publishing integrations for Facebook, Instagram, LinkedIn, Pinterest, and X. Actual destinations depend on the channels connected to the authenticated account.
Recommended client workflow
Discover before creating a campaign
- Authenticate with the VidSyndicate API key.
- Retrieve account capabilities and current limits.
- Retrieve the user’s connected channels and select their IDs.
- When Pinterest is selected, retrieve that channel’s boards and select a board ID.
- Create the campaign using
draft, publish_now, or scheduled.
Clients must never guess channel or Pinterest board IDs. VidSyndicate validates both against the authenticated account.
Account discovery
Inspect capabilities and plan limits
This response describes the authenticated account only, including connected platforms, available generation features, post usage, and the plan-based request limit.
curl --request GET \
--url "https://vidsyndicate.com/api/v1/capabilities" \
--header "Accept: application/json" \
--header "Authorization: Bearer $VIDSYNDICATE_API_KEY"
Authentication
Bearer API keys
Every account can generate a key from Dashboard → Account → API Access. The full key is shown once. Send it in the Authorization header and never expose it in client-side code or source control.
Authorization: Bearer vsk_your_api_key
Connection test
Verify the authenticated account
curl --request GET \
--url "https://vidsyndicate.com/api/v1/me" \
--header "Accept: application/json" \
--header "Authorization: Bearer $VIDSYNDICATE_API_KEY"
Connected destinations
List channel IDs
Only IDs returned for the authenticated account can be submitted when creating a post.
curl --request GET \
--url "https://vidsyndicate.com/api/v1/connected-channels" \
--header "Accept: application/json" \
--header "Authorization: Bearer $VIDSYNDICATE_API_KEY"
Create and review
Create a draft
The link is stored in the dashboard’s Link To Include field and appended to the post body once if it is not already present.
curl --request POST \
--url "https://vidsyndicate.com/api/v1/campaigns" \
--header "Accept: application/json" \
--header "Authorization: Bearer $VIDSYNDICATE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"title": "Imported article",
"content": "Review this post in VidSyndicate.",
"link_url": "https://example.com/article",
"publish_mode": "draft"
}'
Pinterest destinations
List boards and select one
Replace 44 with the Pinterest channel ID returned by the connected-channels endpoint. The selected board is verified against that account before a scheduled or publish-now post is created.
curl --request GET \
--url "https://vidsyndicate.com/api/v1/connected-channels/44/boards" \
--header "Accept: application/json" \
--header "Authorization: Bearer $VIDSYNDICATE_API_KEY"
{
"publish_mode": "scheduled",
"channel_ids": [44],
"pinterest_board_id": "123456789012345678",
"generate_image": true
}
Schedule with generated media
Generate an image and schedule the post
Use a future ISO 8601 time and replace the timestamp placeholder with the actual date and time you want. This example targets Pinterest channel 44; retrieve its boards first and replace the sample board ID with one returned for that connection. The image is generated and attached during the request.
curl --request POST \
--url "https://vidsyndicate.com/api/v1/campaigns" \
--header "Accept: application/json" \
--header "Authorization: Bearer $VIDSYNDICATE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"title": "Scheduled post",
"content": "Publish this post at the requested time.",
"link_url": "https://example.com/article",
"publish_mode": "scheduled",
"scheduled_at": "REPLACE_WITH_FUTURE_ISO_8601_TIMESTAMP",
"channel_ids": [44],
"pinterest_board_id": "123456789012345678",
"generate_ai_content": false,
"generate_image": true
}'
Upload media
Publish with an uploaded image
Images may be JPG, JPEG, PNG, or WebP up to 10 MB. Curl supplies the multipart boundary automatically.
curl --request POST \
--url "https://vidsyndicate.com/api/v1/campaigns" \
--header "Accept: application/json" \
--header "Authorization: Bearer $VIDSYNDICATE_API_KEY" \
--form "title=Uploaded image post" \
--form "content=Publish this post with its uploaded image." \
--form "link_url=https://example.com/article" \
--form "publish_mode=publish_now" \
--form "channel_ids[]=12" \
--form "image=@/absolute/path/to/image.jpg"
Request fields
POST /api/v1/campaigns
| Field | Description |
title | Required post title, up to 255 characters. |
content | Required post body. |
link_url | Optional HTTP/HTTPS source or CTA URL. |
publish_mode | draft, publish_now, or scheduled. |
scheduled_at | Required future ISO 8601 time for scheduled posts. |
channel_ids | Connected channel IDs owned by the authenticated account. |
generate_ai_content | Use the existing AI writing service. |
generate_image | Generate and attach an image in the same request. |
image | Multipart image alternative to generate_image. |
pinterest_board_id | Board ID returned for the selected Pinterest channel. |
pinterest_title | Optional Pin title override, up to 100 characters. |
pinterest_description | Optional Pin description override, up to 500 characters. |
Plan limits
API usage follows account limits
API-created posts count against the same limits as dashboard-created posts. API access does not create a separate publishing allowance.
| Plan | Post allowance | API requests/minute |
| Free | 10 stored posts total | 30 |
| Starter | 30 published posts/month | 60 |
| Pro | 200 published posts/month | 120 |
| Studio | 1,000 published posts/month | 240 |
Responses
HTTP status codes
200 — connection or channel listing succeeded.
201 — post created.
401 — API key is missing, invalid, regenerated, or revoked.
422 — validation or account plan limit prevented creation.
429 — per-key request rate exceeded.
Remote media_url downloads are not currently accepted. Upload an image or use generate_image.