Fluent WordPress MCP Server & CLI

One open source package with 54 shared tasks for selected FluentCRM, FluentCommunity and Fluent Forms work on your intended private WordPress sites.

Navid Moazzezby Navid Moazzez·Updated 3 paź 2026·93 min read·
Rate this tool

This free Fluent WordPress MCP server and CLI connects your AI to selected FluentCRM, FluentCommunity and Fluent Forms operations on the exact WordPress site you choose. Read contacts, campaigns, spaces and form entries, then apply only the native changes you approve.

The same tasks work as local MCP tools for Codex and other compatible clients, or remote CLI commands for scripts and agents. Existing official plugin MCPs and WP-CLI commands remain useful alternatives.

key_takeaways.mdTL;DR

Key takeaways

One package supplies 54 shared tools and commands, with 41 reads and 13 explicitly confirmed operations.
Each private site profile has its own HTTPS URL, WordPress user and dedicated Application Password, without fallback to another site.
Native methods and fields are reviewed against pinned current sources; all43 legacy names remain with documented major argument corrections.
Ordered cross-plugin reviews and private snapshots are bounded local workflows, not provider-state locks or complete backups.
Official Fluent MCPs, native WP-CLI commands and community dynamic discovery are credited, and Codex token comparisons remain unmeasured.

What is the Fluent WordPress MCP server & CLI?

It is one open source Node package with a local stdio MCP server and a task CLI. An MCP client discovers structured tools; a terminal or agent runs fluent-wp-cli commands. Both invoke the same handlers, schemas, selected site profile and approval guard.

The remote CLI calls your site's allowlisted REST routes over HTTPS. You do not need a local WordPress installation for these remote tasks. Native wp fluent_crm/wp fluentform commands run in a WordPress WP-CLI environment and offer different server-side operations.

What can you ask it?

Try asking
Read one page of contacts from the site profile I selected, keeping only the necessary fields.
Find the actual Community space slug and inspect its current feeds before editing anything.
Read the requested form's entries without changing their read status.
Review these exact CRM and Community changes in order, then apply only the batch I approve.
Save these selected native responses to a new private file, without displaying the records in chat.

Install and connect your client

# Install Fluent WordPress MCP Server & CLI

One package includes both binaries and 54 tools. Node22+ is required for CLI/manual MCP. Discovery works without private authentication; plugin operations need the exact intended HTTPS WordPress site, native capabilities and installed plugins.

Requirements

Install Node from nodejs.org, reopen a terminal and check node --version/npm --version. A GUI or remote runtime needs its own private settings and readable files. Use npm.cmd on Windows if your PowerShell policy blocks npm.ps1. No sudo or main-login-password workaround is required.

CLI

bash npm install -g @thenavidm/fluent-wp-mcp-cli@latest fluent-wp-cli --version fluent-wp-cli tools fluent-wp-cli login 

Node22+ for manual installation. INSTALL.md includes Codex, every declared client/OS and the versioned desktop bundle.

Make the shipped SKILL.md available in your agent's supported private skill location. npm does not register skills automatically. A single-command alternative is npx -y --package @thenavidm/fluent-wp-mcp-cli@latest fluent-wp-cli tools.

Private account setup

Create a dedicated WordPress Application Password

  1. Sign into the intended HTTPS WordPress site. Confirm the site and user before connecting any client. Use a dedicated user with the native Fluent permissions needed for your requested work.
  2. Open Users > Profile > Application Passwords. Give this connection a descriptive name, create an Application Password and save it privately. This is a separate credential, not your main WordPress login password. If the section is unavailable, check HTTPS, WordPress version, hosting/security policy and the user's capabilities with your site administrator.
  3. Configure FLUENT_WP_SITE_URL, FLUENT_WP_USER and either FLUENT_WP_APP_PASSWORD or FLUENT_WP_PASSWORD_FILE. Use the HTTPS site root, optionally its WordPress install subdirectory. Do not append wp-json, put a password in the URL, or include a query/fragment. No redirects or HTTP fallback are followed.
  4. Keep secrets in private client settings or a token-only file outside repositories. Password files must be absolute regular non-symlink files, at most 64 KiB. On macOS/Linux, use an owner-private 0600 file and private parent directory. On Windows, restrict the file and parent directory ACLs separately; POSIX modes do not prove Windows privacy.
  5. Run fluent-wp-cli doctor for local configuration, then deliberately run doctor --network for one GET /wp/v2/users/me with context=view. Its output reports a positive user ID only. This verifies one authenticated WordPress read, not site ownership, all plugin permissions, Pro eligibility or a successful mutation.

WordPress Application Password authentication uses HTTP Basic with username:applicationPassword over HTTPS. The client constructs the header; do not supply a Bearer token or import browser cookies. The package does not log into WordPress, load .env files, create an Application Password, or enable plugins for you.

Plugins, permissions and costs

Install and activate the specific FluentCRM, FluentCommunity and Fluent Forms plugins you intend to use. A site's installed plugin versions and native user capabilities determine its routes and output. Discovery exposes the packaged catalogue before authentication; it does not prove every plugin is present. The package is free under AGPL-3.0. Hosting, paid Pro features, plugin licenses and email delivery services remain separate.

CRM contact/tag/list changes and double opt-in may trigger actual emails or automations. Community announcements, comments and reactions can notify real members. Native Forms reports can update stored metadata. Do not create a contact, publish a feed, or run a stateful report merely to test setup.

The source review covers CRM v2, Community v2 and Forms v1, with Forms plugin source 6.2.14 pinned in provenance. This is a reviewed subset of 47 routes, not every Fluent API. Community analytics/admin course routes require their native permissions and may require Pro. Read native permission notes and inspect your installed versions before account work.

Several isolated sites

FLUENT_WP_ACCOUNTS is a private JSON array of unique {name,site_url,username,app_password,password_file} entries. Choose one password method per profile. Each site requires its own URL, user and credential; a selected profile never falls back to global settings or another site after a missing password or 401/403. FLUENT_WP_DEFAULT_ACCOUNT and --account select an exact label.

list_accounts returns labels, the default and credential source only. It does not reveal site URLs, usernames, password paths or credentials, make requests, or prove provider ownership. Password files are cached until restart. Review hashes bind the selected label, normalized site URL, username, ordered inputs/requests and packaged schema; they do not bind a password fingerprint or validate server state.

Native and local limits

There is no universal vendor quota advertised here. The process spaces requests by 250 ms by default, with a 30-second timeout; hosting, security plugins and other clients can impose different limits. Local pacing is not shared quota enforcement. Requests cap JSON bodies at 1 MiB and responses at 5 MiB. No automatic retries, redirect following, polling or page walking occurs.

Native paginated operations accept only their actual arguments. Where page/per_page are exposed, this wrapper bounds them to 10000/100 locally; this is not a universal provider maximum. Course students and space members do not acquire invented pagination flags. Forms single-entry reads that mark entries as read are intentionally outside this subset.

Revoke and remove

Revoke the dedicated Application Password through the intended WordPress user's Profile. Replace or remove private client/file settings, then restart all server processes. Official plugin MCP credentials and WP-CLI access are separate connections. Uninstalling this package does not undo contact edits, messages, announcements, report migrations or saved private snapshots.

Codex

Codex is the current validation priority. Private password paths must exist in the process or remote environment where the server runs.

bash codex mcp add fluent-wp -- npx -y @thenavidm/fluent-wp-mcp-cli@latest codex mcp list 

Account credentials must reach the server through private environment settings. codex mcp add --env NAME=value stores values in your local config, so never commit that config or put secrets in a shared command. In TOML, the equivalent server is:

toml [mcp_servers.fluent-wp] command = "npx" args = ["-y", "@thenavidm/fluent-wp-mcp-cli@latest"] env_vars = ["FLUENT_WP_SITE_URL", "FLUENT_WP_USER", "FLUENT_WP_APP_PASSWORD", "FLUENT_WP_PASSWORD_FILE", "FLUENT_WP_ACCOUNTS", "FLUENT_WP_DEFAULT_ACCOUNT", "FLUENT_WP_READ_ONLY", "FLUENT_WP_ALLOW_DESTRUCTIVE"]

env_vars forwards those names from the environment available to Codex. If that environment does not contain them, configure private env settings locally. Codex can also call the CLI directly with SKILL.md and --agent output.

Claude Code

For a user-scoped connection, after privately configuring credentials:

bash claude mcp add --scope user fluent-wp -- npx -y @thenavidm/fluent-wp-mcp-cli@latest claude mcp list 

Use the client's private local environment settings for the account variable if they are not inherited. Claude's -e NAME=value registration option writes values into its config; only use it locally through your secret manager, with no shared command transcript. Never place credentials in a project .mcp.json. Reconnect and ask Claude to verify credentials.

Alternatively install the CLI, make SKILL.md available to Claude, and use shell commands. Registering both surfaces is optional.

Claude Desktop

Install the .mcpb extension

  1. Download fluent-wp-2.0.0.mcpb from GitHub Releases.
  2. In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
  3. Enter the intended HTTPS site root and WordPress username. Enter a dedicated Application Password in the sensitive setting, or an absolute private password-file path, never both. Native requests use HTTP Basic username:applicationPassword. Named site profiles require private manual runtime settings.
  4. Enable read-only if you want only the 41 read operations. Reconnect, discover tools, then deliberately verify one current-user read.

The bundle includes production dependencies and no credentials. Use a regular private application-password-only file if you prefer file-based credentials. The manifest requires Node 22 or newer from a compatible host. Organization policy may restrict custom extensions. Manual bundle updates require installing the new version; no automatic directory updates are promised. GUI installation remains unverified separately from archive/protocol checks.

Manual config

Open Settings > Developer > Edit Config, or use your platform's config file:

OSTypical config path
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json; confirm the location through Edit Config in your installed build

json { "mcpServers": { "fluent-wp": { "command": "npx", "args": [ "-y", "@thenavidm/fluent-wp-mcp-cli@latest" ], "env": { "FLUENT_WP_APP_PASSWORD": "YOUR_PRIVATE_APP_PASSWORD", "FLUENT_WP_PASSWORD_FILE": "", "FLUENT_WP_SITE_URL": "https://YOUR-PRIVATE-SITE.example", "FLUENT_WP_USER": "YOUR_PRIVATE_WORDPRESS_USERNAME" } } } } 

Replace the placeholders only in your private file. Merge the server entry into an existing mcpServers object instead of replacing other integrations. Fully quit and reopen Claude Desktop. Do not enable an extension and a manual entry with the same name; choose one route.

If a Windows launcher cannot execute npx directly, use "command": "cmd" with "args": ["/c", "npx", "-y", "@thenavidm/fluent-wp-mcp-cli@latest"]. An absolute node executable and installed dist/index.js path also avoids launcher/PATH problems.

Cursor

Use private user settings at ~/.cursor/mcp.json, or Settings > Tools & MCP. Cursor documents environment interpolation and envFile support.

json { "mcpServers": { "fluent-wp": { "type": "stdio", "command": "npx", "args": [ "-y", "@thenavidm/fluent-wp-mcp-cli@latest" ], "env": { "FLUENT_WP_APP_PASSWORD": "${env:FLUENT_WP_APP_PASSWORD}", "FLUENT_WP_PASSWORD_FILE": "${env:FLUENT_WP_PASSWORD_FILE}", "FLUENT_WP_SITE_URL": "${env:FLUENT_WP_SITE_URL}", "FLUENT_WP_USER": "${env:FLUENT_WP_USER}" } } } } 

The environment values must exist for the Cursor process. If you use envFile, keep that file private and outside version control. A project's .cursor/mcp.json must not contain actual credentials. Reconnect the server after saving.

VS Code and Copilot

Use MCP: Open User Configuration. VS Code uses servers and secure inputs, rather than a mcpServers root:

json { "inputs": [ { "type": "promptString", "id": "fluent-wp-app-password", "description": "Dedicated WordPress Application Password (leave empty for a private password file)", "password": true }, { "type": "promptString", "id": "fluent-wp-password-file", "description": "Optional private password-file path (leave empty for Application Password)" }, { "type": "promptString", "id": "fluent-wp-site-url", "description": "Trusted HTTPS WordPress site root" }, { "type": "promptString", "id": "fluent-wp-user", "description": "Intended WordPress username" } ], "servers": { "fluent-wp": { "type": "stdio", "command": "npx", "args": [ "-y", "@thenavidm/fluent-wp-mcp-cli@latest" ], "env": { "FLUENT_WP_APP_PASSWORD": "${input:fluent-wp-app-password}", "FLUENT_WP_PASSWORD_FILE": "${input:fluent-wp-password-file}", "FLUENT_WP_SITE_URL": "${input:fluent-wp-site-url}", "FLUENT_WP_USER": "${input:fluent-wp-user}" } } } } 

Start Fluent WordPress through the MCP controls, approve trust if prompted, and enter credentials in the private input prompts. Workspace .vscode/mcp.json may contain this placeholder-only structure, but never resolved secret values. Remote development runs the server in the selected remote environment, so local file paths refer to that environment.

Windsurf

Open Cascade's MCP settings or edit the private user file ~/.codeium/windsurf/mcp_config.json. Use the Claude Desktop manual mcpServers block above with your locally configured env values. See Windsurf's current MCP documentation. Restart or reconnect Fluent WordPress in Cascade; project files must not contain secrets.

Zed

Open Settings > AI > MCP Servers > Add Server > Add Local Server, or your user settings file. Zed uses context_servers:

json { "context_servers": { "fluent-wp": { "command": "npx", "args": [ "-y", "@thenavidm/fluent-wp-mcp-cli@latest" ], "env": { "FLUENT_WP_APP_PASSWORD": "YOUR_PRIVATE_APP_PASSWORD", "FLUENT_WP_PASSWORD_FILE": "", "FLUENT_WP_SITE_URL": "https://YOUR-PRIVATE-SITE.example", "FLUENT_WP_USER": "YOUR_PRIVATE_WORDPRESS_USERNAME" } } } } 

Enter actual values only in private user settings. Check the active-server indicator before prompting. Do not wrap command and args inside a nested command object from older Zed examples.

Gemini CLI

Merge the Claude Desktop manual mcpServers block into your private ~/.gemini/settings.json. Configure the private site/user/password values locally, then restart Gemini CLI and inspect /mcp. See Gemini CLI's MCP configuration. Its project settings must not contain real credentials. You can instead use the CLI from an agent shell.

Other local stdio clients use the same command and arguments, adapted to their config format. A client that only accepts a remote MCP URL cannot connect directly: this package does not ship a public HTTP listener. ChatGPT's remote connector setup is not a substitute for local stdio installation.

Docker

Build locally from the reviewed source; no prebuilt registry image is claimed:

bash git clone https://github.com/thenavidm/fluent-wp-mcp-cli.git cd fluent-wp-mcp-cli docker build -t fluent-wp-mcp-cli . docker run --rm -i -e FLUENT_WP_SITE_URL -e FLUENT_WP_USER -e FLUENT_WP_APP_PASSWORD fluent-wp-mcp-cli 

Cline and other local MCP clients

Use the client's Add MCP server flow with command npx, arguments -y and @thenavidm/fluent-wp-mcp-cli@latest, stdio transport, and private local FLUENT_WP_SITE_URL/FLUENT_WP_USER and FLUENT_WP_APP_PASSWORD or FLUENT_WP_PASSWORD_FILE settings. UI names depend on the installed client. Reconnect and discover tools before an account call. Browser-only clients need a remote HTTPS connector; use Fluent WordPress's official server rather than this local stdio command.

Verify

bash fluent-wp-cli --version fluent-wp-cli tools fluent-wp-cli list-accounts --agent fluent-wp-cli doctor fluent-wp-cli doctor --network fluent-wp-cli fcrm-list-contacts --per-page 1 --agent --select data.id 

Credential-free discovery, native request fixtures and direct full/read-only guard checks are separate from actual provider validation. A positive current-user read establishes neither ownership nor every Fluent permission. Authenticated plugin outcomes, desktop GUI installation and matched successful Codex task/token results remain unverified until independently exercised.

Multiple accounts

