Skip to main content

WordPress Chat REST API: Developer Reference for Better Messages

· 6 min read
Creator of Better Messages

WordPress sites that want to do anything custom on top of their messenger — a third-party mobile app, a Slack-style bridge, a webhook integration, a custom moderation flow, a chat-to-email gateway — need a clean API. Better Messages exposes a full REST API at /wp-json/better-messages/v1/. Every operation the React front-end performs is a documented REST call, with WordPress nonce auth for logged-in users and per-request token auth for guests.

Why a REST API matters#

The plugin's React front-end is a thin client of the REST API. Anything you can do via the messenger UI you can do via the API:

  • Create a new conversation
  • Send a message (text, attachments, GIFs, stickers)
  • Add or remove participants
  • Mark threads as read / unread / muted
  • Search messages
  • Manage chat rooms and AI bots
  • Initiate voice / video calls
  • Handle guest registration and authentication

This makes Better Messages a headless messaging backend for any front-end you want to build — native iOS / Android apps, custom Vue / React layouts, Slack-style bridges, n8n / Zapier-style automation. The Capacitor mobile app shipped with Better Messages is itself a REST client against this same API.

Base URL and authentication#

Base URL: /wp-json/better-messages/v1/

Auth modes:

  • Logged-in WordPress users — standard WordPress REST auth. Send the WP REST nonce as the X-WP-Nonce header.
  • Guest users — guest registration returns an id (positive integer) and secret (30-char token). Send subsequent requests with two headers:
    • BM-Guest-ID: the positive ID
    • BM-Guest-Secret: the secret token
  • Application Passwords / Tokens — for headless front-ends, use WordPress's built-in Application Passwords or a JWT auth plugin. Better Messages respects whichever WP auth the request carries.

For a fully detailed reference of every endpoint with request / response shapes, see the dedicated REST API Reference in the docs.

Endpoint groups#

The API is grouped logically:

GroupPurpose
/threadsCreate, read, update, delete conversations. Pagination, filtering by type.
/messagesSend, edit, delete, react to messages. Attachment uploads.
/participantsAdd / remove participants from group threads and chat rooms.
/chat-roomsManage chat-room CPT entries, participants, settings.
/usersUser search for recipient selection. Profile / status.
/guests/registerGuest registration. Returns an authenticated session.
/guests/updateGuest profile updates (display name, etc.).
/ai-botsList AI bots, get bot details, manage admin-only bot config.
/callsInitiate / accept / decline / end voice & video calls.
/filesFile upload via standard POST or TUS (resumable).
/settingsPer-user settings (notification preferences, who-can-message-me, etc.).

Negative user IDs for guests#

A non-obvious but critical detail: guests are represented as negative integers in user-id contexts. A guest with bm_guests.id = 42 appears as user ID -42 in API responses (thread.participants[].user_id, message.user_id, etc.). Real WordPress users have positive IDs. Unauthenticated visitors are 0.

If you build a client against this API, treat < 0 as "guest" and > 0 as "WordPress user" in your data layer. Calling WordPress's get_userdata() on a negative ID returns NULL — use the plugin's wrapper helpers in PHP, or just key off the sign in JavaScript.

OpenAPI spec and language tabs#

The full REST API is documented in OpenAPI 3 format. The docs site at /rest-api/ renders the spec with language tabs for every endpoint — HTTP / curl / PHP / JavaScript fetch / Python requests. Copy-paste the snippet for your stack.

The OpenAPI YAML is at openapi/better-messages-api.yaml in the docs repo and can be imported into Postman / Insomnia / Bruno for ad-hoc testing.

Hooks for server-side customization#

For server-side customization (vs API-client customization), Better Messages exposes a wide hook API:

  • PHP actions / filters — modify message data before save, react to participant join / leave, override permission checks
  • JavaScript hooks@wordpress/hooks filters on the React side for UI customization

See the Hooks & Functions Reference for the catalogue.

Common build patterns#

Headless mobile app#

Use the REST API as the backend; build a native iOS / Android app (Swift / Kotlin / React Native / Flutter / Capacitor) that talks to your WordPress site. The Better Messages-shipped mobile app is one example; you can build a fully custom one with white-label branding using the same API.

Slack / Discord bridge#

A small Node.js bot listens to Slack / Discord webhooks, then posts to Better Messages via REST when a message comes in. Use the WordPress Application Password for the bot's user account.

Zapier / n8n / Make automation#

The REST API works with any HTTP automation tool. Trigger workflows from "new message in thread X" or post messages from external systems.

AI extensions beyond the built-in bots#

Build a custom AI processor that subscribes to message-created events (via webhook or polling) and posts AI-generated replies as a bot user. The built-in AI Chat Bots cover most cases; the REST API is for the niche.

How to start#

  1. Install Better Messages from WordPress.org and activate it.
  2. Read the REST API Reference for endpoint details.
  3. (Optional) Read the Hooks & Functions Reference for server-side extension points.
  4. (Optional) Read the llms.txt and llms-full.txt for AI-assistant-friendly versions of the API docs.

Frequently asked questions#

Is the REST API stable?#

Yes — the /better-messages/v1/ namespace is the stable v1 contract. Breaking changes would land under /v2/ with the v1 endpoints kept working.

Do I need the WebSocket version to use the API?#

No — every REST endpoint works on the free version. The WebSocket version adds real-time event delivery alongside the REST API — events you would otherwise poll for arrive as WebSocket pushes.

Is there a WebSocket event API for real-time consumers?#

Yes — the WebSocket version exposes a socket.io connection that emits events for message-created, message-edited, thread-updated, participant-joined, etc. The same React front-end uses this; you can subscribe to it from your own client.

Can I disable specific endpoints for security?#

Yes — every endpoint passes through standard WordPress REST API filters (rest_request_before_callbacks, etc.). Block individual routes with a small mu-plugin if needed.

Does the API have rate limiting?#

The plugin's role-based rate limits (see Role-based access for WordPress chat) apply to API requests the same way they apply to UI actions. No separate rate-limiting layer beyond that — combine with a WAF / Cloudflare for raw HTTP rate limiting.

How do guest API consumers authenticate?#

Guest registration via POST /guests/register returns an id and secret. Subsequent requests send BM-Guest-ID and BM-Guest-Secret headers. The secret is a 30-character random string; store it securely on the client.

See also#

Install Better Messages from WordPress.org →