Works with all AI agents

Connect your AI agent

Choose your assistant and connect in seconds.

Add to Claude

Works on every Claude plan, including free. Full Claude guide

  1. 1

    Add to Claude

    One click from Claude’s connector directory.

  2. 2

    Sign up or sign in

    Takes seconds, then you’re sent straight back.

  3. 3

    Ask Claude

    “Plan and schedule my posts for next week.”

PostEverywhere WordPress API Guide

PostEverywhere API reference for WordPress: request fields for posts, drafts, images, categories and tags on WordPress.com or self-hosted sites.

Publish blog posts to WordPress, on WordPress.com or a self-hosted site, through the same POST /v1/posts request you use for every other platform. PostEverywhere converts your formatting to HTML, uploads your images to the site's Media Library, sets the featured image, categories and tags, and publishes at the time you schedule. For a general overview of all supported platforms, see the Introduction.

Connect your WordPress site to PostEverywhere

WordPress is one platform in PostEverywhere, whichever way your site is hosted.

  • Self-hosted WordPress (the WordPress.org software on your own hosting): in the dashboard, open the Accounts page and click Add Account on the WordPress row, enter your site address, and approve PostEverywhere on WordPress's own Authorize Application screen in wp-admin. There is no plugin and nothing to copy. If that screen is unavailable, a fallback form takes your site address, username and an application password (wp-admin → Users → Profile → Application Passwords).
  • WordPress.com: choose Log in with WordPress.com and pick the site to connect.

Requirements for self-hosted sites:

Requirement Detail
WordPress version 5.6 or later (application passwords are built into core from 5.6)
HTTPS Required. WordPress only allows application passwords over HTTPS
REST API Must be reachable. Some security plugins block the REST API or application passwords
Authorization header Must reach WordPress. Some hosts (certain Apache CGI setups) strip it
User role Administrator, Editor or Author. Creating new categories needs Editor or Administrator

Connect a site from the API or an AI agent

Self-hosted sites can be connected without a browser. The credentials are checked live before saving:

curl -X POST https://app.posteverywhere.ai/api/v1/accounts/connect-credential \
  -H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "wordpress",
    "site_url": "https://example.com",
    "username": "editor",
    "app_password": "abcd efgh ijkl mnop qrst uvwx"
  }'

WordPress's own application passwords guide explains where to create one. A normal login password is refused with WP_NOT_APP_PASSWORD, and the check confirms the user can publish posts and upload media. Re-submitting credentials for a connected site updates it in place. The MCP tool connect_credential_account takes the same fields. POST /v1/accounts/connect-link does not cover WordPress: it returns 400 credential_platform and points to connect-credential. WordPress.com sites connect in the dashboard only.

What you can publish to WordPress

PostEverywhere publishes posts. Pages and custom post types are not supported.

Field Where it goes Notes
Title settings.title Up to 200 characters. Falls back to a leading # Heading line, then the first line of the body (cut to 80 characters)
Body platform_content.wordpress.content or top-level content Up to 200,000 characters. Formatting below is converted to HTML. Raw HTML is passed through
Status settings.status publish, draft, pending (for review) or private
Excerpt settings.excerpt Up to 1,000 characters
URL slug settings.slug Up to 190 characters
Tags settings.tags Array or comma-separated string of names. Missing tags are created
Categories settings.categories Names or IDs. New categories need an Editor or Administrator
Featured image settings.featuredImage "first" (default) uses the first attached image; "none" sets no featured image

Timing is handled by PostEverywhere: the post is published at scheduled_for. It is not sent to WordPress as a future-dated post.

Formatting

You write WordPress gets
# Heading / ## Subheading H2 / H3
**bold**, *italic*, [link](https://…) Bold, italic, link
- item / 1. item Bulleted / numbered list
> quote Blockquote
--- on its own line Divider
Fenced code block Code block
| a | b | rows Table
![Caption](image:2) Attached image 2, placed inline with its caption

Images that are not placed inline are added at the end of the post. When the body is raw HTML, WordPress applies its own filtering for users without the unfiltered_html capability (for example non-Administrators, or site admins on a multisite network).

WordPress limits: media and requirements

Requirement Limit
Images per post Up to 20 (inline or appended)
Image formats JPEG, PNG, GIF, WebP (HEIC and AVIF are converted to JPEG)
Image size Up to 50 MB each
Video 1 video, placed at the top of the post. MP4, MOV or WebM
Video size Up to 4 GB on our side; your site's own upload limit is the real cap
Media storage Uploaded to the site's WordPress Media Library
Post type Posts only (no pages or custom post types)

WordPress.com's free and Personal plans do not accept video uploads, which is a WordPress.com plan limit.

Publish to WordPress: a working request

Upload your images first (see Upload Media), then attach the returned IDs. The first image becomes the featured image:

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
  -H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "account_ids": [4821],
    "media_ids": [
      "11111111-1111-1111-1111-111111111111",
      "22222222-2222-2222-2222-222222222222"
    ],
    "platform_content": {
      "wordpress": {
        "content": "Intro paragraph.\n\n## What changed\n\n- Faster uploads\n- Scheduled drafts\n\n![The new composer](image:2)\n\nRead the [changelog](https://example.com/changelog).",
        "settings": {
          "title": "What we shipped in September",
          "status": "draft",
          "excerpt": "Faster uploads and scheduled drafts.",
          "slug": "september-release",
          "categories": ["Product"],
          "tags": ["release-notes", "product"]
        }
      }
    }
  }'

Schedule the post and its social announcement together

One request can publish the article to WordPress and a short announcement to LinkedIn and X at the same time. Top-level content is the social copy; the WordPress override carries the article:

curl -X POST https://app.posteverywhere.ai/api/v1/posts \
  -H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "New on the blog: what we shipped in September. https://example.com/september-release",
    "account_ids": [4821, 1204, 6105],
    "scheduled_for": "2026-10-06T09:00:00Z",
    "timezone": "Europe/London",
    "platform_content": {
      "wordpress": {
        "content": "# What we shipped in September\n\nIntro paragraph...",
        "settings": { "status": "publish", "slug": "september-release", "tags": ["release-notes"] }
      }
    }
  }'

Once published, the post's WordPress permalink is returned as platform_post_url by GET /v1/posts/{id}/results and GET /v1/posts. It is not in the create response. Drafts, pending and private posts return WordPress's preview-style link (typically ?p=ID) rather than a public permalink.

WordPress errors

Error When
400 wordpress_post_invalid The WordPress settings in platform_content.wordpress failed validation. details.errors[] lists every problem
400 wordpress_title_required There is no settings.title and the body is empty, so no title can be derived. A body with any text never triggers it
WP_NOT_APP_PASSWORD A connect request used a normal login password instead of an application password

See Errors for the error envelope and retry guidance.

Troubleshooting a WordPress connection

Connection errors come back with a code and a plain-language message, so a person or an agent can fix the cause and retry.

Code What it means Fix
WP_INVALID_URL The site address is not valid, or is not HTTPS Enter the full https:// address, including any folder such as https://example.com/blog
WP_NOT_WORDPRESS WordPress was not found at that address Check the address, including any /blog folder, and that it opens your WordPress site
WP_UNREACHABLE The site could not be reached Check the address and that the site is online
WP_SITE_MOVED The site redirects to a different address Connect it with its current address
WP_REST_DISABLED The site blocks the WordPress REST API A security plugin (for example Wordfence, iThemes or Disable REST API) may have turned it off. Allow the REST API for logged-in users
WP_NOT_APP_PASSWORD A normal login password was used Create an application password under Users → Profile → Application Passwords
WP_AUTH_FAILED WordPress rejected the username and application password Check the username, create a new application password, and allow application passwords in any security plugin
WP_APP_PASSWORDS_DISABLED Application passwords are turned off on the site Turn them back on in the security plugin or with your host. Sites behind HTTP basic auth password protection also turn them off
WP_NO_PUBLISH_PERMISSION The user cannot publish posts Use an Administrator, Editor or Author account
WP_NO_UPLOAD_PERMISSION The user cannot upload images Use an Administrator, Editor or Author account
WP_BLOCKED The site or its firewall refused the connection Allow PostEverywhere in your security plugin

GET /v1/accounts/{id} returns a connected site's wordpress_site (url, name and kind), never its credentials. GET /v1/platform-rules includes a wordpress entry with the blog field limits.

Reconnecting, captions and the CLI

  • Reconnect: in the dashboard, Reconnect on the WordPress row opens the same connect window. Through the API, POST /v1/accounts/{id}/reconnect returns 400 credential_platform for WordPress; re-submit connect-credential instead, which updates the connected site in place. A revoked application password is flagged for reconnection like any other platform, and the failed-post email gives WordPress's reason.
  • Where to connect: WordPress is connected from the Accounts page; it is not in the first-connect grid during onboarding.
  • Captions: POST /v1/ai/generate-caption and the MCP generate_caption tool accept wordpress, with a 5,000-character limit and no hashtags.
  • CLI: posteverywhere connect wordpress and posteverywhere post --title … --body-file … from @posteverywhere/cli 0.5.0. See the CLI guide.
  • Local MCP: the npm package @posteverywhere/mcp supports WordPress from 1.9.0; the hosted MCP server already does.

What the WordPress integration does not do yet

  • Pages and custom post types
  • SEO plugin fields (for example Yoast or Rank Math) and the post author
  • Galleries and post formats
  • Editing or deleting a post on WordPress after it is published
  • Analytics: WordPress core has no stats API
  • The iPhone app: WordPress is available in the web app, the API and the hosted MCP server

Common questions about posting to WordPress

Is there a blog post mode in the composer?

Yes. When a WordPress site is connected, the composer shows a Blog post tab with the title, status, categories, tags, excerpt, URL slug and featured image fields, and a blog-style preview. Selecting only WordPress sites switches the composer to Blog post mode automatically, and Publish waits until uploads finish. Blog post mode takes WordPress sites only, so schedule the social posts that promote an article as separate posts on the same calendar, or send them in one API request with mixed account_ids.

Do I need a WordPress plugin?

No. PostEverywhere uses the REST API and application passwords that are built into WordPress 5.6 and later.

Does it work with WordPress.com?

Yes. Connect with Log in with WordPress.com in the dashboard and choose the site.

Can I schedule a WordPress post?

Yes. Set scheduled_for and PostEverywhere publishes the post at that time. Use status: "draft" or "pending" if someone should review it in WordPress first.

Can an AI assistant publish to my WordPress site?

Yes. The hosted MCP server's create_post, schedule_post, update_post and bulk_create_posts tools accept wordpress settings, and connect_credential_account can connect a self-hosted site. The WordPress MCP guide walks through connecting Claude or ChatGPT.

Can I edit a WordPress post after it is published?

Not from PostEverywhere. PATCH /v1/posts/:id only accepts posts in scheduled or draft status in PostEverywhere; once a post is on your site, edit it in WordPress.

Other platforms you can publish to

  • LinkedIn: share each new article with your professional network
  • X (Twitter): announce posts, or publish long-form as an X Article
  • Facebook: share posts to a Page

Related: the WordPress integration · the WordPress MCP guide · the PostEverywhere social media API · the Bluesky guide