FLUENT_WP_ACCOUNTS is a private JSON array of unique {name,site_url,username,app_password,password_file} entries. Choose one password method per profile. Each site requires its own URL, user and credential; a selected profile never falls back to global settings or another site after a missing password or 401/403. FLUENT_WP_DEFAULT_ACCOUNT and --account select an exact label.

list_accounts returns labels, the default and credential source only. It does not reveal site URLs, usernames, password paths or credentials, make requests, or prove provider ownership. Password files are cached until restart. Review hashes bind the selected label, normalized site URL, username, ordered inputs/requests and packaged schema; they do not bind a password fingerprint or validate server state.

bash fluent-wp-cli list-accounts --agent fluent-wp-cli fcrm-list-contacts --account work --per-page 1 --agent 

Updates and removal

Use npx -y @thenavidm/fluent-wp-mcp-cli@latest for fresh client launches, then reconnect/restart. Global installs require npm update -g @thenavidm/fluent-wp-mcp-cli. Desktop extensions require installing the newly versioned archive. Read the major migration table before replacing old script arguments. Remove only the requested registration, skill, package or extension. Revoke Application Passwords separately; private snapshots and provider changes remain.

bash npm update -g @thenavidm/fluent-wp-mcp-cli fluent-wp-cli --version # Removal only when requested codex mcp remove fluent-wp npm uninstall -g @thenavidm/fluent-wp-mcp-cli

Troubleshooting

SymptomCheck and resolution
No binary/NodeInstall Node22+, check npm global PATH and reopen terminal; npm.cmd can respect Windows policy
Configuration exit10Set each selected profile URL/user and one password method; no global fallback
Unsafe URL/refused redirectUse the canonical trusted HTTPS root/install subdirectory, no wp-json/query/fragment/credentials
401/403Check Application Password revocation, Basic header forwarding, native capabilities and security plugin policy
WordPress user read passes, Fluent failsUser identity does not prove plugin activation, route version, native access or Pro eligibility
404/HTML responseCheck installed plugins, exact site root and REST path; redirects/login HTML are not followed
HTTP200 but native failuresuccess:false, status:false or native code/data.status errors refuse; inspect error receipt
429/timeoutRespect host guidance and inspect mutation state before deliberately repeating; no retry loop
Old feed/comment argsUse space/content_type/message and comment; POST content edits, no guessed PATCH
Wrong Forms entriesUse GET submissions and actual form_id/entry_type/sort_by; aggregate reports are different
Read-only report refusalff_form_report is stateful in current source; explicit requested approval is required
Review mismatch/partial batchPreview unchanged site/tasks again; retain known receipts and do not replay successes
Existing snapshot fileChoose a new absolute file; no overwrite or cross-site append
GUI/remote runtime differsGive that actual runtime private settings and accessible files; restart/reconnect

Development

bash git clone https://github.com/thenavidm/fluent-wp-mcp-cli.git cd fluent-wp-mcp-cli npm ci npm run typecheck npm run build npm test npm run check:counts npm run check:discovery npm run sync:api -- --check npm run build:mcpb 

Source mode registers node /absolute/path/fluent-wp-mcp-cli/dist/index.js after a build. Credentials remain outside the checkout and archive. CONTRIBUTING.md, SECURITY.md and THIRD_PARTY_NOTICES.md cover reports, development and licensing.

CLI output and scripting

Native JSON is preserved after recognized credential redaction; ordinary records remain private. --select keeps only requested output fields. Repeated primitive array flags serialize to native PHP [] query fields. Nested subscriber/note objects use JSON values, and --payload or a private absolute --payload-file provides a complete native body. Do not mix body flags with payload/payload_file. A 202 means acceptance, not completed downstream work. HTTP200 JSON success:false/status:false/native error objects refuse.

FlagBehavior
--agentCompact JSON/no prompts/color; never approval
--confirmExplicit approval for exactly requested confirmed work
--account LABELExact private site profile
--select a,b.cFilter returned fields locally
--payload / --payload-fileWhole native body, exclusive with flat body flags/each other
--tasks JSONRepeat one task object per flag
--review-sha256 HASHExact unchanged local preview hash
--output-file PATHExclusive new private snapshot file
ExitMeaning
0Native response/receipt returned; inspect status and downstream effects
2Usage, schema or refused/unapproved operation
3Not found
4Authentication/permissions
5API/network or unknown mutation outcome
7Rate limited
10Missing or invalid private configuration

MCP or CLI and measured token cost

Both surfaces call the same MCP handlers and guard. MCP clients choose their own tool discovery/loading strategy. The CLI supports selected command help/schema and compact results; it also consumes command/help/output/reasoning tokens. Fresh matched successful Codex task/token measurements remain pending. No percentage, character estimate, other-client figure or fixture is represented as a measured Codex saving. Record actual API usage, client/model/version/date, discovery settings, caching, latency, provider calls and equivalent successful outputs before publishing a comparison.

CRM, Community and Forms workflows

Read CRM before an approved change

Discover real contacts, tags and lists first. An approved status/list/tag update can trigger automations; read the current profile and choose only the requested fields. A successful native receipt does not prove all downstream emails or hooks completed.

bash fluent-wp-cli fcrm-list-contacts --per-page 5 --agent fluent-wp-cli fcrm-list-tags --per-page 5 --agent fluent-wp-cli schema fcrm-update-contact fluent-wp-cli fcrm-update-contact --help 

Read Community and edit the intended content

Get a real space slug and feed ID. Feeds use native space/content_type/message, comments use comment, and content edits use POST. Announcement email is a separate effect: approve it explicitly if requested. Scheduled-post discovery is not a scheduling action.

bash fluent-wp-cli fc-list-spaces --agent fluent-wp-cli fc-list-feeds --per-page 5 --agent fluent-wp-cli schema fc-create-feed fluent-wp-cli schema fc-update-comment 

Read Forms submissions without marking an entry

Discover form IDs and request a selected submissions page. entry_type controls native status/favourites filters, sort_by is a direction, and date_range is a two-element array. The package does not silently call a single-entry endpoint that marks entries read. ff_form_report is a confirmed stateful report, separate from ordinary entry/stat reads.

bash fluent-wp-cli ff-list-forms --per-page 5 --agent fluent-wp-cli ff-list-submissions --form-id 123 --per-page 5 --agent fluent-wp-cli schema ff-form-stats fluent-wp-cli ff-form-report --help 

123 is an example ID; replace it with a real ID read from the intended site before making that request.

Reviewed batches and private snapshots

Preview one to twenty exact ordered CRM/Community writes. Every native schema/body is validated before the first request. Preview is local and does not read a password, query provider state, lock a cohort or issue a native official confirmation token. Select the same exact site and unchanged task order when submitting.

bash fluent-wp-cli preview-site-batch --help fluent-wp-cli schema submit-site-batch fluent-wp-cli read-site-snapshot --help fluent-wp-cli schema save-site-snapshot 

Each --tasks flag is one JSON object with tool and arguments. Task arguments cannot override account/confirm or refer to payload_file/output_file. Use a complete immutable payload value when needed. submit-site-batch requires --confirm and the exact --review-sha256 hash; --agent and --yes never supply approval. Execution stops on the first failure and returns knownResults, failedIndex and unattemptedIndices. No retry, rollback or automatic continuation occurs. A failed request can have an unknown result, and a receipt can precede hook/announcement completion.

read_site_snapshot prevalidates one to twenty selected native reads for one site and returns at most 5 MiB combined native responses. Each list is one requested page, not an all-pages backup or atomic provider snapshot. save_site_snapshot requires confirmation and an absolute new file in an existing private directory. It reserves the file exclusively with mode0600, never overwrites, and returns only path/bytes/SHA-256 metadata. Failure removes only its newly created file and reports indices without native records. Keep Windows ACLs and parent-directory privacy separately restricted. Stateful Forms reports are excluded from these read helpers.

Every shared tool and argument

fcrm_dashboard_stats

Retrieve overall dashboard statistics including active contacts count, campaigns count, emails sent, active automations, onboarding progress, quick links, recent contacts, recent campaigns, active automations list, and system recommendations.

Required capability: fcrm_view_dashboard

Enforced by `ReportPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-dashboard-stats --help fluent-wp-cli schema fcrm-dashboard-stats 

fcrm_list_contacts

Retrieve a paginated list of contacts. Supports both simple filtering (by tags, lists, statuses) and advanced filtering with complex filter groups. Optionally includes custom field values.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

filter_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Type of filtering to apply. enum: ["simple", "advanced"]. default: "simple".
search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search contacts by name, email, or other searchable fields.
sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Column to sort by. default: "id".
sort_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort direction. enum: ["ASC", "DESC"]. default: "DESC".
has_commerce
Required
Optional; native body and guard rules still apply
Type
string
Details
Filter by commerce integration availability.
custom_fields
Required
Optional; native body and guard rules still apply
Type
string
Details
Set to true to include custom field values in the response. enum: ["true", "false"].
tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Filter by tag IDs (simple filter mode only).
tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
statuses
Required
Optional; native body and guard rules still apply
Type
array
Details
Filter by contact statuses (simple filter mode only).
statuses[]
Required
Per item when supplied
Type
string
Details
Array item schema. Enum: ["subscribed", "pending", "unsubscribed", "bounced", "complained"]
sms_statuses
Required
Optional; native body and guard rules still apply
Type
array
Details
Filter by SMS statuses (simple filter mode only).
sms_statuses[]
Required
Per item when supplied
Type
string
Details
Array item schema. Enum: ["sms_subscribed", "sms_unsubscribed", "sms_pending", "sms_bounced"]
lists
Required
Optional; native body and guard rules still apply
Type
array
Details
Filter by list IDs (simple filter mode only).
lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
company_ids
Required
Optional; native body and guard rules still apply
Type
array
Details
Filter by company IDs.
company_ids[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
advanced_filters
Required
Optional; native body and guard rules still apply
Type
string
Details
JSON-encoded advanced filter groups (advanced filter mode only).
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Number of contacts per page. default: 15. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Page number for pagination. default: 1. minimum: 1. maximum: 10000.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-list-contacts --help fluent-wp-cli schema fcrm-list-contacts 

fcrm_get_contact

Retrieve a single contact by ID or email. Supports eager-loading related data like stats, custom values, custom field definitions, and commerce stats via the with[] parameter.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

id
Required
Yes
Type
integer
Details
The contact ID. minimum: 1.
get_by_email
Required
Optional; native body and guard rules still apply
Type
string
Details
If set, looks up the contact by email address instead of the path id. format: "email".
with
Required
Optional; native body and guard rules still apply
Type
array
Details
Relationships and extra data to include. Supported values: stats, subscriber.custom_values, custom_fields, commerce_stat.
with[]
Required
Per item when supplied
Type
string
Details
Array item schema. Enum: ["stats", "subscriber.custom_values", "custom_fields", "commerce_stat"]
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-get-contact --help fluent-wp-cli schema fcrm-get-contact 

fcrm_search_contacts

Search contacts by name or email. Returns a lightweight object of contacts keyed by ID, suitable for dropdowns and autocomplete widgets. Optionally loads default contacts when no search term is provided.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search term to match against contact name and email.
limit
Required
Optional; native body and guard rules still apply
Type
integer
Details
Maximum number of results to return. default: 20. minimum: 1. maximum: 100.
load_default
Required
Optional; native body and guard rules still apply
Type
string
Details
If truthy and no search term is provided, returns the most recent contacts. enum: ["true", "false", "1", "0", "yes"].
values
Required
Optional; native body and guard rules still apply
Type
array
Details
Array of contact IDs to always include in results (useful for pre-selected values).
values[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
offset
Required
Optional; native body and guard rules still apply
Type
integer
Details
Rows to skip before the first result. Combine with limit to page through matches. default: 0.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-search-contacts --help fluent-wp-cli schema fcrm-search-contacts 

fcrm_create_contact

Create a new contact. If __force_update is set to yes, it will update an existing contact with the same email instead of returning an error. Optionally sends a double opt-in email.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

email
Required
Optional; native body and guard rules still apply
Type
string
Details
Contact email address. Must be unique unless __force_update is yes. format: "email".
status
Required
Optional; native body and guard rules still apply
Type
string
Details
Contact subscription status. enum: ["subscribed", "pending", "unsubscribed", "bounced", "complained"].
first_name
Required
Optional; native body and guard rules still apply
Type
string
Details
First name.
last_name
Required
Optional; native body and guard rules still apply
Type
string
Details
Last name.
prefix
Required
Optional; native body and guard rules still apply
Type
string
Details
Name prefix (e.g., Mr, Mrs, Ms).
contact_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Contact type. enum: ["lead", "customer"].
address_line_1
Required
Optional; native body and guard rules still apply
Type
string
Details
Address line 1.
address_line_2
Required
Optional; native body and guard rules still apply
Type
string
Details
Address line 2.
postal_code
Required
Optional; native body and guard rules still apply
Type
string
Details
Postal/zip code.
city
Required
Optional; native body and guard rules still apply
Type
string
Details
City.
state
Required
Optional; native body and guard rules still apply
Type
string
Details
State or province.
country
Required
Optional; native body and guard rules still apply
Type
string
Details
Two-letter country code.
phone
Required
Optional; native body and guard rules still apply
Type
string
Details
Phone number.
timezone
Required
Optional; native body and guard rules still apply
Type
string
Details
Timezone identifier.
date_of_birth
Required
Optional; native body and guard rules still apply
Type
string
Details
Date of birth (YYYY-MM-DD).
source
Required
Optional; native body and guard rules still apply
Type
string
Details
Contact source.
tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Tag IDs to assign.
tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
lists
Required
Optional; native body and guard rules still apply
Type
array
Details
List IDs to assign.
lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
double_optin
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Send double opt-in confirmation email.
__force_update
Required
Optional; native body and guard rules still apply
Type
string
Details
If yes, updates existing contact with the same email instead of failing. enum: ["yes", "no"].
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.
payload
Required
Optional; native body and guard rules still apply
Type
object
Details
Complete native JSON body; do not mix with body flags or payload_file. Arrays use repeated JSON object flags or a whole native array in a private file. additionalProperties: false. required: ["email", "status"].
payload.email
Required
Yes
Type
string
Details
Contact email address. Must be unique unless __force_update is yes. format: "email".
payload.status
Required
Yes
Type
string
Details
Contact subscription status. enum: ["subscribed", "pending", "unsubscribed", "bounced", "complained"].
payload.first_name
Required
Optional; native body and guard rules still apply
Type
string
Details
First name.
payload.last_name
Required
Optional; native body and guard rules still apply
Type
string
Details
Last name.
payload.prefix
Required
Optional; native body and guard rules still apply
Type
string
Details
Name prefix (e.g., Mr, Mrs, Ms).
payload.contact_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Contact type. enum: ["lead", "customer"].
payload.address_line_1
Required
Optional; native body and guard rules still apply
Type
string
Details
Address line 1.
payload.address_line_2
Required
Optional; native body and guard rules still apply
Type
string
Details
Address line 2.
payload.postal_code
Required
Optional; native body and guard rules still apply
Type
string
Details
Postal/zip code.
payload.city
Required
Optional; native body and guard rules still apply
Type
string
Details
City.
payload.state
Required
Optional; native body and guard rules still apply
Type
string
Details
State or province.
payload.country
Required
Optional; native body and guard rules still apply
Type
string
Details
Two-letter country code.
payload.phone
Required
Optional; native body and guard rules still apply
Type
string
Details
Phone number.
payload.timezone
Required
Optional; native body and guard rules still apply
Type
string
Details
Timezone identifier.
payload.date_of_birth
Required
Optional; native body and guard rules still apply
Type
string
Details
Date of birth (YYYY-MM-DD).
payload.source
Required
Optional; native body and guard rules still apply
Type
string
Details
Contact source.
payload.tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Tag IDs to assign.
payload.tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
payload.lists
Required
Optional; native body and guard rules still apply
Type
array
Details
List IDs to assign.
payload.lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
payload.double_optin
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Send double opt-in confirmation email.
payload.__force_update
Required
Optional; native body and guard rules still apply
Type
string
Details
If yes, updates existing contact with the same email instead of failing. enum: ["yes", "no"].
payload_file
Required
Optional; native body and guard rules still apply
Type
string
Details
Absolute regular non-symlink JSON body file, at most 1 MiB. Cannot mix with payload/body flags. minLength: 1.

bash fluent-wp-cli fcrm-create-contact --help fluent-wp-cli schema fcrm-create-contact 

fcrm_update_contact

Update an existing contact's fields, custom values, tags, and lists. Supports attaching and detaching tags/lists in a single request. The subscriber object or individual fields can be passed in the request body.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

id
Required
Yes
Type
integer
Details
The contact ID. minimum: 1.
subscriber
Required
Optional; native body and guard rules still apply
Type
object
Details
Contact data can be nested inside a subscriber object or passed at the top level. minProperties: 1. additionalProperties: false.
subscriber.email
Required
Optional; native body and guard rules still apply
Type
string
Details
Email address (must be unique). format: "email".
subscriber.first_name
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.last_name
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.prefix
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.status
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. enum: ["subscribed", "pending", "unsubscribed", "bounced", "complained"].
subscriber.contact_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. enum: ["lead", "customer"].
subscriber.address_line_1
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.address_line_2
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.postal_code
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.city
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.state
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.country
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.phone
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.timezone
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.date_of_birth
Required
Optional; native body and guard rules still apply
Type
['string', 'null']
Details
Date of birth (YYYY-MM-DD). Send null or empty string to clear.
subscriber.source
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.custom_values
Required
Optional; native body and guard rules still apply
Type
object
Details
Custom field key-value pairs to update. additionalProperties: {"type": "string"}.
subscriber.attach_tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Tag IDs to attach.
subscriber.attach_tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
subscriber.detach_tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Tag IDs to detach.
subscriber.detach_tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
subscriber.attach_lists
Required
Optional; native body and guard rules still apply
Type
array
Details
List IDs to attach.
subscriber.attach_lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
subscriber.detach_lists
Required
Optional; native body and guard rules still apply
Type
array
Details
List IDs to detach.
subscriber.detach_lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.
payload
Required
Optional; native body and guard rules still apply
Type
object
Details
Complete native JSON body; do not mix with body flags or payload_file. Arrays use repeated JSON object flags or a whole native array in a private file. additionalProperties: false. required: ["subscriber"].
payload.subscriber
Required
Yes
Type
object
Details
Contact data can be nested inside a subscriber object or passed at the top level. minProperties: 1. additionalProperties: false.
payload.subscriber.email
Required
Optional; native body and guard rules still apply
Type
string
Details
Email address (must be unique). format: "email".
payload.subscriber.first_name
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.last_name
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.prefix
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.status
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. enum: ["subscribed", "pending", "unsubscribed", "bounced", "complained"].
payload.subscriber.contact_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. enum: ["lead", "customer"].
payload.subscriber.address_line_1
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.address_line_2
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.postal_code
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.city
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.state
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.country
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.phone
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.timezone
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.date_of_birth
Required
Optional; native body and guard rules still apply
Type
['string', 'null']
Details
Date of birth (YYYY-MM-DD). Send null or empty string to clear.
payload.subscriber.source
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.subscriber.custom_values
Required
Optional; native body and guard rules still apply
Type
object
Details
Custom field key-value pairs to update. additionalProperties: {"type": "string"}.
payload.subscriber.attach_tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Tag IDs to attach.
payload.subscriber.attach_tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
payload.subscriber.detach_tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Tag IDs to detach.
payload.subscriber.detach_tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
payload.subscriber.attach_lists
Required
Optional; native body and guard rules still apply
Type
array
Details
List IDs to attach.
payload.subscriber.attach_lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
payload.subscriber.detach_lists
Required
Optional; native body and guard rules still apply
Type
array
Details
List IDs to detach.
payload.subscriber.detach_lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
payload_file
Required
Optional; native body and guard rules still apply
Type
string
Details
Absolute regular non-symlink JSON body file, at most 1 MiB. Cannot mix with payload/body flags. minLength: 1.

bash fluent-wp-cli fcrm-update-contact --help fluent-wp-cli schema fcrm-update-contact 

fcrm_contact_notes

Retrieve a paginated list of notes for a contact. Supports searching notes by title. Each note includes the user who created it.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

id
Required
Yes
Type
integer
Details
The contact ID. minimum: 1.
search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search notes by title.
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Number of notes per page. default: 15. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Page number. default: 1. minimum: 1. maximum: 10000.
include_id
Required
Optional; native body and guard rules still apply
Type
integer
Details
Id of a note that must appear in the response even when it falls outside the current page. When it is not already on the page it is returned separately as included_note, scoped to this contact.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-contact-notes --help fluent-wp-cli schema fcrm-contact-notes 

fcrm_add_contact_note

Add a new note to a contact. The note description supports SmartCode/merge tags which are parsed before saving. If created_at is not provided, it defaults to the current WordPress time.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

id
Required
Yes
Type
integer
Details
The contact ID. minimum: 1.
note
Required
Optional; native body and guard rules still apply
Type
object
Details
Actual shared argument definition. required: ["title", "description", "type"].
note.title
Required
Yes
Type
string
Details
Note title.
note.description
Required
Yes
Type
string
Details
Note content (HTML). Supports SmartCode/merge tags.
note.type
Required
Yes
Type
string
Details
Note type. enum: ["note", "call", "email", "meeting", "activity"].
note.created_at
Required
Optional; native body and guard rules still apply
Type
string
Details
Custom creation date. Defaults to current time if not provided. format: "date-time".
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.
payload
Required
Optional; native body and guard rules still apply
Type
object
Details
Complete native JSON body; do not mix with body flags or payload_file. Arrays use repeated JSON object flags or a whole native array in a private file. additionalProperties: false. required: ["note"].
payload.note
Required
Yes
Type
object
Details
Actual shared argument definition. required: ["title", "description", "type"].
payload.note.title
Required
Yes
Type
string
Details
Note title.
payload.note.description
Required
Yes
Type
string
Details
Note content (HTML). Supports SmartCode/merge tags.
payload.note.type
Required
Yes
Type
string
Details
Note type. enum: ["note", "call", "email", "meeting", "activity"].
payload.note.created_at
Required
Optional; native body and guard rules still apply
Type
string
Details
Custom creation date. Defaults to current time if not provided. format: "date-time".
payload_file
Required
Optional; native body and guard rules still apply
Type
string
Details
Absolute regular non-symlink JSON body file, at most 1 MiB. Cannot mix with payload/body flags. minLength: 1.

bash fluent-wp-cli fcrm-add-contact-note --help fluent-wp-cli schema fcrm-add-contact-note 

fcrm_list_tags

Retrieve a paginated list of tags. Optionally includes subscriber counts and a separate array of all tags for dropdown/select usage.

Required capability: fcrm_manage_contact_cats

Enforced by `TagPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search tags by title, slug, or description.
sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Column to sort by. enum: ["id", "title", "slug", "created_at"]. default: "id".
sort_order
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort direction. enum: ["ASC", "DESC"]. default: "DESC".
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Number of tags per page. default: 15. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Page number for pagination. default: 1. minimum: 1. maximum: 10000.
exclude_counts
Required
Optional; native body and guard rules still apply
Type
boolean
Details
If set to any truthy value, subscriber counts will not be included for each tag.
all_tags
Required
Optional; native body and guard rules still apply
Type
boolean
Details
If set to any truthy value, includes a flat all_tags array with id, title, and slug of every tag (useful for dropdowns).
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-list-tags --help fluent-wp-cli schema fcrm-list-tags 

