Connect WordPress or a WordPress-Compatible Blog

Set up WordPress auto-publishing, or expose a WordPress-compatible API endpoint so VibeCom can publish blog posts to your own blog.

VibeCom publishes blog posts through the WordPress REST API shape. You can connect a normal WordPress site, or you can implement the same small API surface on your own blog and use it as a custom publishing endpoint.

Option A: Connect a WordPress Site

Use this if your blog runs on WordPress 5.6 or later.

1. Create an Application Password

In WordPress:

  1. Open Users β†’ Profile
  2. Scroll to Application Passwords
  3. Enter a name like VibeCom
  4. Click Add New Application Password
  5. Copy the generated password immediately

If the Application Passwords section is missing, check that your site uses HTTPS and is running WordPress 5.6+.

2. Create a Blog Channel

In VibeCom:

  1. Open Growth Autopilot
  2. Go to Channels
  3. Create a channel with platform Blog
  4. Open the Blog channel settings
  5. Click Connect WordPress

Enter:

FieldValue
WordPress Site URLYour blog root URL, for example https://myblog.com
UsernameYour WordPress username or login email
Application PasswordThe password generated in WordPress

VibeCom tests the connection by calling:

http
GET https://myblog.com/wp-json/wp/v2/users/meAuthorization: Basic base64(username:application_password)

If the response is successful, VibeCom stores the site URL and encrypted credentials for that Blog channel.

Option B: Build Your Own Blog Endpoint

Use this if your blog is not WordPress, but you want VibeCom to publish to it.

Your server only needs to expose two WordPress-compatible endpoints:

MethodPathPurpose
GET/wp-json/wp/v2/users/meValidate credentials when connecting the channel
POST/wp-json/wp/v2/postsReceive and publish an approved blog post

The base URL you enter in VibeCom must be public and reachable by VibeCom, for example:

text
https://blog.example.com

VibeCom will call:

text
https://blog.example.com/wp-json/wp/v2/users/mehttps://blog.example.com/wp-json/wp/v2/posts

Localhost, private network URLs, and .local / .internal hosts are blocked for production publishing.

Authentication

VibeCom uses HTTP Basic Auth, matching WordPress Application Passwords.

When you connect the Blog channel, VibeCom stores:

text
base64(username:application_password)

Every validation and publish request includes:

http
Authorization: Basic <base64(username:application_password)>

For a custom blog endpoint, treat the username as an account identifier and the application password as an API key. Return 401 if the credentials are invalid.

Validate Endpoint

Implement:

http
GET /wp-json/wp/v2/users/meAuthorization: Basic <credentials>

Successful response:

json
{  "id": 1,  "name": "Your Blog",  "slug": "your-blog"}

Optional avatar response:

json
{  "id": 1,  "name": "Your Blog",  "slug": "your-blog",  "avatar_urls": {    "48": "https://blog.example.com/avatar-48.png",    "96": "https://blog.example.com/avatar-96.png"  }}

VibeCom uses this endpoint only to confirm that the channel can publish.

Publish Endpoint

Implement:

http
POST /wp-json/wp/v2/postsAuthorization: Basic <credentials>Content-Type: application/json

Request body:

json
{  "title": "How we launched the new dashboard",  "content": "<p>HTML content generated from the approved VibeCom post.</p>",  "status": "publish",  "excerpt": "Short summary for previews and meta descriptions.",  "cover_image": "https://cdn.example.com/cover.png",  "tags": ["launch", "product-update", "founder-led-growth"]}

Fields:

FieldTypeRequiredNotes
titlestringNoDefaults to Untitled if missing
contentstringNoHTML body. VibeCom converts markdown to HTML before sending
statusstringNoVibeCom sends publish for approved posts
excerptstringNoMeta description or short summary
cover_imagestring URLNoVibeCom extension for a featured image URL
tagsstring[]NoVibeCom extension for tag names

Successful response:

json
{  "id": 123,  "link": "https://blog.example.com/blog/how-we-launched-the-new-dashboard",  "status": "publish",  "title": {    "rendered": "How we launched the new dashboard"  }}

VibeCom reads:

Response fieldUsed for
idExternal post ID saved on the VibeCom post
linkPublished URL shown in the VibeCom dashboard

Return 201 Created for a successful publish.

Example cURL Test

Replace the username, API key, and domain:

bash
curl -i https://blog.example.com/wp-json/wp/v2/users/me \  -u "vibecom:YOUR_BLOG_API_KEY"

Publish a test post:

bash
curl -i https://blog.example.com/wp-json/wp/v2/posts \  -u "vibecom:YOUR_BLOG_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "title": "VibeCom test post",    "content": "<p>This is a test post from VibeCom.</p>",    "status": "publish",    "excerpt": "Testing VibeCom blog publishing.",    "tags": ["vibecom", "test"]  }'

Minimal Next.js Route Example

This mirrors the API shape VibeCom expects:

ts
import { NextResponse } from "next/server";
const BLOG_API_KEY = process.env.BLOG_API_KEY;
function isAuthorized(request: Request) {  const auth = request.headers.get("authorization");  if (!auth?.startsWith("Basic ")) return false;
  const decoded = Buffer.from(auth.slice(6), "base64").toString("utf8");  const [, password] = decoded.split(":");  return Boolean(BLOG_API_KEY && password === BLOG_API_KEY);}
export async function GET(request: Request) {  if (!isAuthorized(request)) {    return NextResponse.json(      { code: "invalid_credentials", message: "Invalid credentials" },      { status: 401 },    );  }
  return NextResponse.json({    id: 1,    name: "My Blog",    slug: "my-blog",  });}

For POST /wp-json/wp/v2/posts, save title, content, excerpt, cover_image, and tags into your blog database, then return the published URL in link.

Error Responses

Use WordPress-style JSON errors where possible:

json
{  "code": "invalid_credentials",  "message": "Invalid credentials"}

Recommended status codes:

StatusWhen to return
400Request body is invalid
401Missing or invalid Basic Auth
403Credentials are valid but cannot publish
404Endpoint path does not exist
500Unexpected server error

VibeCom displays non-2xx responses in the publish error message, so keep the response body short and actionable.

Troubleshooting

ProblemFix
Connection test returns 401Check username and application password / API key
Connection test returns 404Make sure /wp-json/wp/v2/users/me exists under the exact site URL
Publish returns 400Verify your endpoint accepts title, content, status, excerpt, cover_image, and tags
Publish succeeds but no URL appearsMake sure the response includes link
VibeCom rejects the site URLUse a public https:// URL, not localhost or a private network host

Security Notes

  • Use HTTPS.
  • Store the application password or API key hashed if you control the receiving blog.
  • Create a dedicated publishing user or API key for VibeCom.
  • Revoke the key from your blog if you disconnect the channel.
  • Do not expose this endpoint without authentication.

Next Steps

  • β€” Understand Blog channels
  • β€” How approved posts are published
  • β€” Generate your first blog post
Connect WordPress or a WordPress-Compatible Blog | VibeCom Docs