Create Post
Create, schedule, or publish a new social media post.
Request
Use this endpoint to create a post. You can publish immediately, schedule for later, or save as a draft.
Permission required: posts:create
Body Parameters
contentstringRequiredThe text content of the post. Maximum 63,206 characters. Content is automatically sanitized — HTML tags are stripped.
accountIdsstring[]RequiredArray of social account UUIDs to publish to. Must belong to the authenticated user. Get these from the List Connections endpoint.
publishNowbooleanOptionalfalseIf true, publishes the post immediately to all specified accounts. Cannot be combined with isDraft or scheduledAt.
isDraftbooleanOptionalfalseIf true, saves the post as a draft. Cannot be combined with publishNow or scheduledAt.
scheduledAtstringRequiredISO 8601 datetime for when the post should be published. Must be at least 1 minute in the future. Cannot be combined with publishNow or isDraft.
mediaUrlsstring[]RequiredArray of public URLs for images or videos to include. Maximum 10 URLs. URLs are validated and sanitized.
platformCaptionsobjectRequiredPer-platform content overrides. Keys are lowercase platform names, values are caption strings.
Example: { "twitter": "Short tweet", "linkedin": "Longer professional post" }
tiktokSettingsobjectRequiredTikTok-specific publishing settings. Fields: privacyLevel (PUBLIC_TO_EVERYONE, PRIVATE, FRIENDS), disableDuet, disableComment, disableStitch, sendAsDraft, markAsAiGenerated.
youtubeTitlestringRequiredSeparate title for YouTube posts. Maximum 100 characters.
Validation Rules
isDraft,publishNow, andscheduledAtare mutually exclusive — only set one.scheduledAtmust be at least 1 minute in the future.- Content is validated against each target platform's character limit.
- All
accountIdsmust belong to the authenticated user.
Response
Returns the created post object wrapped in a data envelope. HTTP status 201 Created.
idstringThe unique UUID of the created post.
contentstringThe sanitized content of the post.
statusstringThe status: DRAFT, SCHEDULED, PUBLISHED, PROCESSING, FAILED, or PARTIALLY_PUBLISHED.
platformsstring[]List of target platforms (lowercase).
mediaUrlsstring[]Array of media URLs attached to the post.
scheduledAtstring | nullScheduled publication timestamp, or null.
publishedAtstring | nullActual publication timestamp, or null.
createdAtstringISO 8601 creation timestamp.
publishingobjectOnly present when publishNow: true. Contains per-platform publishing results with total, success, failed, and results array.
Examples
{
"content": "Just launched our new API! #devtools",
"accountIds": ["550e8400-e29b-41d4-a716-446655440000"],
"publishNow": true,
"mediaUrls": ["https://example.com/screenshot.png"]
}
{
"content": "Happy Monday! Start your week with eWasl",
"accountIds": ["550e8400-e29b-41d4-a716-446655440000"],
"scheduledAt": "2026-12-31T09:00:00Z"
}
{
"content": "Work in progress...",
"accountIds": ["550e8400-e29b-41d4-a716-446655440000"],
"isDraft": true
}
Response Example
{
"data": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"content": "Just launched our new API! #devtools",
"status": "PUBLISHED",
"platforms": ["twitter", "linkedin"],
"mediaUrls": ["https://example.com/screenshot.png"],
"scheduledAt": null,
"publishedAt": "2026-03-01T12:00:05Z",
"createdAt": "2026-03-01T12:00:00Z",
"publishing": {
"total": 2,
"success": 2,
"failed": 0,
"results": [
{ "platform": "TWITTER", "success": true, "url": "https://x.com/ewasl/status/123" },
{ "platform": "LINKEDIN", "success": true, "url": "https://linkedin.com/feed/update/456" }
]
}
}
}