All playbooks
Playbook 6 of 6

Pre-fill your social calendar

Messy schedules and publishes to Facebook, Instagram and LinkedIn per region. Your AI generates the copy and the imagery, one endpoint loads a whole month, and you curate the winners in the calendar before anything goes live.

30 min You ship: Thirty days of scheduled, reviewable social content per region.
1

Set up a region

A social region bundles the connected pages, timezone, default posting hour, hashtags and target countries for one audience. Create it once in the dashboard: connect your Facebook, Instagram or LinkedIn integration under Channels, then add a region under Socials.

Region setup is a dashboard task, not an API one. Everything after it is scriptable with your environment API key.
2

Generate a month of content

The agent grounds itself in your product before writing anything, plans the month as structured JSON, then renders imagery for every post with whatever image tool it has available.

01 · plan and generate
Plan one month of social content for my product. First read this codebase, the website copy and any recent changelog to ground yourself in what the product does and how it speaks.

Produce a content calendar as JSON: an array of about 30 entries, one per day, each:
{"date": "YYYY-MM-DD", "theme": "...", "alternatives": [{"headline": "...", "body": "...", "cta_label": "...", "cta_url": "https://...", "image_brief": "..."}]}

Rules:
- Mix content types across the month: product feature spotlights, how-to tips, customer scenario stories, behind-the-scenes, and at most one direct promotion per week.
- body is the caption: the first line hooks, then 2 to 4 short lines, line breaks allowed, 3 to 5 relevant hashtags at the end. No emoji spam, no "unlock" or "supercharge" language.
- Give each day 2 or 3 alternatives with genuinely different angles, not rephrasings; we pick the winner in the calendar UI later.
- image_brief describes one strong visual in our brand style (reference the colors and assets in this repo), specific enough for an image model: subject, composition, mood, and any text overlay, keeping overlay text under 6 words.

Then generate the images from each image_brief with the image tool available to you: 1080x1350 for feed, and 1080x1920 for reels where the brief suits a vertical format. Output the final calendar JSON with a feed_image path or URL added to every alternative, plus reel_image where generated.
3

Provision the calendar

One endpoint per day loads everything: copy, CTA and media. Messy downloads the media server-side, so the files just need to be publicly reachable. Then open the calendar, compare alternatives and mark days ready.

02 · provision into Messy
Take the content calendar JSON (with media) from the previous step and load it into Messy.

For each day, POST <MESSY_API_URL>/socials/provision with the Bearer MESSY_API_KEY header:
{"region": "<region name or id>", "date": "YYYY-MM-DD", "replace": false, "alternatives": [{"headline": "...", "body": "...", "cta_label": "...", "cta_url": "...", "feed_media_url": "https://...", "reel_media_url": "https://...", "carousel_media_urls": ["https://..."]}]}

- Media must be publicly fetchable HTTPS URLs; Messy downloads and stores them server-side. If the generated images are local files, upload them somewhere public first (our CDN or a bucket) and use those URLs.
- "replace": true swaps out previously provisioned generated alternatives for that day while keeping manually uploaded ones. Use it when re-running a day.
- Write this as a small idempotent script in the same task-runner style as messy:sync: read the JSON, post day by day, print each day's created alternative ids.
- Stop and show me the first day's response before running the remaining days.

Afterwards I will review the month in the Messy social calendar, pick an alternative per day and mark days ready to publish.
PreviousSync your audience
That was the last one. Your app runs on Messy now.Open the dashboard