ContentStudio API

ContentStudio’s API lets you manage workspaces, social accounts, and posts programmatically. This guide provides an overview of the available endpoints and explains how to authenticate and use the API effectively. By using your API key, you can connect ContentStudio with integrations like Zapier, Make.com, or custom applications.

📖 In this article

This guide walks you through everything you need to use the ContentStudio API — from getting your API key to managing posts, workspaces, media, and team members programmatically.

🔑 Authentication & Setup 3 topics
🏢 Workspaces 5 topics
📱 Social Accounts 2 topics
📝 Posts Management 5 topics
💬 Comments & Notes 2 topics
🖼️ Media Library 2 topics
📊 API Logs & Best Practices 1 topic
FAQs 4 topics

How to Get Your ContentStudio API Key

1 Click on your profile picture in the top-right corner, and select the API Key option from the dropdown menu.

2 Click on Generate API Key and copy your unique API key.

You can now use this API key wherever required, such as in Zapier, Make.com, or when connecting with other integrations.

3 Click on the three dots next to your API key. You’ll see two options:

  • Regenerate: Create a new API key if your current one is compromised or you want to reset access.
  • Revoke: Permanently disable the existing API key if it’s no longer needed.


Authentication

Authenticate all requests with your API key in the request header. For a complete list of available endpoints and examples, see the ContentStudio API Guide.

Header format:

X-API-Key: <YOUR_API_KEY>

Example using cURL:

cURL -H "X-API-Key: <YOUR_API_KEY>" \
https://api.contentstudio.io/api/v1/me

This authenticates your request and grants access to API endpoints.


Endpoints-Get Authenticated User

Retrieve information about the currently authenticated user.

Endpoint: GET /api/v1/me                     

cURL Example:

cURL -X GET "https://api.contentstudio.io/api/v1/me" \
  -H "X-API-Key: <YOUR_API_KEY>"

Connect Social Accounts

You can now connect social accounts to your workspace directly through the API. Bluesky and Facebook Groups are connected manually using credentials. All other platforms use an OAuth-based flow.

  • Connect Bluesky Account

    Endpoint: POST /api/v1/workspaces/{workspace_id}/add/bluesky   

    cURL Example:

curl -X POST "https://api.contentstudio.io/api/v1/workspaces/{workspace_id}/add/bluesky" \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "handle": "yourname.bsky.social",
    "app_password": "xxxx-xxxx-xxxx-xxxx"
  }'
  • Connect Facebook Group

Adds a Facebook Group connection using its name and an optional image URL. No browser step is required.

Endpoint: POST /api/v1/workspaces/{workspace_id}/add/facebook-group   

cURL Example:

curl -X POST "https://api.contentstudio.io/api/v1/workspaces/{workspace_id}/add/facebook-group" \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Facebook Group",
    "image": "https://example.com/group.jpg"
  }'
  • Connect via OAuth (All Other Platforms)

Generates a one-time authorization URL for connecting to an OAuth-based social account. Use process=connect     for new accounts and process=reconnect     (with account_id    ) to refresh an expired or invalid account.


Supported platforms:

  • facebook
  • facebook-profile
  • instagram
  • instagram-via-facebook
  • twitter
  • linkedin
  • pinterest
  • tiktok
  • youtube
  • threads
  • gmb
  • tumblr

Endpoint: POST /api/v1/workspaces/{workspace_id}/connect/{platform}   

cURL Example:

curl -X POST "https://api.contentstudio.io/api/v1/workspaces/{workspace_id}/connect/facebook?process=connect" \
  -H "X-API-Key: <YOUR_API_KEY>"

cURL Response:

{
  "status": true,
  "message": "Authorization URL generated. Open this URL in a browser to connect your Facebook account.",
  "data": {
    "authorization_url": "https://www.facebook.com/v18.0/dialog/oauth?client_id=...&state=...",
    "session_id": "cs_sess_abc123def456",
    "platform": "facebook",
    "process": "connect",
    "account_name": "My Business Page",
    "expires_at": "2026-04-16T17:30:00Z",
    "next_steps": [
      "Open the authorization_url in a web browser."
    ],
    "security": {
      "expires_in_minutes": 30,
      "single_use": true,
      "warning": "Do not share this URL. It grants one-time access to connect an account to your workspace."
    }
  }
}

Get Workspaces

Fetch a list of workspaces linked to your account.

Endpoint: GET /api/v1/workspaces                     

cURL Example:

cURL -X GET "https://api.contentstudio.io/api/v1/workspaces?page=1&per_page=10" \