fcrm_list_lists

Retrieve a paginated list of contact lists. Optionally includes subscriber counts and a separate array of all lists for dropdown/select usage.

Required capability: fcrm_manage_contact_cats

Enforced by `ListPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search lists by title, slug, or description.
sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Column to sort by. enum: ["id", "title", "slug", "created_at"]. default: "id".
sort_order
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort direction. enum: ["ASC", "DESC"]. default: "DESC".
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Number of lists per page. default: 15. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Page number for pagination. default: 1. minimum: 1. maximum: 10000.
exclude_counts
Required
Optional; native body and guard rules still apply
Type
boolean
Details
If set to any truthy value, totalCount and subscribersCount will not be included for each list.
all_lists
Required
Optional; native body and guard rules still apply
Type
boolean
Details
If set to any truthy value, includes a flat all_lists array with id, title, and slug of every list (useful for dropdowns).
with
Required
Optional; native body and guard rules still apply
Type
array
Details
Extra data to include. subscribersCount adds per-list contact counts via one grouped pivot query.
with[]
Required
Per item when supplied
Type
string
Details
Array item schema.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-list-lists --help fluent-wp-cli schema fcrm-list-lists 

fcrm_list_campaigns

Retrieve a paginated list of email campaigns. Supports filtering by status, search term, labels, and sorting. Optionally includes campaign statistics.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by `CampaignPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

