Developer resources

VidSyndicate API Documentation

Create posts from WordPress, Shopify, RSS workflows, OpenAPI-compatible AI clients, and other external systems while using the same validation, media, scheduling, publishing, and retry pipeline as the VidSyndicate dashboard.

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

  1. Authenticate with the VidSyndicate API key.
  2. Retrieve account capabilities and current limits.
  3. Retrieve the user’s connected channels and select their IDs.
  4. When Pinterest is selected, retrieve that channel’s boards and select a board ID.
  5. 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

FieldDescription
titleRequired post title, up to 255 characters.
contentRequired post body.
link_urlOptional HTTP/HTTPS source or CTA URL.
publish_modedraft, publish_now, or scheduled.
scheduled_atRequired future ISO 8601 time for scheduled posts.
channel_idsConnected channel IDs owned by the authenticated account.
generate_ai_contentUse the existing AI writing service.
generate_imageGenerate and attach an image in the same request.
imageMultipart image alternative to generate_image.
pinterest_board_idBoard ID returned for the selected Pinterest channel.
pinterest_titleOptional Pin title override, up to 100 characters.
pinterest_descriptionOptional 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.

PlanPost allowanceAPI requests/minute
Free10 stored posts total30
Starter30 published posts/month60
Pro200 published posts/month120
Studio1,000 published posts/month240
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.