-H "X-API-Key: <YOUR_API_KEY>"

Get Content Categories for a workspace

​Retrieve the list of content categories for a specific workspace with resolved social account information. Global categories are excluded.

Endpoint: GET /api/v1/workspaces/{workspace_id}/content-categories             

cURL Example:

curl http://api.contentstudio.io/api/v1/workspaces/610a1e56b41530ca40d372/content-categories \
  --header 'X-API-Key: YOUR_SECRET_TOKEN'

cURL Response:

{
  "status": true,
  "message": "Content categories retrieved successfully.",
  "current_page": 1,
  "per_page": 10,
  "total": 25,
  "last_page": 3,
  "from": 1,
  "to": 10,
  "data": [
    {
      "_id": "625d0674cebc2f5e7743",
      "name": "My Category",
      "color": "color_15",
      "state": "active",
      "accounts": [
        {
          "_id": "10692115395",
          "platform": "facebook",
          "name": "My Facebook Page"
        }
      ],
      "slots_count": 5,
      "posts_count": 10,
      "color_code": "#544c72"
    }
  ]
}

Get campaigns for a workspace

Retrieve paginated list of campaigns (folders) for a specific workspace, sorted alphabetically by name.

Endpoint: GET/api/v1/workspaces/{workspace_id}/campaigns               

cURL Example:

curl http://api-prod.contentstudio.io/api/v1/workspaces/610a1e660cb4130c40d372/campaigns \
  --header 'X-API-Key: YOUR_SECRET_TOKEN'

cURL Response:

{
  "status": true,
  "message": "Campaigns retrieved successfully",
  "current_page": 1,
  "per_page": 10,
  "total": 25,
  "last_page": 3,
  "from": 1,
  "to": 10,
  "data": [
    {
      "_id": "625d06734ceb636c2f5e7743",
      "name": "Q1 Marketing",
      "color": "color_9"
    }
  ]
}

Get labels for a workspace

Retrieve paginated list of labels for a specific workspace, sorted alphabetically by name.

Endpoint: GET /api/v1/workspaces/{workspace_id}/labels               

cURL Example:

curl http://api-prod.contentstudio.io/api/v1/workspaces/610a1ecb41530ca40d372/labels \
--header 'X-API-Key: YOUR_SECRET_TOKEN'

cURL Response:

{
"status": true,
"message": "Labels retrieved successfully",
"current_page": 1,
"per_page": 10,
"total": 25,
"last_page": 3,
"from": 1,
"to": 10,
"data": [
{
  "_id": "625d06734ceb636c2f5e7743",
  "name": "Urgent",
  "color": "color_1"
}
]
}

List Media assets

Retrieve a paginated list of media assets for a workspace with filtering, search, and sort options.

Endpoint: GET /api/v1/workspaces/{workspace_id}/media               

cURL Example:

curl http://api-prod.contentstudio.io/api/v1/workspaces/610a1e660cb30ca40d372/media \
--header 'X-API-Key: YOUR_SECRET_TOKEN'

cURL Response:

{
"status": true,
"message": "Media retrieved successfully.",
"current_page": 1,
"per_page": 20,
"total": 150,
"last_page": 8,
"from": 1,
"to": 20,
"data": [
{
  "_id": "625d06734ceb636c2f5e7743",
  "name": "banner.jpg",
  "url": "https://storage.googleapis.com/.../banner.jpg",
  "mime_type": "image/jpeg",
  "extension": "jpg",
  "size": 245760,
  "type": "image",
  "folder_id": null,
  "is_processing": false,
  "created_at": "2026-03-16T07:33:51.539Z",
  "dimensions": {
    "width": 1920,
    "height": 1080
  }
}
]
}

Upload media

Upload a media file or import from URL into the workspace media library. Provide either a file or a URL, not both.

Endpoint: POST /api/v1/workspaces/{workspace_id}/media               

cURL Example:

curl http://api-prod.contentstudio.io/api/v1/workspaces/610a1e660cb41530ca40d372/media \
--request POST \
--header 'Content-Type: multipart/form-data' \
--header 'X-API-Key: YOUR_SECRET_TOKEN' \
--form 'file=' \
--form 'url=https://example.com/image.jpg' \
--form 'folder_id=625d06734ceb636c2f5e7743'

cURL Response:

{
"status": true,
"message": "Media uploaded successfully.",
"data": {
"_id": "625d06734ceb636c2f5e7743",
"name": "photo.jpg",
"url": "https://storage.googleapis.com/.../photo.jpg",
"mime_type": "image/jpeg",
"extension": "jpg",
"size": 245760,
"type": "image",
"folder_id": null,
"is_processing": false,
"created_at": "2026-03-16T07:33:51.539Z",
"dimensions": {
  "width": null,
  "height": null
}
}
}