searchBy
Required
Optional; native body and guard rules still apply
Type
string
Details
Search campaigns by title.
statuses
Required
Optional; native body and guard rules still apply
Type
array
Details
Filter by campaign statuses.
statuses[]
Required
Per item when supplied
Type
string
Details
Array item schema. Enum: ["draft", "processing", "pending-scheduled", "scheduled", "working", "paused", "archived"]
sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Column to sort by. default: "created_at".
sort_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort direction. enum: ["ASC", "DESC"]. default: "DESC".
with
Required
Optional; native body and guard rules still apply
Type
array
Details
Include related data. Use stats to include campaign statistics and labels.
with[]
Required
Per item when supplied
Type
string
Details
Array item schema. Enum: ["stats"]
labels
Required
Optional; native body and guard rules still apply
Type
array
Details
Filter by label IDs.
labels[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Number of results per page. default: 15. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Page number. default: 1. minimum: 1. maximum: 10000.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-list-campaigns --help fluent-wp-cli schema fcrm-list-campaigns 

fcrm_get_campaign

Retrieve a single campaign by ID. Optionally include related data (template, subjects) via the with parameter. When viewCampaign is set, returns the campaign with its paginated emails. Also returns available email templates and the server's current time.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by `CampaignPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

id
Required
Yes
Type
integer
Details
The campaign ID. minimum: 1.
with
Required
Optional; native body and guard rules still apply
Type
array
Details
Include related data (e.g., template, subjects).
with[]
Required
Per item when supplied
Type
string
Details
Array item schema.
viewCampaign
Required
Optional; native body and guard rules still apply
Type
string
Details
If set, returns the campaign with paginated emails instead of the standard response.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-get-campaign --help fluent-wp-cli schema fcrm-get-campaign 

fcrm_campaign_stats

Get overview statistics for a campaign including sent count, email status breakdown, and open/click analytics. This is a lighter-weight alternative to the full campaign status endpoint, suitable for dashboard widgets or summary views.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by `CampaignPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

id
Required
Yes
Type
integer
Details
The campaign ID. minimum: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-campaign-stats --help fluent-wp-cli schema fcrm-campaign-stats 

fcrm_list_sequences

Retrieve a paginated list of email sequences. Optionally include statistics (email count, subscriber count, revenue) for each sequence. Requires FluentCampaign Pro.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by `SequencePolicy::verifyRequest()`, the policy default for this route group.

Requires: FluentCampaign Pro. Without it the route does not exist.

Kind: Read. Native plugin/user permissions apply.

order
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort direction. enum: ["asc", "desc"]. default: "desc".
orderBy
Required
Optional; native body and guard rules still apply
Type
string
Details
Column to sort by. default: "id".
search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search sequences by title.
with
Required
Optional; native body and guard rules still apply
Type
array
Details
Include additional data. Use stats to include email count, subscriber count, and revenue for each sequence.
with[]
Required
Per item when supplied
Type
string
Details
Array item schema. Enum: ["stats"]
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Number of sequences per page. default: 15. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Page number for pagination. default: 1. minimum: 1. maximum: 10000.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-list-sequences --help fluent-wp-cli schema fcrm-list-sequences 

fcrm_list_automations

Retrieve a paginated list of automation funnels. Supports sorting, searching by title, and filtering by label IDs. Optionally includes trigger definitions.

Required capability: fcrm_read_funnels or fcrm_write_funnels : which one applies depends on the action being performed.

Enforced by `FunnelPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Column to sort by. default: "id".
sort_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort direction. enum: ["ASC", "DESC"]. default: "DESC".
search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search funnels by title (partial match).
labels
Required
Optional; native body and guard rules still apply
Type
array
Details
Filter funnels by label IDs.
labels[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
with
Required
Optional; native body and guard rules still apply
Type
array
Details
Include additional related data. Supported values: triggers.
with[]
Required
Per item when supplied
Type
string
Details
Array item schema. Enum: ["triggers"]
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Number of funnels per page. default: 15. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Page number for pagination. default: 1. minimum: 1. maximum: 10000.
tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Only automations whose contacts carry these tag ids.
tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
lists
Required
Optional; native body and guard rules still apply
Type
array
Details
Only automations whose contacts are on these list ids.
lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
statuses
Required
Optional; native body and guard rules still apply
Type
array
Details
Filter automations by status, e.g. published or draft.
statuses[]
Required
Per item when supplied
Type
string
Details
Array item schema.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-list-automations --help fluent-wp-cli schema fcrm-list-automations 

fcrm_automation_report

Retrieve statistical reporting data for a specific automation funnel. Returns aggregated stats generated by the Reporting service.

Required capability: fcrm_read_funnels or fcrm_write_funnels : which one applies depends on the action being performed.

Enforced by `FunnelPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

id
Required
Yes
Type
integer
Details
The funnel ID. minimum: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-automation-report --help fluent-wp-cli schema fcrm-automation-report 

fcrm_contact_emails

Retrieve a paginated list of emails sent to a contact. Supports filtering by open/click status. Can also show FluentSMTP logs when the tab parameter is set to fluentsmtp.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Kind: Read. Native plugin/user permissions apply.

id
Required
Yes
Type
integer
Details
The contact ID. minimum: 1.
filter
Required
Optional; native body and guard rules still apply
Type
string
Details
Filter emails by engagement status. enum: ["open", "click", "unopened"].
tab
Required
Optional; native body and guard rules still apply
Type
string
Details
Email source tab. Use fluentsmtp to show FluentSMTP logs instead of CRM campaign emails. enum: ["crm", "fluentsmtp"]. default: "crm".
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Number of emails per page. default: 15. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Page number. default: 1. minimum: 1. maximum: 10000.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fcrm-contact-emails --help fluent-wp-cli schema fcrm-contact-emails 

fc_list_spaces

Returns the paginated list of spaces with each one formatted for display, including the current user permissions and membership within it.

Controller: SpaceController@getAllSpaces Route source: fluent-community/app/Http/Routes/api.php:34

Kind: Read. Native plugin/user permissions apply.

account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-list-spaces --help fluent-wp-cli schema fc-list-spaces 

fc_get_space

Returns one space with its settings, topics, the current user membership and the permissions they hold inside it.

Controller: SpaceController@getBySlug Route source: fluent-community/app/Http/Routes/api.php:10

Kind: Read. Native plugin/user permissions apply.

slug
Required
Yes
Type
string
Details
SpaceSlug extracted from the URL path. minLength: 1. pattern: "^(?!\\.{1,2}$)[^/\\\\\\x00-\\x1f?#]+$".
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-get-space --help fluent-wp-cli schema fc-get-space 

fc_list_feeds

Returns a page of posts the current user is allowed to read, transformed for display, with the pinned post of a space returned separately on the first page.

Controller: FeedsController@get Route source: fluent-community/app/Http/Routes/api.php:45

Kind: Read. Native plugin/user permissions apply.

space
Required
Optional; native body and guard rules still apply
Type
string
Details
Space read via $request->get() in get().
user_id
Required
Optional; native body and guard rules still apply
Type
string
Details
User ID read via $request->getSafe() in get().
topic_slug
Required
Optional; native body and guard rules still apply
Type
string
Details
Topic Slug read via $request->getSafe() in get().
search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search read via $request->getSafe() in get().
status
Required
Optional; native body and guard rules still apply
Type
string
Details
Status read via $request->getSafe() in get().
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Per Page read via $request->get() in get(). default: 10. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Page read via $request->get() in get(). default: 1. minimum: 1. maximum: 10000.
search_in
Required
Optional; native body and guard rules still apply
Type
array
Details
Search In read via $request->get() in get(). default: ["post_content"].
order_by_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Order By Type read via $request->getSafe() in get().
disable_sticky
Required
Optional; native body and guard rules still apply
Type
string
Details
Disable Sticky read via $request->get() in get().
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-list-feeds --help fluent-wp-cli schema fc-list-feeds 

fc_get_feed

Returns a single post by numeric id; the id is resolved to a slug and then handled exactly as the by-slug endpoint.

Controller: FeedsController@getFeedById Route source: fluent-community/app/Http/Routes/api.php:53

Kind: Read. Native plugin/user permissions apply.

feed_id
Required
Yes
Type
integer
Details
Feed ID extracted from the URL path. minimum: 1.
context
Required
Optional; native body and guard rules still apply
Type
string
Details
Prose-documented delegated edit context, requiring native post edit access. enum: ["view", "edit"].
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-get-feed --help fluent-wp-cli schema fc-get-feed 

fc_create_feed

Creates a post, renders its Markdown, attaches media and topics, and returns the transformed post ready to prepend to the feed.

Controller: FeedsController@store Route source: fluent-community/app/Http/Routes/api.php:46 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

space
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
topic_ids
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
topic_ids[]
Required
Per item when supplied
Type
string
Details
Array item schema.
send_announcement_email
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
content_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
message
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. minLength: 1.
survey
Required
Optional; native body and guard rules still apply
Type
object
Details
Actual shared argument definition. required: [].
survey.options
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
survey.options[]
Required
Per item when supplied
Type
string
Details
Array item schema.
survey.end_date
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
survey.type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
title
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.
payload
Required
Optional; native body and guard rules still apply
Type
object
Details
Complete native JSON body; do not mix with body flags or payload_file. Arrays use repeated JSON object flags or a whole native array in a private file. additionalProperties: false. required: ["message"].
payload.space
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.topic_ids
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
payload.topic_ids[]
Required
Per item when supplied
Type
string
Details
Array item schema.
payload.send_announcement_email
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.content_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.message
Required
Yes
Type
string
Details
Actual shared argument definition. minLength: 1.
payload.survey
Required
Optional; native body and guard rules still apply
Type
object
Details
Actual shared argument definition. required: [].
payload.survey.options
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
payload.survey.options[]
Required
Per item when supplied
Type
string
Details
Array item schema.
payload.survey.end_date
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.survey.type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.title
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload_file
Required
Optional; native body and guard rules still apply
Type
string
Details
Absolute regular non-symlink JSON body file, at most 1 MiB. Cannot mix with payload/body flags. minLength: 1.

bash fluent-wp-cli fc-create-feed --help fluent-wp-cli schema fc-create-feed 

fc_update_feed

Replaces the body and metadata of an existing post, re-renders it, reconciles its media and topics, and records an edit history entry.

Controller: FeedsController@update Route source: fluent-community/app/Http/Routes/api.php:47 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

feed_id
Required
Yes
Type
integer
Details
Feed ID extracted from the URL path. minimum: 1.
new_space_id
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
move_to_profile
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
survey
Required
Optional; native body and guard rules still apply
Type
object
Details
Actual shared argument definition. required: [].
survey.options
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
survey.options[]
Required
Per item when supplied
Type
string
Details
Array item schema.
survey.end_date
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
survey.type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
status
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
send_announcement_email
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
content_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
media_images
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
topic_ids
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
topic_ids[]
Required
Per item when supplied
Type
string
Details
Array item schema.
message
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. minLength: 1.
title
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.
payload
Required
Optional; native body and guard rules still apply
Type
object
Details
Complete native JSON body; do not mix with body flags or payload_file. Arrays use repeated JSON object flags or a whole native array in a private file. additionalProperties: false. required: ["message"].
payload.new_space_id
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.move_to_profile
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.survey
Required
Optional; native body and guard rules still apply
Type
object
Details
Actual shared argument definition. required: [].
payload.survey.options
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
payload.survey.options[]
Required
Per item when supplied
Type
string
Details
Array item schema.
payload.survey.end_date
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.survey.type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.status
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.send_announcement_email
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.content_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.media_images
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.topic_ids
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
payload.topic_ids[]
Required
Per item when supplied
Type
string
Details
Array item schema.
payload.message
Required
Yes
Type
string
Details
Actual shared argument definition. minLength: 1.
payload.title
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload_file
Required
Optional; native body and guard rules still apply
Type
string
Details
Absolute regular non-symlink JSON body file, at most 1 MiB. Cannot mix with payload/body flags. minLength: 1.

bash fluent-wp-cli fc-update-feed --help fluent-wp-cli schema fc-update-feed 

fc_delete_feed

Deletes a post from the community.

Controller: FeedsController@deleteFeed Route source: fluent-community/app/Http/Routes/api.php:64 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

feed_id
Required
Yes
Type
integer
Details
Feed ID extracted from the URL path. minimum: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.

bash fluent-wp-cli fc-delete-feed --help fluent-wp-cli schema fc-delete-feed 

fc_list_comments

Returns every comment on a post in chronological order, with each author profile attached and the current user liked state flagged.

Controller: CommentsController@getComments Route source: fluent-community/app/Http/Routes/api.php:55

Kind: Read. Native plugin/user permissions apply.

feed_id
Required
Yes
Type
integer
Details
Feed ID extracted from the URL path. minimum: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-list-comments --help fluent-wp-cli schema fc-list-comments 

fc_create_comment

Posts a comment or a threaded reply on a feed item, renders its Markdown, links any attached media and bumps the post comment count.

Controller: CommentsController@store Route source: fluent-community/app/Http/Routes/api.php:56 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

feed_id
Required
Yes
Type
integer
Details
Feed ID extracted from the URL path. minimum: 1.
comment
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. minLength: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.
payload
Required
Optional; native body and guard rules still apply
Type
object
Details
Complete native JSON body; do not mix with body flags or payload_file. Arrays use repeated JSON object flags or a whole native array in a private file. additionalProperties: false. required: ["comment"].
payload.comment
Required
Yes
Type
string
Details
Actual shared argument definition. minLength: 1.
payload_file
Required
Optional; native body and guard rules still apply
Type
string
Details
Absolute regular non-symlink JSON body file, at most 1 MiB. Cannot mix with payload/body flags. minLength: 1.

bash fluent-wp-cli fc-create-comment --help fluent-wp-cli schema fc-create-comment 

fc_update_comment

Replaces the body of an existing comment, re-renders it, and reconciles its attached media with the submitted list.

Controller: CommentsController@update Route source: fluent-community/app/Http/Routes/api.php:57 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

feed_id
Required
Yes
Type
integer
Details
Feed ID extracted from the URL path. minimum: 1.
comment_id
Required
Yes
Type
integer
Details
Comment ID extracted from the URL path. minimum: 1.
comment
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. minLength: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.
payload
Required
Optional; native body and guard rules still apply
Type
object
Details
Complete native JSON body; do not mix with body flags or payload_file. Arrays use repeated JSON object flags or a whole native array in a private file. additionalProperties: false. required: ["comment"].
payload.comment
Required
Yes
Type
string
Details
Actual shared argument definition. minLength: 1.
payload_file
Required
Optional; native body and guard rules still apply
Type
string
Details
Absolute regular non-symlink JSON body file, at most 1 MiB. Cannot mix with payload/body flags. minLength: 1.

bash fluent-wp-cli fc-update-comment --help fluent-wp-cli schema fc-update-comment 

fc_delete_comment

Deletes a comment, recounts the comments on its post and hands any attached media to the media cleanup hook.

Controller: CommentsController@deleteComment Route source: fluent-community/app/Http/Routes/api.php:60 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

feed_id
Required
Yes
Type
integer
Details
Feed ID extracted from the URL path. minimum: 1.
comment_id
Required
Yes
Type
integer
Details
Comment ID extracted from the URL path. minimum: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.

bash fluent-wp-cli fc-delete-comment --help fluent-wp-cli schema fc-delete-comment 

fc_react_to_feed

Adds or removes the current user reaction on a post and returns the updated count : a second route onto the same behaviour as the reactions toggle endpoint.

Controller: CommentsController@addOrRemovePostReact Route source: fluent-community/app/Http/Routes/api.php:59 Toggle semantics are not idempotent; inspect state before deliberately repeating. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

feed_id
Required
Yes
Type
integer
Details
Feed ID extracted from the URL path. minimum: 1.
react_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
remove
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.
payload
Required
Optional; native body and guard rules still apply
Type
object
Details
Complete native JSON body; do not mix with body flags or payload_file. Arrays use repeated JSON object flags or a whole native array in a private file. additionalProperties: false.
payload.react_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload.remove
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
payload_file
Required
Optional; native body and guard rules still apply
Type
string
Details
Absolute regular non-symlink JSON body file, at most 1 MiB. Cannot mix with payload/body flags. minLength: 1.

bash fluent-wp-cli fc-react-to-feed --help fluent-wp-cli schema fc-react-to-feed 

fc_list_courses

Returns the paginated list of courses the current user may manage, each with its student count and its section and lesson totals.

Controller: CourseAdminController@getCourses Route source: fluent-community/Modules/Course/Http/course_api.php:22

Kind: Read. Native plugin/user permissions apply.

status
Required
Optional; native body and guard rules still apply
Type
string
Details
Status read via $request->getSafe() in getCourses().
sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort By read via $request->getSafe() in getCourses(). default: "latest".
topic_slug
Required
Optional; native body and guard rules still apply
Type
string
Details
Topic Slug read via $request->getSafe() in getCourses().
search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search read via $request->getSafe() in getCourses().
with_categories
Required
Optional; native body and guard rules still apply
Type
string
Details
With Categories read via $request->get() in getCourses().
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-list-courses --help fluent-wp-cli schema fc-list-courses 

fc_get_course

Returns one course in its editable form, with the lock screen configuration, the attached category ids and : when it has students : the completion count and average progress.

Controller: CourseAdminController@findCourse Route source: fluent-community/Modules/Course/Http/course_api.php:24

Kind: Read. Native plugin/user permissions apply.

course_id
Required
Yes
Type
integer
Details
Course ID extracted from the URL path. minimum: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-get-course --help fluent-wp-cli schema fc-get-course 

fc_course_students

Returns the paginated roster of a course, each student carrying their enrolment pivot and their completion percentage.

Controller: CourseAdminController@getCourseStudents Route source: fluent-community/Modules/Course/Http/course_api.php:29

Kind: Read. Native plugin/user permissions apply.

course_id
Required
Yes
Type
integer
Details
Course ID extracted from the URL path. minimum: 1.
search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search read via $request->getSafe() in getCourseStudents().
sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort By read via $request->getSafe() in getCourseStudents(). default: "created_at".
sort_dir
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort Dir read via $request->getSafe() in getCourseStudents().
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-course-students --help fluent-wp-cli schema fc-course-students 

fc_course_lessons

Returns the lessons of a course in display order, optionally narrowed to one section.

Controller: CourseAdminController@getLessons Route source: fluent-community/Modules/Course/Http/course_api.php:52

Kind: Read. Native plugin/user permissions apply.

course_id
Required
Yes
Type
integer
Details
Course ID extracted from the URL path. minimum: 1.
topic_id
Required
Optional; native body and guard rules still apply
Type
string
Details
Topic ID read via $request->get() in getLessons().
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-course-lessons --help fluent-wp-cli schema fc-course-lessons 

fc_space_members

Returns the paginated active membership of a space, each entry carrying the member profile and their role, plus the count of outstanding join requests.

Controller: SpaceController@getMembers Route source: fluent-community/app/Http/Routes/api.php:18

Kind: Read. Native plugin/user permissions apply.

slug
Required
Yes
Type
string
Details
SpaceSlug extracted from the URL path. minLength: 1. pattern: "^(?!\\.{1,2}$)[^/\\\\\\x00-\\x1f?#]+$".
search
Required
Optional; native body and guard rules still apply
Type
string
Details
Search read via $request->getSafe() in getMembers().
status
Required
Optional; native body and guard rules still apply
Type
string
Details
Status read via $request->get() in getMembers().
sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort By read via $request->getSafe() in getMembers(). default: "created_at".
sort_dir
Required
Optional; native body and guard rules still apply
Type
string
Details
Sort Dir read via $request->getSafe() in getMembers().
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-space-members --help fluent-wp-cli schema fc-space-members 

fc_get_profile

Returns one member public profile by username, with the navigation tabs the portal should render for that member.

Controller: ProfileController@getProfile Route source: fluent-community/app/Http/Routes/api.php:89

Kind: Read. Native plugin/user permissions apply.

username
Required
Yes
Type
string
Details
Username extracted from the URL path. minLength: 1. pattern: "^(?!\\.{1,2}$)[^/\\\\\\x00-\\x1f?#]+$".
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-get-profile --help fluent-wp-cli schema fc-get-profile 

fc_scheduled_posts

Returns the paginated list of posts one member has scheduled but not yet published, soonest first.

Controller: SchedulePostsController@getScheduledPosts Route source: fluent-community-pro/app/Http/Routes/api.php:112 Requires FluentCommunity Pro and its native scheduled-post permission. It is not a scheduling action.

Kind: Read. Native plugin/user permissions apply.

user_id
Required
Optional; native body and guard rules still apply
Type
string
Details
User ID read via $request->getSafe() in getScheduledPosts(). default: "$currentUserId".
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-scheduled-posts --help fluent-wp-cli schema fc-scheduled-posts 

fc_analytics_top_members

Returns ten member profiles ordered by lifetime points, drawn from those who joined within the requested range.

Controller: MembersReportsController@getTopMembers Route source: fluent-community-pro/app/Http/Routes/api.php:82 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

Kind: Read. Native plugin/user permissions apply.

account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-analytics-top-members --help fluent-wp-cli schema fc-analytics-top-members

fc_analytics_top_commenters

Returns the ten members who wrote the most comments within the requested range, each with their comment count.

Controller: MembersReportsController@topCommenters Route source: fluent-community-pro/app/Http/Routes/api.php:84 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

Kind: Read. Native plugin/user permissions apply.

account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-analytics-top-commenters --help fluent-wp-cli schema fc-analytics-top-commenters

fc_analytics_top_post_starters

Returns the ten members who published the most posts within the requested range, each with their post count.

Controller: MembersReportsController@topPostStarter Route source: fluent-community-pro/app/Http/Routes/api.php:83 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

Kind: Read. Native plugin/user permissions apply.

account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-analytics-top-post-starters --help fluent-wp-cli schema fc-analytics-top-post-starters

fc_analytics_member_activity

Returns a gap-filled time series of member signups across the requested range.

Controller: MembersReportsController@activity Route source: fluent-community-pro/app/Http/Routes/api.php:81 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

Kind: Read. Native plugin/user permissions apply.

account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli fc-analytics-member-activity --help fluent-wp-cli schema fc-analytics-member-activity

ff_list_forms

Read one Forms page with current native sorting and date filters. Requires fluentform_dashboard_access and applicable native form permissions. Not an all-forms snapshot.

Kind: Read. Native plugin/user permissions apply.

search
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
status
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
filter_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
date_range
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
date_range[]
Required
Per item when supplied
Type
string
Details
Array item schema.
sort_column
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. enum: ["ASC", "DESC"].
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Actual shared argument definition. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Actual shared argument definition. minimum: 1. maximum: 10000.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli ff-list-forms --help fluent-wp-cli schema ff-list-forms 

ff_get_form

Read one native form with formMeta; may include private integration/settings data. Requires fluentform_forms_manager for the selected form.

Kind: Read. Native plugin/user permissions apply.

form_id
Required
Yes
Type
integer
Details
Actual shared argument definition. minimum: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli ff-get-form --help fluent-wp-cli schema ff-get-form 

ff_form_fields

Read current native field definitions; no field edits. Requires fluentform_forms_manager for the selected form.

Kind: Read. Native plugin/user permissions apply.

form_id
Required
Yes
Type
integer
Details
Actual shared argument definition. minimum: 1.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli ff-form-fields --help fluent-wp-cli schema ff-form-fields 

ff_list_submissions

Read one native individual-entry page for an explicitly selected form. Corrects old GET /report/submissions. Requires fluentform_entries_viewer for that form. Entry bodies are private; no automatic detail call or mark-as-read action.

Kind: Read. Native plugin/user permissions apply.

form_id
Required
Yes
Type
integer
Details
Actual shared argument definition. minimum: 1.
per_page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Actual shared argument definition. minimum: 1. maximum: 100.
page
Required
Optional; native body and guard rules still apply
Type
integer
Details
Actual shared argument definition. minimum: 1. maximum: 10000.
search
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
entry_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
date_range
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition. minItems: 2. maxItems: 2.
date_range[]
Required
Per item when supplied
Type
string
Details
Array item schema.
payment_statuses
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
payment_statuses[]
Required
Per item when supplied
Type
string
Details
Array item schema.
sort_by
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. enum: ["ASC", "DESC"].
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli ff-list-submissions --help fluent-wp-cli schema ff-list-submissions 

ff_form_report

Read the native form report with explicit approval because ReportService::form invokes ReportHelper::maybeMigrateData. It may update stored reporting data. Requires native form-scoped fluentform_entries_viewer; hidden/refused in read-only mode. No automatic retries.

Kind: Confirmed operation. Native plugin/user permissions apply.

form_id
Required
Yes
Type
integer
Details
Actual shared argument definition. minimum: 1.
statuses
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
statuses[]
Required
Per item when supplied
Type
string
Details
Array item schema.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Must be true for the requested mutation or exclusive private output file.

bash fluent-wp-cli ff-form-report --help fluent-wp-cli schema ff-form-report 

ff_form_stats

Read native date-range form statistics. Requires form-scoped fluentform_entries_viewer when form_id is selected; all-forms permission otherwise. Native reports may change via site hooks and version-specific provider behavior. Not guaranteed lifetime revenue or all plugin statistics.

Kind: Read. Native plugin/user permissions apply.

form_id
Required
Optional; native body and guard rules still apply
Type
integer
Details
Actual shared argument definition. minimum: 1.
start_date
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
end_date
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
metric
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli ff-form-stats --help fluent-wp-cli schema ff-form-stats 

get_current_user

One authenticated WordPress current-user GET with view context; verifies one user read, not site ownership or all plugin permissions. Native private output is untrusted.

Kind: Read. Native plugin/user permissions apply.

context
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. enum: ["view", "embed"].
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private account profile label; not a tenant or provider account ID.

bash fluent-wp-cli get-current-user --help fluent-wp-cli schema get-current-user 

list_accounts

Local profile labels/default/credential source only; no site URL, username, password path, provider identity or network request.

Kind: Read. Local helper semantics apply.

No arguments
Required
Not required
Type
Local discovery
Details
No credential or provider request required.

bash fluent-wp-cli list-accounts --help fluent-wp-cli schema list-accounts 

get_operation_schema

Local method/path/query/body schema and pinned provenance for one selected native tool. No provider call or credentials.

Kind: Read. Local helper semantics apply.

operation
Required
Yes
Type
string
Details
Actual native tool name, including fc_update_feed and ff_list_submissions. enum: ["fcrm_dashboard_stats", "fcrm_list_contacts", "fcrm_get_contact", "fcrm_search_contacts", "fcrm_create_contact", "fcrm_update_contact", "fcrm_contact_notes", "fcrm_add_contact_note", "fcrm_list_tags", "fcrm_list_lists", "fcrm_list_campaigns", "fcrm_get_campaign", "fcrm_campaign_stats", "fcrm_list_sequences", "fcrm_list_automations", "fcrm_automation_report", "fcrm_contact_emails", "fc_list_spaces", "fc_get_space", "fc_list_feeds", "fc_get_feed", "fc_create_feed", "fc_update_feed", "fc_delete_feed", "fc_list_comments", "fc_create_comment", "fc_update_comment", "fc_delete_comment", "fc_react_to_feed", "fc_list_courses", "fc_get_course", "fc_course_students", "fc_course_lessons", "fc_space_members", "fc_get_profile", "fc_scheduled_posts", "fc_analytics_top_members", "fc_analytics_top_commenters", "fc_analytics_top_post_starters", "fc_analytics_member_activity", "ff_list_forms", "ff_get_form", "ff_form_fields", "ff_list_submissions", "ff_form_report", "ff_form_stats", "get_current_user"].

bash fluent-wp-cli get-operation-schema --help fluent-wp-cli schema get-operation-schema 

fc_analytics_overview

Retained legacy selector mapped to four fixed reviewed native Pro report routes. Not a whole-community analytics export; native report permissions apply.

Kind: Read. Local helper semantics apply.

account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private site profile label, not a verified site-owner identity.
type
Required
Optional; native body and guard rules still apply
Type
string
Details
One native report, default top-members. enum: ["top-members", "top-commenters", "top-post-starters", "activity"].

bash fluent-wp-cli fc-analytics-overview --help fluent-wp-cli schema fc-analytics-overview 

preview_site_batch

Local native validation/hash for 1–20 CRM/Community writes. Binds selected profile label/site/username, request order and packaged schemas. No password read/provider state check or remote approval token.

Kind: Read. Local helper semantics apply.

tasks
Required
Yes
Type
array
Details
One to twenty exact ordered native requests. Each read is one native response/page; no automatic pagination, URL following, polling or cross-site override. minItems: 1. maxItems: 20.
tasks[]
Required
Per item when supplied
Type
object
Details
Array item schema.
tasks[].tool
Required
Yes
Type
string
Details
Actual shared argument definition. enum: ["fcrm_create_contact", "fcrm_update_contact", "fcrm_add_contact_note", "fc_create_feed", "fc_update_feed", "fc_delete_feed", "fc_create_comment", "fc_update_comment", "fc_delete_comment", "fc_react_to_feed"].
tasks[].arguments
Required
Yes
Type
object
Details
Native arguments without account, confirm, payload_file or output_file; complete payload is allowed.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private site profile label, not a verified site-owner identity.

bash fluent-wp-cli preview-site-batch --help fluent-wp-cli schema preview-site-batch 

submit_site_batch

Confirmed 1–20 ordered CRM/Community writes. Validate every request and exact review hash before first request, stop on first failure with known receipts and unattempted indices; no retries/rollback/continuation.

Kind: Confirmed operation. Local helper semantics apply.

tasks
Required
Yes
Type
array
Details
One to twenty exact ordered native requests. Each read is one native response/page; no automatic pagination, URL following, polling or cross-site override. minItems: 1. maxItems: 20.
tasks[]
Required
Per item when supplied
Type
object
Details
Array item schema.
tasks[].tool
Required
Yes
Type
string
Details
Actual shared argument definition. enum: ["fcrm_create_contact", "fcrm_update_contact", "fcrm_add_contact_note", "fc_create_feed", "fc_update_feed", "fc_delete_feed", "fc_create_comment", "fc_update_comment", "fc_delete_comment", "fc_react_to_feed"].
tasks[].arguments
Required
Yes
Type
object
Details
Native arguments without account, confirm, payload_file or output_file; complete payload is allowed.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private site profile label, not a verified site-owner identity.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Explicit approval for this exact requested work or new private file.
review_sha256
Required
Yes
Type
string
Details
Exact preview_site_batch hash for unchanged tasks, site profile and schema. pattern: "^[a-f0-9]{64}$".

bash fluent-wp-cli submit-site-batch --help fluent-wp-cli schema submit-site-batch 

read_site_snapshot

Prevalidate 1–20 native reads for one exact private site profile; return at most5 MiB combined CRM/Community/Forms responses. No auto-pages, stateful report, browser cookies, uploads or atomic provider snapshot. Native records may contain private personal data.

Kind: Read. Local helper semantics apply.

tasks
Required
Yes
Type
array
Details
One to twenty exact ordered native requests. Each read is one native response/page; no automatic pagination, URL following, polling or cross-site override. minItems: 1. maxItems: 20.
tasks[]
Required
Per item when supplied
Type
object
Details
Array item schema.
tasks[].tool
Required
Yes
Type
string
Details
Actual shared argument definition. enum: ["fcrm_dashboard_stats", "fcrm_list_contacts", "fcrm_get_contact", "fcrm_search_contacts", "fcrm_contact_notes", "fcrm_list_tags", "fcrm_list_lists", "fcrm_list_campaigns", "fcrm_get_campaign", "fcrm_campaign_stats", "fcrm_list_sequences", "fcrm_list_automations", "fcrm_automation_report", "fcrm_contact_emails", "fc_list_spaces", "fc_get_space", "fc_list_feeds", "fc_get_feed", "fc_list_comments", "fc_list_courses", "fc_get_course", "fc_course_students", "fc_course_lessons", "fc_space_members", "fc_get_profile", "fc_scheduled_posts", "fc_analytics_top_members", "fc_analytics_top_commenters", "fc_analytics_top_post_starters", "fc_analytics_member_activity", "ff_list_forms", "ff_get_form", "ff_form_fields", "ff_list_submissions", "ff_form_stats", "get_current_user"].
tasks[].arguments
Required
Yes
Type
object
Details
Native arguments without account, confirm, payload_file or output_file; complete payload is allowed.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private site profile label, not a verified site-owner identity.

bash fluent-wp-cli read-site-snapshot --help fluent-wp-cli schema read-site-snapshot 

save_site_snapshot

Confirmed 1–20 prevalidated native reads delivered only to an exclusive new0600 JSON file. No record body echoed, overwrites, upload or all-pages guarantee. Failures remove only this helper’s newly created file and return indices without native records.

Kind: Confirmed operation. Local helper semantics apply.

tasks
Required
Yes
Type
array
Details
One to twenty exact ordered native requests. Each read is one native response/page; no automatic pagination, URL following, polling or cross-site override. minItems: 1. maxItems: 20.
tasks[]
Required
Per item when supplied
Type
object
Details
Array item schema.
tasks[].tool
Required
Yes
Type
string
Details
Actual shared argument definition. enum: ["fcrm_dashboard_stats", "fcrm_list_contacts", "fcrm_get_contact", "fcrm_search_contacts", "fcrm_contact_notes", "fcrm_list_tags", "fcrm_list_lists", "fcrm_list_campaigns", "fcrm_get_campaign", "fcrm_campaign_stats", "fcrm_list_sequences", "fcrm_list_automations", "fcrm_automation_report", "fcrm_contact_emails", "fc_list_spaces", "fc_get_space", "fc_list_feeds", "fc_get_feed", "fc_list_comments", "fc_list_courses", "fc_get_course", "fc_course_students", "fc_course_lessons", "fc_space_members", "fc_get_profile", "fc_scheduled_posts", "fc_analytics_top_members", "fc_analytics_top_commenters", "fc_analytics_top_post_starters", "fc_analytics_member_activity", "ff_list_forms", "ff_get_form", "ff_form_fields", "ff_list_submissions", "ff_form_stats", "get_current_user"].
tasks[].arguments
Required
Yes
Type
object
Details
Native arguments without account, confirm, payload_file or output_file; complete payload is allowed.
account
Required
Optional; native body and guard rules still apply
Type
string
Details
Exact configured private site profile label, not a verified site-owner identity.
confirm
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Explicit approval for this exact requested work or new private file.
output_file
Required
Yes
Type
string
Details
Absolute new file in an existing private directory; restrict Windows ACLs separately. minLength: 1.

bash fluent-wp-cli save-site-snapshot --help fluent-wp-cli schema save-site-snapshot 

Native request and source reference

All routes append to the selected trusted site root followed by /wp-json. Parameters retain native spelling and PHP array encoding. A body is required when its schema declares native required fields; payload/body flags are mutually exclusive.

Native fcrm_dashboard_stats

GET /fluent-crm/v2/reports/dashboard-stats

Retrieve overall dashboard statistics including active contacts count, campaigns count, emails sent, active automations, onboarding progress, quick links, recent contacts, recent campaigns, active automations list, and system recommendations.

Required capability: fcrm_view_dashboard

Enforced by `ReportPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

No path/query arguments
Location
None
Required
No
Schema
Native permissions and body/guard rules still apply.

Native fcrm_list_contacts

GET /fluent-crm/v2/subscribers

Retrieve a paginated list of contacts. Supports both simple filtering (by tags, lists, statuses) and advanced filtering with complex filter groups. Optionally includes custom field values.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

filter_type
Location
query
Required
No
Schema
{"type": "string", "default": "simple", "enum": ["simple", "advanced"], "description": "Type of filtering to apply."}
search
Location
query
Required
No
Schema
{"type": "string", "description": "Search contacts by name, email, or other searchable fields."}
sort_by
Location
query
Required
No
Schema
{"type": "string", "default": "id", "description": "Column to sort by."}
sort_type
Location
query
Required
No
Schema
{"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
has_commerce
Location
query
Required
No
Schema
{"type": "string", "description": "Filter by commerce integration availability."}
custom_fields
Location
query
Required
No
Schema
{"type": "string", "enum": ["true", "false"], "description": "Set to true to include custom field values in the response."}
tags[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "integer"}, "description": "Filter by tag IDs (simple filter mode only)."}
statuses[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string", "enum": ["subscribed", "pending", "unsubscribed", "bounced", "complained"]}, "description": "Filter by contact statuses (simple filter mode only)."}
sms_statuses[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string", "enum": ["sms_subscribed", "sms_unsubscribed", "sms_pending", "sms_bounced"]}, "description": "Filter by SMS statuses (simple filter mode only)."}
lists[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "integer"}, "description": "Filter by list IDs (simple filter mode only)."}
company_ids[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "integer"}, "description": "Filter by company IDs."}
advanced_filters
Location
query
Required
No
Schema
{"type": "string", "description": "JSON-encoded advanced filter groups (advanced filter mode only)."}
per_page
Location
query
Required
No
Schema
{"type": "integer", "default": 15, "description": "Number of contacts per page.", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "default": 1, "description": "Page number for pagination.", "minimum": 1, "maximum": 10000}

Native fcrm_get_contact

GET /fluent-crm/v2/subscribers/{id}

Retrieve a single contact by ID or email. Supports eager-loading related data like stats, custom values, custom field definitions, and commerce stats via the with[] parameter.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "The contact ID.", "minimum": 1}
get_by_email
Location
query
Required
No
Schema
{"type": "string", "format": "email", "description": "If set, looks up the contact by email address instead of the path id."}
with[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string", "enum": ["stats", "subscriber.custom_values", "custom_fields", "commerce_stat"]}, "description": "Relationships and extra data to include. Supported values: stats, subscriber.custom_values, custom_fields, commerce_stat."}

Native fcrm_search_contacts

GET /fluent-crm/v2/subscribers/search-contacts

Search contacts by name or email. Returns a lightweight object of contacts keyed by ID, suitable for dropdowns and autocomplete widgets. Optionally loads default contacts when no search term is provided.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

search
Location
query
Required
No
Schema
{"type": "string", "description": "Search term to match against contact name and email."}
limit
Location
query
Required
No
Schema
{"type": "integer", "default": 20, "description": "Maximum number of results to return.", "minimum": 1, "maximum": 100}
load_default
Location
query
Required
No
Schema
{"type": "string", "enum": ["true", "false", "1", "0", "yes"], "description": "If truthy and no search term is provided, returns the most recent contacts."}
values[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "integer"}, "description": "Array of contact IDs to always include in results (useful for pre-selected values)."}
offset
Location
query
Required
No
Schema
{"type": "integer", "default": 0, "description": "Rows to skip before the first result. Combine with limit to page through matches."}

Native fcrm_create_contact

POST /fluent-crm/v2/subscribers

Create a new contact. If __force_update is set to yes, it will update an existing contact with the same email instead of returning an error. Optionally sends a double opt-in email.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

No path/query arguments
Location
None
Required
No
Schema
Native permissions and body/guard rules still apply.

Native JSON body: required=true.

email
Required
Yes
Type
string
Details
Contact email address. Must be unique unless __force_update is yes. format: "email".
status
Required
Yes
Type
string
Details
Contact subscription status. enum: ["subscribed", "pending", "unsubscribed", "bounced", "complained"].
first_name
Required
Optional; native body and guard rules still apply
Type
string
Details
First name.
last_name
Required
Optional; native body and guard rules still apply
Type
string
Details
Last name.
prefix
Required
Optional; native body and guard rules still apply
Type
string
Details
Name prefix (e.g., Mr, Mrs, Ms).
contact_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Contact type. enum: ["lead", "customer"].
address_line_1
Required
Optional; native body and guard rules still apply
Type
string
Details
Address line 1.
address_line_2
Required
Optional; native body and guard rules still apply
Type
string
Details
Address line 2.
postal_code
Required
Optional; native body and guard rules still apply
Type
string
Details
Postal/zip code.
city
Required
Optional; native body and guard rules still apply
Type
string
Details
City.
state
Required
Optional; native body and guard rules still apply
Type
string
Details
State or province.
country
Required
Optional; native body and guard rules still apply
Type
string
Details
Two-letter country code.
phone
Required
Optional; native body and guard rules still apply
Type
string
Details
Phone number.
timezone
Required
Optional; native body and guard rules still apply
Type
string
Details
Timezone identifier.
date_of_birth
Required
Optional; native body and guard rules still apply
Type
string
Details
Date of birth (YYYY-MM-DD).
source
Required
Optional; native body and guard rules still apply
Type
string
Details
Contact source.
tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Tag IDs to assign.
tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
lists
Required
Optional; native body and guard rules still apply
Type
array
Details
List IDs to assign.
lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
double_optin
Required
Optional; native body and guard rules still apply
Type
boolean
Details
Send double opt-in confirmation email.
__force_update
Required
Optional; native body and guard rules still apply
Type
string
Details
If yes, updates existing contact with the same email instead of failing. enum: ["yes", "no"].

json { "type": "object", "required": [ "email", "status" ], "properties": { "email": { "type": "string", "format": "email", "description": "Contact email address. Must be unique unless __force_update is yes." }, "status": { "type": "string", "enum": [ "subscribed", "pending", "unsubscribed", "bounced", "complained" ], "description": "Contact subscription status." }, "first_name": { "type": "string", "description": "First name." }, "last_name": { "type": "string", "description": "Last name." }, "prefix": { "type": "string", "description": "Name prefix (e.g., Mr, Mrs, Ms)." }, "contact_type": { "type": "string", "enum": [ "lead", "customer" ], "description": "Contact type." }, "address_line_1": { "type": "string", "description": "Address line 1." }, "address_line_2": { "type": "string", "description": "Address line 2." }, "postal_code": { "type": "string", "description": "Postal/zip code." }, "city": { "type": "string", "description": "City." }, "state": { "type": "string", "description": "State or province." }, "country": { "type": "string", "description": "Two-letter country code." }, "phone": { "type": "string", "description": "Phone number." }, "timezone": { "type": "string", "description": "Timezone identifier." }, "date_of_birth": { "type": "string", "description": "Date of birth (YYYY-MM-DD)." }, "source": { "type": "string", "description": "Contact source." }, "tags": { "type": "array", "items": { "type": "integer" }, "description": "Tag IDs to assign." }, "lists": { "type": "array", "items": { "type": "integer" }, "description": "List IDs to assign." }, "double_optin": { "type": "boolean", "description": "Send double opt-in confirmation email." }, "__force_update": { "type": "string", "enum": [ "yes", "no" ], "description": "If yes, updates existing contact with the same email instead of failing." } }, "additionalProperties": false } 

Native fcrm_update_contact

PUT /fluent-crm/v2/subscribers/{id}

Update an existing contact's fields, custom values, tags, and lists. Supports attaching and detaching tags/lists in a single request. The subscriber object or individual fields can be passed in the request body.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "The contact ID.", "minimum": 1}

Native JSON body: required=true.

subscriber
Required
Yes
Type
object
Details
Contact data can be nested inside a subscriber object or passed at the top level. minProperties: 1. additionalProperties: false.
subscriber.email
Required
Optional; native body and guard rules still apply
Type
string
Details
Email address (must be unique). format: "email".
subscriber.first_name
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.last_name
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.prefix
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.status
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. enum: ["subscribed", "pending", "unsubscribed", "bounced", "complained"].
subscriber.contact_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition. enum: ["lead", "customer"].
subscriber.address_line_1
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.address_line_2
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.postal_code
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.city
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.state
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.country
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.phone
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.timezone
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.date_of_birth
Required
Optional; native body and guard rules still apply
Type
['string', 'null']
Details
Date of birth (YYYY-MM-DD). Send null or empty string to clear.
subscriber.source
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
subscriber.custom_values
Required
Optional; native body and guard rules still apply
Type
object
Details
Custom field key-value pairs to update. additionalProperties: {"type": "string"}.
subscriber.attach_tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Tag IDs to attach.
subscriber.attach_tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
subscriber.detach_tags
Required
Optional; native body and guard rules still apply
Type
array
Details
Tag IDs to detach.
subscriber.detach_tags[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
subscriber.attach_lists
Required
Optional; native body and guard rules still apply
Type
array
Details
List IDs to attach.
subscriber.attach_lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.
subscriber.detach_lists
Required
Optional; native body and guard rules still apply
Type
array
Details
List IDs to detach.
subscriber.detach_lists[]
Required
Per item when supplied
Type
integer
Details
Array item schema.

json { "type": "object", "properties": { "subscriber": { "type": "object", "description": "Contact data can be nested inside a subscriber object or passed at the top level.", "properties": { "email": { "type": "string", "format": "email", "description": "Email address (must be unique)." }, "first_name": { "type": "string" }, "last_name": { "type": "string" }, "prefix": { "type": "string" }, "status": { "type": "string", "enum": [ "subscribed", "pending", "unsubscribed", "bounced", "complained" ] }, "contact_type": { "type": "string", "enum": [ "lead", "customer" ] }, "address_line_1": { "type": "string" }, "address_line_2": { "type": "string" }, "postal_code": { "type": "string" }, "city": { "type": "string" }, "state": { "type": "string" }, "country": { "type": "string" }, "phone": { "type": "string" }, "timezone": { "type": "string" }, "date_of_birth": { "type": [ "string", "null" ], "description": "Date of birth (YYYY-MM-DD). Send null or empty string to clear." }, "source": { "type": "string" }, "custom_values": { "type": "object", "description": "Custom field key-value pairs to update.", "additionalProperties": { "type": "string" } }, "attach_tags": { "type": "array", "items": { "type": "integer" }, "description": "Tag IDs to attach." }, "detach_tags": { "type": "array", "items": { "type": "integer" }, "description": "Tag IDs to detach." }, "attach_lists": { "type": "array", "items": { "type": "integer" }, "description": "List IDs to attach." }, "detach_lists": { "type": "array", "items": { "type": "integer" }, "description": "List IDs to detach." } }, "minProperties": 1, "additionalProperties": false } }, "required": [ "subscriber" ], "additionalProperties": false } 

Native fcrm_contact_notes

GET /fluent-crm/v2/subscribers/{id}/notes

Retrieve a paginated list of notes for a contact. Supports searching notes by title. Each note includes the user who created it.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "The contact ID.", "minimum": 1}
search
Location
query
Required
No
Schema
{"type": "string", "description": "Search notes by title."}
per_page
Location
query
Required
No
Schema
{"type": "integer", "default": 15, "description": "Number of notes per page.", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "default": 1, "description": "Page number.", "minimum": 1, "maximum": 10000}
include_id
Location
query
Required
No
Schema
{"type": "integer", "description": "Id of a note that must appear in the response even when it falls outside the current page. When it is not already on the page it is returned separately as included_note, scoped to this contact."}

Native fcrm_add_contact_note

POST /fluent-crm/v2/subscribers/{id}/notes

Add a new note to a contact. The note description supports SmartCode/merge tags which are parsed before saving. If created_at is not provided, it defaults to the current WordPress time.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "The contact ID.", "minimum": 1}

