# Create or schedule a post with the PostEverywhere API **Source:** https://posteverywhere.ai/docs/api/create-post --- [🤖Connect ChatGPT, Claude or any AI agent to manage your social media end to endConnect your AI agent to manage your social media](https://posteverywhere.ai/agents)POST/posts # Create or schedule a post with the PostEverywhere API Omit `scheduled_for` to publish immediately; provide it (ISO 8601, assumed UTC when no offset given) to schedule. Set `draft: true` to save a native draft instead (no destinations are created and nothing publishes until `POST /posts/{id}/schedule`). Attach media by id (see [media requirements per platform](/media-requirements)), and use `platform_content` for per-platform overrides — the [Platform Guides](/platforms/instagram) document every option. Field-name handling: camelCase aliases (`accountIds`, `mediaIds`, `scheduledFor`, `platformContent`) and the deprecated `scheduled_at` alias are accepted. Fields whose names imply a different shape (`media`, `media_id`, `mediaId`, `attachments`) are rejected with `400 invalid_field_name`. Content rules: `content` may be omitted only when `platform_content` provides at least one per-platform caption or media is attached. Max 10,000 characters. Max 50 `account_ids`. Instagram captions with more than 30 hashtags are rejected (`instagram_hashtag_limit_exceeded`). Media referenced by `media_ids` must exist in the workspace and be `ready` (`media_not_found` / `media_not_ready` otherwise; media stuck in `uploading` is auto-finalized via the `/complete` flow when the file was actually uploaded). Platform media requirements are validated pre-flight (`platform_requirement_violation`, e.g. video to Pinterest). A circuit breaker refuses a request body that has already failed 5+ times in 6 hours for the same key with `422 permanent_failure_circuit_breaker` — change any field to reset. Error codes: `invalid_json`, `wrong_content_type_for_endpoint`, `invalid_field_name`, `validation_error`, `content_too_long`, `account_ids_required`, `too_many_accounts`, `invalid_timezone`, `invalid_accounts`, `instagram_hashtag_limit_exceeded`, `invalid_datetime`, `past_schedule_time`, `media_not_found`, `media_not_ready`, `platform_requirement_violation`, `post_creation_failed`, `rate_limit_exceeded`, `permanent_failure_circuit_breaker`. Guides: [Quick start: create your first post](https://posteverywhere.ai/docs/quick-start) · [Bulk operations guide](https://posteverywhere.ai/docs/bulk-operations) Copy MarkdownCopy for LLMThis endpoint accepts a JSON request body. See the [posts guide](https://posteverywhere.ai/docs/quick-start) for a worked example. ## Responses - 201Post created. Regular creates return the full publishing topology (`destinations`); `draft: true` returns the smaller draft shape with `next_steps`. - 400 - 401 - 402 - 403 - 422Circuit breaker open for this exact request body - 429 - 500 ## More in Posts - [List posts](https://posteverywhere.ai/docs/api/list-posts) - [Get a post](https://posteverywhere.ai/docs/api/get-post) - [Update a post](https://posteverywhere.ai/docs/api/update-post) - [Delete a post](https://posteverywhere.ai/docs/api/delete-post) - [Publish results](https://posteverywhere.ai/docs/api/get-post-results) - [Retry a post](https://posteverywhere.ai/docs/api/retry-post) - [Schedule or publish](https://posteverywhere.ai/docs/api/schedule-post) - [Bulk create posts](https://posteverywhere.ai/docs/api/bulk-create-posts) - [Bulk retry](https://posteverywhere.ai/docs/api/retry-failed-posts) - [Get the queue](https://posteverywhere.ai/docs/api/get-queue) - [Approve a post](https://posteverywhere.ai/docs/api/approve-post) - [Request changes](https://posteverywhere.ai/docs/api/request-post-changes) [← List posts](https://posteverywhere.ai/docs/api/list-posts)[Get a post →](https://posteverywhere.ai/docs/api/get-post)[← All endpoints](https://posteverywhere.ai/docs/api/reference)