Endpoint

Create draft

Create a text-only draft post. The draft is saved but not queued for publishing. To schedule or publish it, add a publish_at field or call the schedule/publish endpoints later.

Create a draft

POST /api/v1/posts creates a new post in the workspace. Without social_account_ids or publish_at, the post is saved as a draft.

curl -X POST "$SOCIALSPOOL_BASE_URL/api/v1/posts" \
  -H "Authorization: Bearer $SOCIALSPOOL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content":"Hello from the SocialSpool API"}'

Successful response shape:

{
  "post": {
    "id": "post_01HZ...",
    "content": "Hello from the SocialSpool API",
    "status": "draft",
    "created_at": "2026-06-01T12:00:00Z",
    "updated_at": "2026-06-01T12:00:00Z"
  }
}
Creating a draft with targets

You can optionally specify social_account_ids at creation time. The post remains a draft; the targets are recorded but nothing is queued until a publish_at is provided.

curl -X POST "$SOCIALSPOOL_BASE_URL/api/v1/posts" \
  -H "Authorization: Bearer $SOCIALSPOOL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Draft with targets attached",
    "social_account_ids": ["acct_01HZ..."]
  }'
Request body fields
  • content (string, required): the post body. Maximum 5000 characters.
  • social_account_ids (string[], optional): account ids to target. Retrieved from GET /api/v1/social-accounts.