Native JSON body: required=true.

note
Required
Yes
Type
object
Details
Actual shared argument definition. required: ["title", "description", "type"].
note.title
Required
Yes
Type
string
Details
Note title.
note.description
Required
Yes
Type
string
Details
Note content (HTML). Supports SmartCode/merge tags.
note.type
Required
Yes
Type
string
Details
Note type. enum: ["note", "call", "email", "meeting", "activity"].
note.created_at
Required
Optional; native body and guard rules still apply
Type
string
Details
Custom creation date. Defaults to current time if not provided. format: "date-time".

json { "type": "object", "required": [ "note" ], "properties": { "note": { "type": "object", "required": [ "title", "description", "type" ], "properties": { "title": { "type": "string", "description": "Note title." }, "description": { "type": "string", "description": "Note content (HTML). Supports SmartCode/merge tags." }, "type": { "type": "string", "enum": [ "note", "call", "email", "meeting", "activity" ], "description": "Note type." }, "created_at": { "type": "string", "format": "date-time", "description": "Custom creation date. Defaults to current time if not provided." } } } }, "additionalProperties": false } 

Native fcrm_list_tags

GET /fluent-crm/v2/tags

Retrieve a paginated list of tags. Optionally includes subscriber counts and a separate array of all tags for dropdown/select usage.