Get Social Accounts

Retrieve connected social accounts for a workspace.

Endpoint: GET /api/v1/workspaces/{workspace_id}/accounts                     

cURL Example:

cURL -X GET "https://api.contentstudio.io/api/v1/workspaces/{workspace_id}/accounts?platform=facebook,instagram" \
  -H "X-API-Key: <YOUR_API_KEY>"

Get Posts

Fetch posts from a workspace with filtering options (draft, scheduled, published, etc.).

Endpoint: GET /api/v1/workspaces/{workspace_id}/posts                     

cURL Example:

cURL -X GET "https://api.contentstudio.io/api/v1/workspaces/{workspace_id}/posts?status[]=scheduled&per_page=10" \
  -H "X-API-Key: <YOUR_API_KEY>"

cURL Reponse :

{
  "status": true,
  "message": "Posts retrieved successfully",
  "current_page": 1,
  "per_page": 10,
  "total": 25,
  "last_page": 3,
  "from": 1,
  "to": 10,
  "data": [
    {
      "id": "61e006a89be9dd0cd07ec692",
      "workspace_id": "610a1e660cb41530ca40d372",
      "content": {
        "text": "Check out our latest product launch! ",
        "images": [
          "https://example.com/image1.jpg"
        ],
        "video": "https://example.com/video.mp4"
      },
      "accounts": {
        "facebook": [
          {
            "account_id": "350830594784444",
            "account_name": "My Business Page",
            "platform": "facebook"
          }
        ],
        "instagram": [
          {
            "account_id": "17841400455970028",
            "account_name": "@mybusiness",
            "platform": "instagram"
          }
        ]
      },
      "scheduling": {
        "status": "scheduled",
        "scheduled_at": "2024-12-25T15:30:00Z",
        "published_at": "2024-12-25T15:30:00Z",
        "timezone": "America/New_York"
      },
      "created_at": "2024-01-15T10:30:00Z",
      "updated_at": "2024-01-15T10:30:00Z",
      "created_by": "John Doe"
    }
  ]
}

Note: The highlighted value in "id" is the unique post ID. You can use this ID to identify, update, or delete a specific post.


Create Post

Create and schedule a new post and add the first comment.

You can now choose from three publishing types: Draft, Schedule, or Queued.

Platform Allowed Post Types
Instagram feed, feed+reel, reel, carousel, story, feed+story, feed+reel+story, reel+story, carousel+story
Facebook feed, feed+reel, reel, story, feed+story, feed+reel+story, reel+story
YouTube video, shorts
TikTok video, carousel
Pinterest feed
Google My Business (GMB) feed
LinkedIn feed, carousel

Endpoint: POST /api/v1/workspaces/{workspace_id}/posts                     

cURL Example:

{
  "content": {
    "text": "Check out our latest product launch! ",
    "media": {
      "images": [
        "https://example.com/image1.jpg"
      ],
      "video": "https://example.com/video.mp4"
    }
  },
  "accounts": [
    "BjniecijWv",
    "350830594784444",
    "17841453340834745"
  ],
  "post_type": "reel+story",
"hide_client": true,
  "scheduling": {

 "publish_type": "draft",
    "scheduled_at": "2024-12-25 15:30:00"
  },
  "first_comment": {
    "message": "Great product! Check the details in comments.",
    "accounts": [
      "BjniecijWv",
      "350830594784444"
    ]
  }
}

Set Facebook Text Background

Apply a background to a Facebook text post by passing the background ID in your post creation request.

To retrieve the full list of available background IDs, use:

Endpoint: GET /api/v1/workspaces/{workspace_id}/facebook/text-backgrounds   

cURL Example:

curl -X POST "https://api.contentstudio.io/api/v1/workspaces/{workspace_id}/posts" \
-H "X-API-Key: 
-H "Content-Type: application/json" \
-d '{
"content": {
  "text": "Exciting news coming your way!"
},
"accounts": [
  "350830594784444"
],
"post_type": "feed",
"scheduling": {
  "publish_type": "scheduled",
  "scheduled_at": "2026-05-01 10:00:00"
},
"facebook_options": {
  "facebook_background_id": "191761991491375"
}}'

cURL Response:

{
"status": true,
"message": "Post created successfully.",
"data": {
"id": "61e006a89be9dd0cd07ec692",
"content": {
  "text": "Exciting news coming your way!"
},
"facebook_options": {
  "facebook_background_id": "191761991491375"
},
"scheduling": {
  "status": "scheduled",
  "scheduled_at": "2026-05-01T10:00:00Z"
}}
}

