Social media content calendar generator API
Pick your networks, how often you post on each and at what time, add a few content themes, and get a ready week-by-week content calendar. Download it as a CSV for your spreadsheet or as a calendar file for Google Calendar, Outlook or Apple Calendar. No signup and no email.
- Endpoint:
POST https://postboost.co/app/api/tools/social-media-content-calendar-generator(operationIdplanContentCalendar) - Web tool: postboost.co/tools/social-media-content-calendar-generator
- Token: optional (limits)
- MCP: tool
plan-content-calendaronhttps://postboost.co/mcp/tools
Request
| Field | Type | Default | Description |
|---|---|---|---|
start_date | string | First day of the calendar (YYYY-MM-DD). Each week starts on this weekday. | |
weeks | integer | 4 | |
posts_per_week | object | Posts per week for each network you plan for (0 or missing = none). | |
times | object | Posting time per network (HH:MM, local time). A second post on the same day (over 7 a week) goes 3 hours later, or 3 hours earlier if later passes midnight. | |
pillars | array of string | Content themes, rotated over the posts in date order. |
Call it
- curl
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
- C#
- Rust
- CLI
curl -X POST https://postboost.co/app/api/tools/social-media-content-calendar-generator \
-H 'Content-Type: application/json' \
-d '{"start_date":"2026-11-02","weeks":1,"posts_per_week":{"instagram":3,"linkedin":2},"times":{"linkedin":"08:30"},"pillars":["Tips","Product"]}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolPlanContentCalendarRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.plan_content_calendar(FreeToolPlanContentCalendarRequest.from_dict({"start_date": "2026-11-02", "weeks": 1, "posts_per_week": {"instagram": 3, "linkedin": 2}, "times": {"linkedin": "08:30"}, "pillars": ["Tips", "Product"]}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.planContentCalendar({ startDate: "2026-11-02", weeks: 1, postsPerWeek: { instagram: 3, linkedin: 2 }, times: { linkedin: "08:30" }, pillars: ["Tips", "Product"] });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolPlanContentCalendarRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->planContentCalendar(new FreeToolPlanContentCalendarRequest(['start_date' => "2026-11-02", 'weeks' => 1, 'posts_per_week' => ['instagram' => 3, 'linkedin' => 2], 'times' => ['linkedin' => "08:30"], 'pillars' => ["Tips", "Product"]]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolPlanContentCalendarRequest
if err := json.Unmarshal([]byte(`{"start_date":"2026-11-02","weeks":1,"posts_per_week":{"instagram":3,"linkedin":2},"times":{"linkedin":"08:30"},"pillars":["Tips","Product"]}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.PlanContentCalendar(context.Background()).FreeToolPlanContentCalendarRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.plan_content_calendar(PostBoost::FreeToolPlanContentCalendarRequest.new({ start_date: "2026-11-02", weeks: 1, posts_per_week: { instagram: 3, linkedin: 2 }, times: { linkedin: "08:30" }, pillars: ["Tips", "Product"] }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolPlanContentCalendarRequest;
import com.postboost.model.FreeToolPlanContentCalendarResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolPlanContentCalendarRequest request = FreeToolPlanContentCalendarRequest.fromJson("{\"start_date\":\"2026-11-02\",\"weeks\":1,\"posts_per_week\":{\"instagram\":3,\"linkedin\":2},\"times\":{\"linkedin\":\"08:30\"},\"pillars\":[\"Tips\",\"Product\"]}");
FreeToolPlanContentCalendarResponse result = api.planContentCalendar(request);
System.out.println(result.toJson());
using Newtonsoft.Json;
using PostBoost.Client.Api;
using PostBoost.Client.Client;
using PostBoost.Client.Model;
var api = new FreeToolsApi(new Configuration());
var request = JsonConvert.DeserializeObject<FreeToolPlanContentCalendarRequest>(@"{""start_date"":""2026-11-02"",""weeks"":1,""posts_per_week"":{""instagram"":3,""linkedin"":2},""times"":{""linkedin"":""08:30""},""pillars"":[""Tips"",""Product""]}");
var result = await api.PlanContentCalendarAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolPlanContentCalendarRequest;
let config = Configuration::new();
let request: FreeToolPlanContentCalendarRequest = serde_json::from_str(r##"{"start_date":"2026-11-02","weeks":1,"posts_per_week":{"instagram":3,"linkedin":2},"times":{"linkedin":"08:30"},"pillars":["Tips","Product"]}"##)?;
let result = free_tools_api::plan_content_calendar(&config, request).await?;
println!("{:?}", result);
echo '{"start_date":"2026-11-02","weeks":1,"posts_per_week":{"instagram":3,"linkedin":2},"times":{"linkedin":"08:30"},"pillars":["Tips","Product"]}' | ./postboost-cli --content-type application/json planContentCalendar -
With a token, send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"end_date": "2026-11-08",
"total": 5,
"slots": [
{
"date": "2026-11-02",
"weekday": "Monday",
"time": "08:30",
"network": "linkedin",
"network_label": "LinkedIn",
"pillar": "Tips"
},
{
"date": "2026-11-02",
"weekday": "Monday",
"time": "10:00",
"network": "instagram",
"network_label": "Instagram",
"pillar": "Product"
},
{
"date": "2026-11-04",
"weekday": "Wednesday",
"time": "10:00",
"network": "instagram",
"network_label": "Instagram",
"pillar": "Tips"
},
{
"date": "2026-11-05",
"weekday": "Thursday",
"time": "08:30",
"network": "linkedin",
"network_label": "LinkedIn",
"pillar": "Product"
},
{
"date": "2026-11-06",
"weekday": "Friday",
"time": "10:00",
"network": "instagram",
"network_label": "Instagram",
"pillar": "Tips"
}
],
"csv": "Date,Day,Time,Network,Pillar,Idea\r\n2026-11-02,Monday,08:30,LinkedIn,Tips,\r\n2026-11-02,Monday,10:00,Instagram,Product,\r\n2026-11-04,Wednesday,10:00,Instagram,Tips,\r\n2026-11-05,Thursday,08:30,LinkedIn,Product,\r\n2026-11-06,Friday,10:00,Instagram,Tips,\r\n",
"ics": "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//PostBoost//Free tools//EN\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nX-WR-CALNAME:Social media content calendar\r\nBEGIN:VEVENT\r\nUID:[email protected]\r\nDTSTAMP:20261102T000000Z\r\nDTSTART:20261102T083000\r\nDTEND:20261102T084500\r\nSUMMARY:LinkedIn: Tips\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nUID:[email protected]\r\nDTSTAMP:20261102T000000Z\r\nDTSTART:20261102T100000\r\nDTEND:20261102T101500\r\nSUMMARY:Instagram: Product\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nUID:[email protected]\r\nDTSTAMP:20261102T000000Z\r\nDTSTART:20261104T100000\r\nDTEND:20261104T101500\r\nSUMMARY:Instagram: Tips\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nUID:[email protected]\r\nDTSTAMP:20261102T000000Z\r\nDTSTART:20261105T083000\r\nDTEND:20261105T084500\r\nSUMMARY:LinkedIn: Product\r\nEND:VEVENT\r\nBEGIN:VEVENT\r\nUID:[email protected]\r\nDTSTAMP:20261102T000000Z\r\nDTSTART:20261106T100000\r\nDTEND:20261106T101500\r\nSUMMARY:Instagram: Tips\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n"
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Plan a social media content calendar and get it as CSV and ICS with the PostBoost plan-content-calendar tool.
Errors
| Status | When |
|---|---|
401 | The Authorization header holds an invalid token. Leave it out to call as a guest. |
413 | The JSON body is larger than 128 KB. |
422 | A field is invalid; the body lists the errors per field. |
429 | A limit is reached; see limits. |