Required capability: fcrm_manage_contact_cats

Enforced by `TagPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

search
Location
query
Required
No
Schema
{"type": "string", "description": "Search tags by title, slug, or description."}
sort_by
Location
query
Required
No
Schema
{"type": "string", "default": "id", "enum": ["id", "title", "slug", "created_at"], "description": "Column to sort by."}
sort_order
Location
query
Required
No
Schema
{"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
per_page
Location
query
Required
No
Schema
{"type": "integer", "default": 15, "description": "Number of tags per page.", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "default": 1, "description": "Page number for pagination.", "minimum": 1, "maximum": 10000}
exclude_counts
Location
query
Required
No
Schema
{"type": "boolean", "description": "If set to any truthy value, subscriber counts will not be included for each tag."}
all_tags
Location
query
Required
No
Schema
{"type": "boolean", "description": "If set to any truthy value, includes a flat all_tags array with id, title, and slug of every tag (useful for dropdowns)."}

Native fcrm_list_lists

GET /fluent-crm/v2/lists

Retrieve a paginated list of contact lists. Optionally includes subscriber counts and a separate array of all lists for dropdown/select usage.

Required capability: fcrm_manage_contact_cats

Enforced by `ListPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

search
Location
query
Required
No
Schema
{"type": "string", "description": "Search lists by title, slug, or description."}
sort_by
Location
query
Required
No
Schema
{"type": "string", "default": "id", "enum": ["id", "title", "slug", "created_at"], "description": "Column to sort by."}
sort_order
Location
query
Required
No
Schema
{"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
per_page
Location
query
Required
No
Schema
{"type": "integer", "default": 15, "description": "Number of lists per page.", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "default": 1, "description": "Page number for pagination.", "minimum": 1, "maximum": 10000}
exclude_counts
Location
query
Required
No
Schema
{"type": "boolean", "description": "If set to any truthy value, totalCount and subscribersCount will not be included for each list."}
all_lists
Location
query
Required
No
Schema
{"type": "boolean", "description": "If set to any truthy value, includes a flat all_lists array with id, title, and slug of every list (useful for dropdowns)."}
with[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string"}, "description": "Extra data to include. subscribersCount adds per-list contact counts via one grouped pivot query."}

Native fcrm_list_campaigns

GET /fluent-crm/v2/campaigns

Retrieve a paginated list of email campaigns. Supports filtering by status, search term, labels, and sorting. Optionally includes campaign statistics.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by `CampaignPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

searchBy
Location
query
Required
No
Schema
{"type": "string", "description": "Search campaigns by title."}
statuses[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string", "enum": ["draft", "processing", "pending-scheduled", "scheduled", "working", "paused", "archived"]}, "description": "Filter by campaign statuses."}
sort_by
Location
query
Required
No
Schema
{"type": "string", "default": "created_at", "description": "Column to sort by."}
sort_type
Location
query
Required
No
Schema
{"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
with[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string", "enum": ["stats"]}, "description": "Include related data. Use stats to include campaign statistics and labels."}
labels[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "integer"}, "description": "Filter by label IDs."}
per_page
Location
query
Required
No
Schema
{"type": "integer", "default": 15, "description": "Number of results per page.", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "default": 1, "description": "Page number.", "minimum": 1, "maximum": 10000}

Native fcrm_get_campaign

GET /fluent-crm/v2/campaigns/{id}

Retrieve a single campaign by ID. Optionally include related data (template, subjects) via the with parameter. When viewCampaign is set, returns the campaign with its paginated emails. Also returns available email templates and the server's current time.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by `CampaignPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "The campaign ID.", "minimum": 1}
with[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string"}, "description": "Include related data (e.g., template, subjects)."}
viewCampaign
Location
query
Required
No
Schema
{"type": "string", "description": "If set, returns the campaign with paginated emails instead of the standard response."}

Native fcrm_campaign_stats

GET /fluent-crm/v2/campaigns/{id}/overview_stats

Get overview statistics for a campaign including sent count, email status breakdown, and open/click analytics. This is a lighter-weight alternative to the full campaign status endpoint, suitable for dashboard widgets or summary views.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by `CampaignPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "The campaign ID.", "minimum": 1}

Native fcrm_list_sequences

GET /fluent-crm/v2/sequences

Retrieve a paginated list of email sequences. Optionally include statistics (email count, subscriber count, revenue) for each sequence. Requires FluentCampaign Pro.

Required capability: fcrm_read_emails or fcrm_manage_emails : which one applies depends on the action being performed.

Enforced by `SequencePolicy::verifyRequest()`, the policy default for this route group.

Requires: FluentCampaign Pro. Without it the route does not exist.

Reviewed native source.

order
Location
query
Required
No
Schema
{"type": "string", "default": "desc", "enum": ["asc", "desc"], "description": "Sort direction."}
orderBy
Location
query
Required
No
Schema
{"type": "string", "default": "id", "description": "Column to sort by."}
search
Location
query
Required
No
Schema
{"type": "string", "description": "Search sequences by title."}
with[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string", "enum": ["stats"]}, "description": "Include additional data. Use stats to include email count, subscriber count, and revenue for each sequence."}
per_page
Location
query
Required
No
Schema
{"type": "integer", "default": 15, "description": "Number of sequences per page.", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "default": 1, "description": "Page number for pagination.", "minimum": 1, "maximum": 10000}

Native fcrm_list_automations

GET /fluent-crm/v2/funnels

Retrieve a paginated list of automation funnels. Supports sorting, searching by title, and filtering by label IDs. Optionally includes trigger definitions.

Required capability: fcrm_read_funnels or fcrm_write_funnels : which one applies depends on the action being performed.

Enforced by `FunnelPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

sort_by
Location
query
Required
No
Schema
{"type": "string", "default": "id", "description": "Column to sort by."}
sort_type
Location
query
Required
No
Schema
{"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
search
Location
query
Required
No
Schema
{"type": "string", "description": "Search funnels by title (partial match)."}
labels[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "integer"}, "description": "Filter funnels by label IDs."}
with[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string", "enum": ["triggers"]}, "description": "Include additional related data. Supported values: triggers."}
per_page
Location
query
Required
No
Schema
{"type": "integer", "default": 15, "description": "Number of funnels per page.", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "default": 1, "description": "Page number for pagination.", "minimum": 1, "maximum": 10000}
tags[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "integer"}, "description": "Only automations whose contacts carry these tag ids."}
lists[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "integer"}, "description": "Only automations whose contacts are on these list ids."}
statuses[]
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string"}, "description": "Filter automations by status, e.g. published or draft."}

Native fcrm_automation_report

GET /fluent-crm/v2/funnels/{id}/report

Retrieve statistical reporting data for a specific automation funnel. Returns aggregated stats generated by the Reporting service.

Required capability: fcrm_read_funnels or fcrm_write_funnels : which one applies depends on the action being performed.

Enforced by `FunnelPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "The funnel ID.", "minimum": 1}

Native fcrm_contact_emails

GET /fluent-crm/v2/subscribers/{id}/emails

Retrieve a paginated list of emails sent to a contact. Supports filtering by open/click status. Can also show FluentSMTP logs when the tab parameter is set to fluentsmtp.

Required capability: fcrm_read_contacts or fcrm_manage_contacts : which one applies depends on the action being performed.

Enforced by `SubscriberPolicy::verifyRequest()`, the policy default for this route group.

Reviewed native source.

id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "The contact ID.", "minimum": 1}
filter
Location
query
Required
No
Schema
{"type": "string", "enum": ["open", "click", "unopened"], "description": "Filter emails by engagement status."}
tab
Location
query
Required
No
Schema
{"type": "string", "default": "crm", "enum": ["crm", "fluentsmtp"], "description": "Email source tab. Use fluentsmtp to show FluentSMTP logs instead of CRM campaign emails."}
per_page
Location
query
Required
No
Schema
{"type": "integer", "default": 15, "description": "Number of emails per page.", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "default": 1, "description": "Page number.", "minimum": 1, "maximum": 10000}

Native fc_list_spaces

GET /fluent-community/v2/spaces/all-spaces

Returns the paginated list of spaces with each one formatted for display, including the current user permissions and membership within it.

Controller: SpaceController@getAllSpaces Route source: fluent-community/app/Http/Routes/api.php:34

Reviewed native source.

No path/query arguments
Location
None
Required
No
Schema
Native permissions and body/guard rules still apply.

Native fc_get_space

GET /fluent-community/v2/spaces/{spaceSlug}/by-slug

Returns one space with its settings, topics, the current user membership and the permissions they hold inside it.

Controller: SpaceController@getBySlug Route source: fluent-community/app/Http/Routes/api.php:10

Reviewed native source.

spaceSlug
Location
path
Required
Yes
Schema
{"type": "string", "description": "SpaceSlug extracted from the URL path.", "minLength": 1, "pattern": "^(?!\\.{1,2}$)[^/\\\\\\x00-\\x1f?#]+$"}

Native fc_list_feeds

GET /fluent-community/v2/feeds

Returns a page of posts the current user is allowed to read, transformed for display, with the pinned post of a space returned separately on the first page.

Controller: FeedsController@get Route source: fluent-community/app/Http/Routes/api.php:45

Reviewed native source.

space
Location
query
Required
No
Schema
{"type": "string", "description": "Space read via $request->get() in get()."}
user_id
Location
query
Required
No
Schema
{"type": "string", "description": "User ID read via $request->getSafe() in get()."}
topic_slug
Location
query
Required
No
Schema
{"type": "string", "description": "Topic Slug read via $request->getSafe() in get()."}
search
Location
query
Required
No
Schema
{"type": "string", "description": "Search read via $request->getSafe() in get()."}
status
Location
query
Required
No
Schema
{"type": "string", "description": "Status read via $request->getSafe() in get()."}
per_page
Location
query
Required
No
Schema
{"type": "integer", "default": 10, "description": "Per Page read via $request->get() in get().", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "default": 1, "description": "Page read via $request->get() in get().", "minimum": 1, "maximum": 10000}
search_in
Location
query
Required
No
Schema
{"type": "array", "default": ["post_content"], "description": "Search In read via $request->get() in get()."}
order_by_type
Location
query
Required
No
Schema
{"type": "string", "description": "Order By Type read via $request->getSafe() in get()."}
disable_sticky
Location
query
Required
No
Schema
{"type": "string", "description": "Disable Sticky read via $request->get() in get()."}

Native fc_get_feed

GET /fluent-community/v2/feeds/{feed_id}/by-id

Returns a single post by numeric id; the id is resolved to a slug and then handled exactly as the by-slug endpoint.

Controller: FeedsController@getFeedById Route source: fluent-community/app/Http/Routes/api.php:53

Reviewed native source.

feed_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}
context
Location
query
Required
No
Schema
{"type": "string", "enum": ["view", "edit"], "description": "Prose-documented delegated edit context, requiring native post edit access."}

Native fc_create_feed

POST /fluent-community/v2/feeds

Creates a post, renders its Markdown, attaches media and topics, and returns the transformed post ready to prepend to the feed.

Controller: FeedsController@store Route source: fluent-community/app/Http/Routes/api.php:46 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

No path/query arguments
Location
None
Required
No
Schema
Native permissions and body/guard rules still apply.

Native JSON body: required=true.

space
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
topic_ids
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
topic_ids[]
Required
Per item when supplied
Type
string
Details
Array item schema.
send_announcement_email
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
content_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
message
Required
Yes
Type
string
Details
Actual shared argument definition. minLength: 1.
survey
Required
Optional; native body and guard rules still apply
Type
object
Details
Actual shared argument definition. required: [].
survey.options
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
survey.options[]
Required
Per item when supplied
Type
string
Details
Array item schema.
survey.end_date
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
survey.type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
title
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.

json { "type": "object", "properties": { "space": { "type": "string" }, "topic_ids": { "type": "array", "items": { "type": "string" } }, "send_announcement_email": { "type": "string" }, "content_type": { "type": "string" }, "message": { "type": "string", "minLength": 1 }, "survey": { "type": "object", "properties": { "options": { "type": "array", "items": { "type": "string" } }, "end_date": { "type": "string" }, "type": { "type": "string" } }, "required": [] }, "title": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } 

Native fc_update_feed

POST /fluent-community/v2/feeds/{feed_id}

Replaces the body and metadata of an existing post, re-renders it, reconciles its media and topics, and records an edit history entry.

Controller: FeedsController@update Route source: fluent-community/app/Http/Routes/api.php:47 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

feed_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}

Native JSON body: required=true.

new_space_id
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
move_to_profile
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
survey
Required
Optional; native body and guard rules still apply
Type
object
Details
Actual shared argument definition. required: [].
survey.options
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
survey.options[]
Required
Per item when supplied
Type
string
Details
Array item schema.
survey.end_date
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
survey.type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
status
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
send_announcement_email
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
content_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
media_images
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
topic_ids
Required
Optional; native body and guard rules still apply
Type
array
Details
Actual shared argument definition.
topic_ids[]
Required
Per item when supplied
Type
string
Details
Array item schema.
message
Required
Yes
Type
string
Details
Actual shared argument definition. minLength: 1.
title
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.

json { "type": "object", "properties": { "new_space_id": { "type": "string" }, "move_to_profile": { "type": "string" }, "survey": { "type": "object", "properties": { "options": { "type": "array", "items": { "type": "string" } }, "end_date": { "type": "string" }, "type": { "type": "string" } }, "required": [] }, "status": { "type": "string" }, "send_announcement_email": { "type": "string" }, "content_type": { "type": "string" }, "media_images": { "type": "string" }, "topic_ids": { "type": "array", "items": { "type": "string" } }, "message": { "type": "string", "minLength": 1 }, "title": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } 

Native fc_delete_feed

DELETE /fluent-community/v2/feeds/{feed_id}

Deletes a post from the community.

Controller: FeedsController@deleteFeed Route source: fluent-community/app/Http/Routes/api.php:64 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

feed_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}

Native fc_list_comments

GET /fluent-community/v2/feeds/{feed_id}/comments

Returns every comment on a post in chronological order, with each author profile attached and the current user liked state flagged.

Controller: CommentsController@getComments Route source: fluent-community/app/Http/Routes/api.php:55

Reviewed native source.

feed_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}

Native fc_create_comment

POST /fluent-community/v2/feeds/{feed_id}/comments

Posts a comment or a threaded reply on a feed item, renders its Markdown, links any attached media and bumps the post comment count.

Controller: CommentsController@store Route source: fluent-community/app/Http/Routes/api.php:56 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

feed_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}

Native JSON body: required=true.

comment
Required
Yes
Type
string
Details
Actual shared argument definition. minLength: 1.

json { "type": "object", "properties": { "comment": { "type": "string", "minLength": 1 } }, "additionalProperties": false, "required": [ "comment" ] } 

Native fc_update_comment

POST /fluent-community/v2/feeds/{feed_id}/comments/{comment_id}

Replaces the body of an existing comment, re-renders it, and reconciles its attached media with the submitted list.

Controller: CommentsController@update Route source: fluent-community/app/Http/Routes/api.php:57 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

feed_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}
comment_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Comment ID extracted from the URL path.", "minimum": 1}

Native JSON body: required=true.

comment
Required
Yes
Type
string
Details
Actual shared argument definition. minLength: 1.

json { "type": "object", "properties": { "comment": { "type": "string", "minLength": 1 } }, "additionalProperties": false, "required": [ "comment" ] } 

Native fc_delete_comment

DELETE /fluent-community/v2/feeds/{feed_id}/comments/{comment_id}

Deletes a comment, recounts the comments on its post and hands any attached media to the media cleanup hook.

Controller: CommentsController@deleteComment Route source: fluent-community/app/Http/Routes/api.php:60 Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

feed_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}
comment_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Comment ID extracted from the URL path.", "minimum": 1}

Native fc_react_to_feed

POST /fluent-community/v2/feeds/{feed_id}/react

Adds or removes the current user reaction on a post and returns the updated count : a second route onto the same behaviour as the reactions toggle endpoint.

Controller: CommentsController@addOrRemovePostReact Route source: fluent-community/app/Http/Routes/api.php:59 Toggle semantics are not idempotent; inspect state before deliberately repeating. Explicit local confirmation is required; hooks, announcements and automations may affect other people. No retries.

Reviewed native source.

feed_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}

Native JSON body: required=false.

react_type
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.
remove
Required
Optional; native body and guard rules still apply
Type
string
Details
Actual shared argument definition.

json { "type": "object", "properties": { "react_type": { "type": "string" }, "remove": { "type": "string" } }, "additionalProperties": false } 

Native fc_list_courses

GET /fluent-community/v2/admin/courses

Returns the paginated list of courses the current user may manage, each with its student count and its section and lesson totals.

Controller: CourseAdminController@getCourses Route source: fluent-community/Modules/Course/Http/course_api.php:22

Reviewed native source.

status
Location
query
Required
No
Schema
{"type": "string", "description": "Status read via $request->getSafe() in getCourses()."}
sort_by
Location
query
Required
No
Schema
{"type": "string", "default": "latest", "description": "Sort By read via $request->getSafe() in getCourses()."}
topic_slug
Location
query
Required
No
Schema
{"type": "string", "description": "Topic Slug read via $request->getSafe() in getCourses()."}
search
Location
query
Required
No
Schema
{"type": "string", "description": "Search read via $request->getSafe() in getCourses()."}
with_categories
Location
query
Required
No
Schema
{"type": "string", "description": "With Categories read via $request->get() in getCourses()."}

Native fc_get_course

GET /fluent-community/v2/admin/courses/{course_id}

Returns one course in its editable form, with the lock screen configuration, the attached category ids and : when it has students : the completion count and average progress.

Controller: CourseAdminController@findCourse Route source: fluent-community/Modules/Course/Http/course_api.php:24

Reviewed native source.

course_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Course ID extracted from the URL path.", "minimum": 1}

Native fc_course_students

GET /fluent-community/v2/admin/courses/{course_id}/students

Returns the paginated roster of a course, each student carrying their enrolment pivot and their completion percentage.

Controller: CourseAdminController@getCourseStudents Route source: fluent-community/Modules/Course/Http/course_api.php:29

Reviewed native source.

course_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Course ID extracted from the URL path.", "minimum": 1}
search
Location
query
Required
No
Schema
{"type": "string", "description": "Search read via $request->getSafe() in getCourseStudents()."}
sort_by
Location
query
Required
No
Schema
{"type": "string", "default": "created_at", "description": "Sort By read via $request->getSafe() in getCourseStudents()."}
sort_dir
Location
query
Required
No
Schema
{"type": "string", "description": "Sort Dir read via $request->getSafe() in getCourseStudents()."}

Native fc_course_lessons

GET /fluent-community/v2/admin/courses/{course_id}/lessons

Returns the lessons of a course in display order, optionally narrowed to one section.

Controller: CourseAdminController@getLessons Route source: fluent-community/Modules/Course/Http/course_api.php:52

Reviewed native source.

course_id
Location
path
Required
Yes
Schema
{"type": "integer", "description": "Course ID extracted from the URL path.", "minimum": 1}
topic_id
Location
query
Required
No
Schema
{"type": "string", "description": "Topic ID read via $request->get() in getLessons()."}

Native fc_space_members

GET /fluent-community/v2/spaces/{spaceSlug}/members

Returns the paginated active membership of a space, each entry carrying the member profile and their role, plus the count of outstanding join requests.

Controller: SpaceController@getMembers Route source: fluent-community/app/Http/Routes/api.php:18

Reviewed native source.

spaceSlug
Location
path
Required
Yes
Schema
{"type": "string", "description": "SpaceSlug extracted from the URL path.", "minLength": 1, "pattern": "^(?!\\.{1,2}$)[^/\\\\\\x00-\\x1f?#]+$"}
search
Location
query
Required
No
Schema
{"type": "string", "description": "Search read via $request->getSafe() in getMembers()."}
status
Location
query
Required
No
Schema
{"type": "string", "description": "Status read via $request->get() in getMembers()."}
sort_by
Location
query
Required
No
Schema
{"type": "string", "default": "created_at", "description": "Sort By read via $request->getSafe() in getMembers()."}
sort_dir
Location
query
Required
No
Schema
{"type": "string", "description": "Sort Dir read via $request->getSafe() in getMembers()."}

Native fc_get_profile

GET /fluent-community/v2/profile/{username}

Returns one member public profile by username, with the navigation tabs the portal should render for that member.

Controller: ProfileController@getProfile Route source: fluent-community/app/Http/Routes/api.php:89

Reviewed native source.

username
Location
path
Required
Yes
Schema
{"type": "string", "description": "Username extracted from the URL path.", "minLength": 1, "pattern": "^(?!\\.{1,2}$)[^/\\\\\\x00-\\x1f?#]+$"}

Native fc_scheduled_posts

GET /fluent-community/v2/scheduled-posts

Returns the paginated list of posts one member has scheduled but not yet published, soonest first.

Controller: SchedulePostsController@getScheduledPosts Route source: fluent-community-pro/app/Http/Routes/api.php:112 Requires FluentCommunity Pro and its native scheduled-post permission. It is not a scheduling action.

Reviewed native source.

user_id
Location
query
Required
No
Schema
{"type": "string", "default": "$currentUserId", "description": "User ID read via $request->getSafe() in getScheduledPosts()."}

Native fc_analytics_top_members

GET /fluent-community/v2/analytics/members/top-members

Returns ten member profiles ordered by lifetime points, drawn from those who joined within the requested range.

Controller: MembersReportsController@getTopMembers Route source: fluent-community-pro/app/Http/Routes/api.php:82 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

Reviewed native source.

No path/query arguments
Location
None
Required
No
Schema
Native permissions and body/guard rules still apply.

Native fc_analytics_top_commenters

GET /fluent-community/v2/analytics/members/top-commenters

Returns the ten members who wrote the most comments within the requested range, each with their comment count.

Controller: MembersReportsController@topCommenters Route source: fluent-community-pro/app/Http/Routes/api.php:84 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

Reviewed native source.

No path/query arguments
Location
None
Required
No
Schema
Native permissions and body/guard rules still apply.

Native fc_analytics_top_post_starters

GET /fluent-community/v2/analytics/members/top-post-starters

Returns the ten members who published the most posts within the requested range, each with their post count.

Controller: MembersReportsController@topPostStarter Route source: fluent-community-pro/app/Http/Routes/api.php:83 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

Reviewed native source.

No path/query arguments
Location
None
Required
No
Schema
Native permissions and body/guard rules still apply.

Native fc_analytics_member_activity

GET /fluent-community/v2/analytics/members/activity

Returns a gap-filled time series of member signups across the requested range.

Controller: MembersReportsController@activity Route source: fluent-community-pro/app/Http/Routes/api.php:81 Requires FluentCommunity Pro native report permissions; the response is not a whole-site audience export.

Reviewed native source.

No path/query arguments
Location
None
Required
No
Schema
Native permissions and body/guard rules still apply.

Native ff_list_forms

GET /fluentform/v1/forms

Read one Forms page with current native sorting and date filters. Requires fluentform_dashboard_access and applicable native form permissions. Not an all-forms snapshot.

Reviewed native source.

search
Location
query
Required
No
Schema
{"type": "string"}
status
Location
query
Required
No
Schema
{"type": "string"}
filter_by
Location
query
Required
No
Schema
{"type": "string"}
date_range
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string"}}
sort_column
Location
query
Required
No
Schema
{"type": "string"}
sort_by
Location
query
Required
No
Schema
{"type": "string", "enum": ["ASC", "DESC"]}
per_page
Location
query
Required
No
Schema
{"type": "integer", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "minimum": 1, "maximum": 10000}

Native ff_get_form

GET /fluentform/v1/forms/{form_id}

Read one native form with formMeta; may include private integration/settings data. Requires fluentform_forms_manager for the selected form.

Reviewed native source.

form_id
Location
path
Required
Yes
Schema
{"type": "integer", "minimum": 1}

Native ff_form_fields

GET /fluentform/v1/forms/{form_id}/fields

Read current native field definitions; no field edits. Requires fluentform_forms_manager for the selected form.

Reviewed native source.

form_id
Location
path
Required
Yes
Schema
{"type": "integer", "minimum": 1}

Native ff_list_submissions

GET /fluentform/v1/submissions

Read one native individual-entry page for an explicitly selected form. Corrects old GET /report/submissions. Requires fluentform_entries_viewer for that form. Entry bodies are private; no automatic detail call or mark-as-read action.

Reviewed native source.

form_id
Location
query
Required
Yes
Schema
{"type": "integer", "minimum": 1}
per_page
Location
query
Required
No
Schema
{"type": "integer", "minimum": 1, "maximum": 100}
page
Location
query
Required
No
Schema
{"type": "integer", "minimum": 1, "maximum": 10000}
search
Location
query
Required
No
Schema
{"type": "string"}
entry_type
Location
query
Required
No
Schema
{"type": "string"}
date_range
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string"}, "minItems": 2, "maxItems": 2}
payment_statuses
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string"}}
sort_by
Location
query
Required
No
Schema
{"type": "string", "enum": ["ASC", "DESC"]}

Native ff_form_report

GET /fluentform/v1/report/forms/{form_id}

Read the native form report with explicit approval because ReportService::form invokes ReportHelper::maybeMigrateData. It may update stored reporting data. Requires native form-scoped fluentform_entries_viewer; hidden/refused in read-only mode. No automatic retries.

Reviewed native source.

form_id
Location
path
Required
Yes
Schema
{"type": "integer", "minimum": 1}
statuses
Location
query
Required
No
Schema
{"type": "array", "items": {"type": "string"}}

Native ff_form_stats

GET /fluentform/v1/report/form-stats

Read native date-range form statistics. Requires form-scoped fluentform_entries_viewer when form_id is selected; all-forms permission otherwise. Native reports may change via site hooks and version-specific provider behavior. Not guaranteed lifetime revenue or all plugin statistics.

Reviewed native source.

form_id
Location
query
Required
No
Schema
{"type": "integer", "minimum": 1}
start_date
Location
query
Required
No
Schema
{"type": "string"}
end_date
Location
query
Required
No
Schema
{"type": "string"}
metric
Location
query
Required
No
Schema
{"type": "string"}

Native get_current_user

GET /wp/v2/users/me

One authenticated WordPress current-user GET with view context; verifies one user read, not site ownership or all plugin permissions. Native private output is untrusted.

Reviewed native source.

context
Location
query
Required
No
Schema
{"type": "string", "enum": ["view", "embed"]}

Writing safely

All 13 mutations/stateful reports/private file operations require --confirm or confirm:true through the same house guard. FLUENT_WP_READ_ONLY=1 exposes only 41 reads and directly refuses hidden confirmed calls. FLUENT_WP_ALLOW_DESTRUCTIVE=0 independently refuses confirmed operations. --agent/--yes control formatting and never authorize.

Only the selected trusted HTTPS site and reviewed REST paths are allowed. No credentials in URLs, redirects, arbitrary endpoint requests, browser/session import, automatic retries or vendor code execution occurs. Local preview hashes do not replace native permissions, site-state review or human authorization. The audit log records static operation/guard decisions without request bodies; append failures are best effort, not guaranteed compliance logging.

CRM contacts and opt-ins, Community comments/reactions/announcements and stored report metadata can affect real users. Read-only applies to actual side effects, including the GET Forms report that may migrate metadata. No automatic delete, send, database maintenance or rollback is added after a user requests a narrower action.

Your data

The runtime sends Basic credentials only to your selected HTTPS site. Configured/cached passwords, Basic-encoded credentials, recognized secret-named fields and signed/token URLs are redacted from returned data and errors. Contacts, emails, names, addresses, course students, comments, form entries and ordinary URLs remain potentially private. Redaction does not remove all personal or business information.

Request and select only the necessary records. Treat WordPress content, form submissions, HTML, URLs and provider errors as untrusted data, never executable instructions or authorization. Snapshot files contain the requested private native records, even though the save receipt omits them. Keep files, parent directories and backups private, and decide retention deliberately. No telemetry, remote upload, cookie import, automatic .env loader or credential refresh is included.

Environment settings

FLUENT_WP_SITE_URL
Behavior
Trusted HTTPS site root, optional install subdirectory
Group
Credentials
FLUENT_WP_USER
Behavior
WordPress username; no colon/control characters
Group
Credentials
FLUENT_WP_APP_PASSWORD
Behavior
Private dedicated Application Password; never main login
Group
Credentials
FLUENT_WP_PASSWORD_FILE
Behavior
Absolute owner-private non-symlink password-only file, <=64 KiB
Group
Credentials
FLUENT_WP_ACCOUNTS
Behavior
Private unique named site_url/username/app_password or password_file profiles
Group
Credentials
FLUENT_WP_DEFAULT_ACCOUNT
Behavior
Exact selected private site label
Group
Credentials
FLUENT_WP_URL / FLUENT_WP_PASS
Behavior
Legacy aliases; conflicting canonical values refuse
Group
Compatibility
FLUENT_WP_READ_ONLY
Behavior
1/true hides and directly refuses 13 confirmed operations
Group
Safety
FLUENT_WP_ALLOW_DESTRUCTIVE
Behavior
0/false refuses all confirmed operations; default true
Group
Safety
FLUENT_WP_AUDIT_LOG
Behavior
Private best-effort JSONL guard log, no payloads
Group
Safety
FLUENT_WP_REQUEST_TIMEOUT_MS
Behavior
30000 default; integer100–300000; no automatic retry
Group
Tuning
FLUENT_WP_MIN_REQUEST_INTERVAL_MS
Behavior
250 default; integer0–10000; process spacing only
Group
Tuning

Official and community comparisons

Existing official MCPs and CLIs

FluentCRM, Fluent Forms, Fluent Boards, FluentCart and Fluent Support already document official MCP support. These are separate native product connections, not one documented universal server URL. Follow each product's current setup and use only the tools/permissions your installed version exposes. A dedicated official FluentCommunity MCP was not confirmed in the reviewed primary sources.

FluentCRM MCP and Fluent Forms MCP are existing choices. Current Forms free source registers 20 abilities; the launch article describes 20 free and 23 Pro, while three Pro teaser cards in free settings are not registered free abilities. Its preview guards already bind current state, issue single-use tokens expiring after 300 seconds and enforce idempotency/concurrency rules. Our local review hash is not that server-state protection.

wp fluent_crm already provides native server-side stats, email sending, commerce sync, automation simulation and license management. wp fluentform already provides plugin stats and license operations. They run in the site's WP-CLI environment. Our remote Node task CLI calls allowlisted REST routes from your selected local/client runtime; it is not the first Fluent CLI and does not replace WP-CLI's direct database/send/maintenance operations.

Pinned community implementation

The reviewed carlosrodera/fluent-mcp-servers implements 40 CRM and 30 Community tools. Its dynamic mode exposes search/describe/execute metadata tools per server, an existing approach to selected discovery. A stdio entry point named cli is not a standalone task-command interface. The examined native-write factory does not require our mandatory per-call confirmation; annotations alone do not enforce it. This source was inspected, not executed against a private account.

Counts describe different scopes and modes. The community root documentation includes other products; its broader total does not mean this package covers them. No runtime token percentage or general reliability advantage follows from source inspection.

Why build this companion

The useful addition is one remote task CLI/local MCP covering selected CRM, Community and Forms work, exact isolated site profiles, shared mandatory approval and direct read-only refusal, reviewed ordered cross-plugin changes and bounded private snapshots. Those behaviors are implemented and fixture-tested. Official product-native breadth, Forms server-state review tokens and community dynamic discovery retain their own advantages.

Remote task commands
This companion
54 shared commands/tools through actual MCP handlers
Existing alternatives
Official WP-CLI runs in WordPress; reviewed community entry points are stdio servers
Native route coverage
This companion
47 selected routes: 17 CRM, 23 Community, 6 Forms, 1 WordPress
Existing alternatives
Official/community coverage is product-specific; not all routes counted alike
Ordered changes
This companion
Local preview hash, explicit confirmation, stop on first failure
Existing alternatives
Official Forms has actual provider-state tokens and idempotency guards
Several sites
This companion
Independent URL/user/password per exact profile; no global fallback
Existing alternatives
Reviewed community product configs do not expose the same named-site profiles
Private snapshots
This companion
1–20 selected reads, exclusive new file, bounded response sizes
Existing alternatives
Not a complete backup, migration, atomic database snapshot or native CSV export
Context cost
This companion
Codex actual task/token measurement pending
Existing alternatives
Dynamic community discovery already exists; no percentage claimed

Versions and migration

ComponentCurrent reviewed version
Package/desktop manifest2.0.0
Node support22 or newer
Native API namespacesCRM v2; Community v2; Forms v1; WordPress v2
Forms source6.2.14 at pinned commit
MCP SDK1.32.0 locked
Schema validatorsAjv8.20.0; ajv-formats3.0.1 locked
Source provenanceFive pinned upstream repos, reviewed2026-10-03

All 43 legacy tool names remain in this major refresh. Keeping a name does not keep a broken method, argument or unsafe side effect. Inspect the actual schema before updating saved scripts.

Setup
2.0.0 correction
Canonical SITE_URL/APP_PASSWORD now match documentation; URL/PASS remain aliases
Caller action
Do not configure conflicting aliases; keep each site credential independent
Community feeds
2.0.0 correction
space/order_by_type replace space_id/sort_by; creation uses space/content_type/message
Caller action
Use a real native space selector, exact fields and explicit announcement choice
Feed editing
2.0.0 correction
Content edit uses POST with required message; PATCH is separate state/pin behavior
Caller action
Update the payload; no invented is_sticky action
Comments
2.0.0 correction
Native comment field and POST edits replace message/PATCH
Caller action
Use --comment and actual feed/comment IDs
Contact updates/notes
2.0.0 correction
Nested subscriber and note objects replace incorrect flat/misnamed bodies
Caller action
Read nested schemas and send a whole object or private payload file
Campaigns
2.0.0 correction
Native searchBy/statuses/with/labels; arrays serialize as PHP [] query entries
Caller action
Use actual camel-case and repeated array flags
Forms entries
2.0.0 correction
GET /submissions, required form_id, entry_type, ASC/DESC sort_by
Caller action
Do not use aggregate POST report route or ignored legacy status/favourite flags
Forms stats
2.0.0 correction
start_date/end_date/metric replace ignored period/group_by
Caller action
Supply both dates or neither
Forms report
2.0.0 correction
GET may migrate report metadata; now confirmed and excluded from read-only/snapshot reads
Caller action
Explicitly approve this stateful report; never use it as a setup probe
Community analytics
2.0.0 correction
Legacy selector maps four fixed native Pro member-report paths
Caller action
Use an allowed type; not arbitrary paths or whole-community analytics
Students/members
2.0.0 correction
Exact native search/sort fields; no invented page/per_page
Caller action
Inspect schema rather than assume every response supports pagination

The fresh public history excludes the private legacy repository and credentials. The original AGPL-3.0 license is preserved. Five upstream source commits, sanitized snapshots and route corrections are recorded in src/tools/provenance.json. sync:api --check validates the packaged snapshot; --latest reports source-head changes for human review and never overwrites released schemas automatically.

More tools for your site workflow

Connect only the services your requested site and audience work needs.

Fluent WordPress MCP Server & CLI FAQs

Official options, private WordPress authentication, native arguments, approved changes, snapshots and maintenance.

Selected native FluentCRM, FluentCommunity and Fluent Forms REST routes on the exact HTTPS WordPress site you configure.

It includes one WordPress current-user read and local profile/schema/batch/snapshot helpers.

Yes.

CRM, Forms, Boards, Cart and Support document separate official MCP integrations.

This companion offers a combined local task workflow for the reviewed subset; official product-specific features remain distinct.

Yes. wp fluent_crm and wp fluentform are official WP-CLI commands running in WordPress.

This package provides remote Node task commands and local stdio MCP.

It does not replace native email sending or maintenance commands.

It implements shared remote task commands, exact private site profiles, mandatory local approval, direct read-only refusal, reviewed ordered CRM/Community changes and bounded private snapshots.

These are specific implemented behaviors, not a claim of universal superiority.

Yes.

Codex can register the local stdio MCP or invoke fluent-wp-cli with SKILL.md and --agent.

Claude Code is an optional separate client.

The package targets Node22+ on macOS, Windows and Linux.

CI covers Node22/24 on each OS plus a desktop archive build.

Native GUI and provider acceptance require separate evidence.

The versioned .mcpb vendors production dependencies for compatible Claude Desktop custom extensions.

Configure the sensitive Application Password or private file plus site/user.

Manual bundle updates require installing the new release.

Create a dedicated WordPress Application Password for the intended least-privileged user.

Never use the main login password, a Bearer token or browser cookies.

Keep it in private settings or an owner-private file outside repositories.

Yes.

Each uniquely named profile contains its own site_url, username and password method. --account selects an exact label.

Missing/rejected credentials never fall back to another site or global password.

No. doctor checks local settings. doctor --network deliberately reads only the current WordPress user and reports its ID.

Plugin permissions, Pro eligibility, ownership and mutation outcomes are separate.

Requested writes are available with explicit --confirm or confirm:true. --agent/--yes never authorize.

READ_ONLY hides and directly refuses all thirteen confirmed operations, including the stateful Forms report and private snapshot save.

The pinned Forms service may migrate stored report metadata when ff_form_report is called.

The package classifies that side effect as confirmed and excludes the report from read-only and snapshot read helpers.

No.

Its hash binds exact site/profile/user, inputs/order/compiled requests and packaged schemas.

It is local input review, not provider ownership, a server-state lock or the official Forms single-use five-minute token.

Execution stops at the first failure and reports known results plus failed/unattempted indices.

There is no rollback, automatic retry or continuation.

Inspect native state before deliberately repeating unknown work.

No.

It contains one to twenty selected native responses/pages, at most5 MiB combined.

It does not automatically paginate or create an atomic database backup.

Stored private records remain sensitive.

No. save_site_snapshot exclusively creates a new absolute file with mode0600 and returns only path/bytes/SHA-256 metadata.

It removes only its own new file on failure.

Restrict Windows and parent-directory ACLs separately.

This subset reads CRM campaign/automation information and Community scheduled posts.

It does not invent campaign sending, scheduling, database maintenance or official MCP-only endpoints.

Some contact/feed changes can still trigger real messages.

Matched successful Codex MCP-versus-CLI tasks have not been measured for this release.

Publish actual reported usage, client/model/version, discovery strategy, equivalent outputs and latency before claiming savings.

Source counts or character estimates are insufficient.

The code is free under the preserved AGPL-3.0 license.

WordPress hosting, paid Fluent Pro features, email delivery and native account limits remain separate.

Read THIRD_PARTY_NOTICES.md for bundled dependency licenses.

Fresh npx @latest launches resolve the current npm release; reconnect running clients.

Global installs need npm update -g and desktop bundles need reinstalling.

Remove only the requested registration/package, revoke the dedicated Application Password separately and review retained private snapshots.

Navid Moazzez

AI business strategist & AI OS builder

Navid Moazzez helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life.

Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Learn more.

More MCP servers & CLIs

Related free tools

Free AI newsletter

The most actionable AI newsletter for founders

Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.

No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.

P.S. Sign up now to get free access to my ultimate AI tools guide for creators.

Loved by 10,000+ readers