To apply a background, pass the background ID in your request using the following format:

"facebook_options": { 
   "facebook_background_id": "106018623298955" 
}

Here are the ID's of different Facebook backgrounds for text:

106018623298955
365653833956649
160419724814650
100114277230063
221828835275596
303063890126415
618093735238824
255989551804163
558836317844129
146487026137131
1903718606535395
191761991491375
248623902401250
172497526576609
228164237768720
122708641613922
2193627793985415
240401816771706
433967226963128
1777259169190672
1881421442117417
200521337465306
1868855943417360
197865920864520
1679248482160767
319468561816672
1821844087883360
1792915444087912
762009070855346
249307305544279
1774654829451664
1654916007940525

Delete Post

Delete a post by its unique ID. When a delete request is made, ContentStudio handles deletion on two levels:

  • Native Platform – The post is removed directly from the social platform (e.g., Facebook, Pinterest, YouTube) where it was published, provided the platform supports deletion via API.
  • ContentStudio – The post record is removed from your ContentStudio workspace.

Not all platforms support deletion via API. In cases where a platform does not support it, the post will remain live on the native platform but will still be removed from ContentStudio. See the Platform-Level Limitations section below for a full breakdown.

Endpoint: DELETE /api/v1/workspaces/{workspace_id}/posts/{post_id}                     

cURL Example:

cURL -X DELETE "https://api.contentstudio.io/api/v1/workspaces/{workspace_id}/posts/{post_id}" \
  -H "X-API-Key: <YOUR_API_KEY>"
Example Value
{
  "delete_from_social": true,
  "account_ids": [
    "350830594784444"
  ]
}
1
Platform-Level Limitations
Platform Deletion via API
Instagram ❌ Not supported
TikTok ❌ Not supported
Facebook ⚠️ Partial support (only Page posts)
Google Business Profile (GMB) ⚠️ Partial support (video posts not supported)
Pinterest ✅ Supported
YouTube ✅ Supported
Threads ✅ Supported
X (Twitter) ✅ Supported
Bluesky ✅ Supported
Tumblr ✅ Supported
💡 Notes:
  • Instagram and TikTok do not support post deletion via API at all.
  • Facebook does not support deletion for Stories, Profile posts, or Group posts.
  • GMB does not support deletion for Video posts.
  • All other listed platforms support deletion via API.
2
When account_id is NOT Provided
💡 All the following cases apply when only post_id is passed and no specific account is targeted.
Case 2.1: Delete Across All Associated Accounts
  • The system attempts deletion on all linked accounts.
  • Deletion occurs only where supported.
  • Unsupported platforms are skipped.
Case 2.2: Mixed Platform Support

Post is linked to multiple platforms (some supported, some not).

Outcome:

  • Deleted from supported platforms.
  • Not deleted from unsupported platforms.
  • Deleted from ContentStudio completely.
Case 2.3: All Platforms Support Deletion

Post is linked only to platforms that allow deletion.

Outcome:

  • Deleted from all native platforms and other associated platforms.
  • Deleted from ContentStudio completely.
Case 2.4: Failed / Partially Published Posts
  • Some accounts = failed / not published.
  • Some accounts = successfully published.

Outcome:

  • Deletion applies only to successfully published instances.
  • If all published instances are deletable: deleted from native platforms and removed completely from ContentStudio.
  • Deleted from ContentStudio completely.
3
When account_id IS Provided
💡 These cases apply when a specific account is targeted in the API request.
Case 3.1: Supported Platform

account_id belongs to a platform that supports deletion.

Outcome:

  • Post is deleted from the native platform.
  • Post is deleted from ContentStudio (for that account).
Case 3.2: Unsupported Platform

account_id belongs to a platform that does not support deletion via API.

Outcome:

  • Post remains on the native platform.
  • Post is deleted from ContentStudio.

Approve or reject a post

Approve or reject a single post that is under review with an optional comment.

Endpoint: POST /api/v1/workspaces/{workspace_id}/posts/{post_id}/approval                     

cURL Example:

curl http://api-prod.contentstudio.io/api/v1/workspaces/610a1e660cb41530ca40d372/posts/68872722d9c2a0366a00ae32/approval \
--request POST \
--header 'Content-Type: application/json' \
--header 'X-API-Key: YOUR_SECRET_TOKEN' \
--data '{
"action": "approve",
"comment": ""
}

Fetch post comments

