Social posts
The same announcement doesn't belong on every platform in the same shape — a caption that works next to a photo reads as padding under a link, and a line built for a fast-scrolling feed falls flat as a standalone post. This endpoint takes one idea and writes it the way each destination actually expects it.
Run it online
Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.
One idea, several very different containers
A product update, a hiring announcement, an event reminder — the underlying fact is one sentence, but the post built around it needs a different shape depending on where it lands: a short, punchy line with room for a photo in one place, a fuller paragraph with context in another. Writing all of those by hand for every announcement is where social calendars quietly stall, especially for teams without a dedicated social copywriter. text.social_post exists to write the shape each platform actually rewards, from a single input.
From one idea to platform-ready copy
POST /text/social-post with the core idea and your target platform, get a task_id right away, and the drafted post arrives by signed webhook or a signed link valid for 24 hours once the async task completes. Output respects the norms of the platform requested — length, tone, structure — rather than producing one generic paragraph and letting you trim it down by hand.
Platform norms didn't happen by accident
Each social format evolved around real constraints and real reading habits: character limits shaped brevity, image-first feeds rewarded a caption that complements rather than repeats the visual, and professional networks favored a more explanatory register than a consumer feed does. Those aren't arbitrary style choices — they're what each audience has been trained by years of habit to expect, and copy that ignores them reads as slightly off even when the message itself is solid.
Fitting into a real posting calendar
Marketing teams typically batch a week's announcements through this endpoint at once, generating platform-specific drafts for each and reviewing before scheduling, rather than writing every post live the day it's meant to go out. A single founder running their own account uses it the same way at smaller scale, to keep a consistent posting rhythm without a dedicated writer, feeding in a milestone the moment it happens instead of saving it for a weekend writing session. Priced per request plus per post, cost scales with how much you actually publish, and a failed task is never charged.
What you can do with it
Weekly content batching for a small marketing team
A team drafts a week's worth of posts across platforms in one sitting, then reviews and schedules instead of writing live each morning.
Announcing the same update everywhere it needs to land
A product launch gets a distinct, platform-appropriate post for each channel instead of one paragraph copied everywhere.
Solo founders keeping a consistent posting rhythm
A founder without a social hire drafts posts around product milestones so the account doesn't go quiet between launches.
Event and campaign reminders across channels
An events team generates reminder posts fit for each platform as a deadline or event date approaches.
FAQ
How do I generate a social media post with the API?
POST your core idea and target platform to /text/social-post, keep the task_id, and collect the drafted post by webhook or a signed link valid for 24 hours.
Is the social media post generator API free?
No, there's no free tier or trial; it costs $0.003 per request plus $0.0135 per post, and a failed task is never charged.
Which platforms does it write for?
The major social and professional networks; specify the target platform in the request and check the endpoint reference for the current list.
Can it generate the same idea for multiple platforms at once?
Each request targets one platform, so covering several means submitting one request per platform, which keeps each draft correctly shaped rather than generic.
Does it include hashtags automatically?
This endpoint focuses on the post copy itself; pair it with the dedicated hashtag generator endpoint for tag suggestions.
Can I generate posts in bulk for a content calendar?
Yes, each idea is its own async request, so a month's calendar is simply a batch of requests submitted together.
Is this endpoint live yet?
Yes, it's live and accepting requests now.
Is my input data kept after the post is generated?
No, submitted ideas and generated posts are deleted after the retention window and are never used for training.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/text/social-post \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/text/social-post", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/social-post",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/social-post", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/social-post", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"input": "…"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.social_post",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_tokens | 20000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
422 | task_failed | The task failed after 3 retries. You are never charged for it. |