Retrieve a paginated list of comments for a specific post

Endpoint: GET /api/v1/workspaces/{workspace_id}/posts/{post_id}/comments               

cURL Example:

curl http://api-prod.contentstudio.io/api/v1/workspaces/610a1e660cb41530ca40d372/posts/66a1f2e4c8b9a1234567890a/comments \
--header 'X-API-Key: YOUR_SECRET_TOKEN'

cURL Response:

{
"status": true,
"message": "Comments fetched successfully",
"current_page": 1,
"per_page": 20,
"total": 45,
"last_page": 3,
"from": 1,
"to": 20,
"data": [
{
  "_id": "66a1f2e4c8b9a1234567890a",
  "comment": "Great post!",
  "is_note": false,
  "mentioned_users": [
    {
      "_id": "627a078300a7d866600e7d02",
      "name": "John Doe"
    }
  ],
  "author": {
    "_id": "627a078300a7d866600e7d02",
    "name": "Jane Smith",
    "profile_picture": "https://example.com/avatar.jpg"
  },
  "created_at": "2026-01-15T10:30:00.000000Z",
  "updated_at": "2026-01-15T10:30:00.000000Z"
}
]
}

Add a comment to a post

Create a new comment or internal note on a post

Endpoint: POST /api/v1/workspaces/{workspace_id}/posts/{post_id}/comments               

cURL Example:

curl http://api-prod.contentstudio.io/api/v1/workspaces/610a1e660cb41530ca40d372/posts/66a1f2e4c8b9a1234567890a/comments \
--request POST \
--header 'Content-Type: application/json' \
--header 'X-API-Key: YOUR_SECRET_TOKEN' \
--data '{
"comment": "This looks great, ready to publish!",
"is_note": false,
"mentioned_users": [
"user456"
]
}'

cURL Response:

{
"status": true,
"message": "Comment created successfully",
"data": {
"_id": "66a1f2e4c8b9a1234567890a",
"comment": "Great post!",
"is_note": false,
"mentioned_users": [
  {
    "_id": "627a078300a7d866600e7d02",
    "name": "John Doe"
  }
],
"author": {
  "_id": "627a078300a7d866600e7d02",
  "name": "Jane Smith",
  "profile_picture": "https://example.com/avatar.jpg"
},
"created_at": "2026-01-15T10:30:00.000000Z",
"updated_at": "2026-01-15T10:30:00.000000Z"
}
}

Get workspace team members

Retrieve a paginated list of team members for a specific workspace. Useful for selecting approvers when creating posts with approval workflows.

Endpoint: GET /api/v1/workspaces/{workspace_id}/posts/{post_id}/comments               

cURL Example:

curl http://api-prod.contentstudio.io/api/v1/workspaces/610a1e660cb41530ca40d372/team-members \
--header 'X-API-Key: YOUR_SECRET_TOKEN'

cURL Response:

{
"status": true,
"message": "Team members retrieved successfully",
"current_page": 1,
"per_page": 10,
"total": 5,
"last_page": 1,
"from": 1,
"to": 5,
"data": [
{
  "_id": "627a078300a7d866600e7d02",
  "name": "John Doe",
  "email": "john@example.com",
  "profile_picture": "https://example.com/avatar.jpg",
  "role": "admin",
  "membership": "member"
}
]
}

Best Practices

  • Keep it safe: Never share your API key publicly.
  • Rotate if needed: You can revoke and regenerate keys anytime from settings.
  • Use only where needed: Paste the key only into trusted platforms or integrations.

How to View Your API Request Logs

1 Click on your profile picture in the top-right corner, and go to API Key. Then click on Request Log to open the API log page.

2 Use the Methods dropdown to filter your requests by GET, POST, PUT, PATCH, or DELETE.

3 Use the Statuses dropdown to filter requests by Success (2xx), Client Error (4xx), or Server Error (5xx).

4 Once filters are applied, click the Export CSV button to download your API request logs.


FAQs

Q1. Where can I use the ContentStudio API key?

You can use it to authenticate integrations with tools like Zapier, Make.com, or directly when making API requests.

Q2. Can I generate multiple API keys?

No, only one active API key is available per account at a time.

Q3. What happens if I regenerate my API key?

The old key will stop working immediately, and you’ll need to update the new key anywhere you were using it (Zapier, Make.com, custom apps, etc.).

Q4. What happens if I revoke my API key?

Revoking permanently disables the key. Any integrations using it will stop working until you generate a new one.

Q5. Is my API key private?

Yes. Treat it like a password — never share it publicly or expose it in client-side code.


Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us