One open source package with 54 shared tasks for selected FluentCRM, FluentCommunity and Fluent Forms work on your intended private WordPress sites.
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
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 askingRead 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
- 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.
- 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.
- 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.
- 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.
- 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
- Download
fluent-wp-2.0.0.mcpbfrom GitHub Releases. - In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
- 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.
- 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:
| OS | Typical 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
| Symptom | Check and resolution |
|---|---|
| No binary/Node | Install Node22+, check npm global PATH and reopen terminal; npm.cmd can respect Windows policy |
| Configuration exit10 | Set each selected profile URL/user and one password method; no global fallback |
| Unsafe URL/refused redirect | Use the canonical trusted HTTPS root/install subdirectory, no wp-json/query/fragment/credentials |
| 401/403 | Check Application Password revocation, Basic header forwarding, native capabilities and security plugin policy |
| WordPress user read passes, Fluent fails | User identity does not prove plugin activation, route version, native access or Pro eligibility |
| 404/HTML response | Check installed plugins, exact site root and REST path; redirects/login HTML are not followed |
| HTTP200 but native failure | success:false, status:false or native code/data.status errors refuse; inspect error receipt |
| 429/timeout | Respect host guidance and inspect mutation state before deliberately repeating; no retry loop |
| Old feed/comment args | Use space/content_type/message and comment; POST content edits, no guessed PATCH |
| Wrong Forms entries | Use GET submissions and actual form_id/entry_type/sort_by; aggregate reports are different |
| Read-only report refusal | ff_form_report is stateful in current source; explicit requested approval is required |
| Review mismatch/partial batch | Preview unchanged site/tasks again; retain known receipts and do not replay successes |
| Existing snapshot file | Choose a new absolute file; no overwrite or cross-site append |
| GUI/remote runtime differs | Give 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.
| Flag | Behavior |
|---|---|
| --agent | Compact JSON/no prompts/color; never approval |
| --confirm | Explicit approval for exactly requested confirmed work |
| --account LABEL | Exact private site profile |
| --select a,b.c | Filter returned fields locally |
| --payload / --payload-file | Whole native body, exclusive with flat body flags/each other |
| --tasks JSON | Repeat one task object per flag |
| --review-sha256 HASH | Exact unchanged local preview hash |
| --output-file PATH | Exclusive new private snapshot file |
| Exit | Meaning |
|---|---|
| 0 | Native response/receipt returned; inspect status and downstream effects |
| 2 | Usage, schema or refused/unapproved operation |
| 3 | Not found |
| 4 | Authentication/permissions |
| 5 | API/network or unknown mutation outcome |
| 7 | Rate limited |
| 10 | Missing 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
trueto 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
limitto 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_updateisyes. 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_updateisyes. 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
subscriberobject 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
subscriberobject 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_tagsarray 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,
totalCountandsubscribersCountwill 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_listsarray 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.
subscribersCountadds 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
statsto 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
statsto 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.
publishedordraft.
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
fluentsmtpto 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.
- 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.
- 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.
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "simple", "enum": ["simple", "advanced"], "description": "Type of filtering to apply."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search contacts by name, email, or other searchable fields."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "id", "description": "Column to sort by."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Filter by commerce integration availability."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "enum": ["true", "false"], "description": "Set to
trueto include custom field values in the response."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "integer"}, "description": "Filter by tag IDs (simple filter mode only)."}
- 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)."}
- 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)."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "integer"}, "description": "Filter by list IDs (simple filter mode only)."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "integer"}, "description": "Filter by company IDs."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "JSON-encoded advanced filter groups (advanced filter mode only)."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 15, "description": "Number of contacts per page.", "minimum": 1, "maximum": 100}
- 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.
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "description": "The contact ID.", "minimum": 1}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "format": "email", "description": "If set, looks up the contact by email address instead of the path
id."}
- 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.
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search term to match against contact name and email."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 20, "description": "Maximum number of results to return.", "minimum": 1, "maximum": 100}
- 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."}
- 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)."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 0, "description": "Rows to skip before the first result. Combine with
limitto 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.
- 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_updateisyes. 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.
- 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
subscriberobject 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.
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "description": "The contact ID.", "minimum": 1}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search notes by title."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 15, "description": "Number of notes per page.", "minimum": 1, "maximum": 100}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 1, "description": "Page number.", "minimum": 1, "maximum": 10000}
- 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.
- 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.
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search tags by title, slug, or description."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "id", "enum": ["id", "title", "slug", "created_at"], "description": "Column to sort by."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 15, "description": "Number of tags per page.", "minimum": 1, "maximum": 100}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 1, "description": "Page number for pagination.", "minimum": 1, "maximum": 10000}
- Location
- query
- Required
- No
- Schema
- {"type": "boolean", "description": "If set to any truthy value, subscriber counts will not be included for each tag."}
- Location
- query
- Required
- No
- Schema
- {"type": "boolean", "description": "If set to any truthy value, includes a flat
all_tagsarray 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.
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search lists by title, slug, or description."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "id", "enum": ["id", "title", "slug", "created_at"], "description": "Column to sort by."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 15, "description": "Number of lists per page.", "minimum": 1, "maximum": 100}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 1, "description": "Page number for pagination.", "minimum": 1, "maximum": 10000}
- Location
- query
- Required
- No
- Schema
- {"type": "boolean", "description": "If set to any truthy value,
totalCountandsubscribersCountwill not be included for each list."}
- Location
- query
- Required
- No
- Schema
- {"type": "boolean", "description": "If set to any truthy value, includes a flat
all_listsarray with id, title, and slug of every list (useful for dropdowns)."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string"}, "description": "Extra data to include.
subscribersCountadds 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.
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search campaigns by title."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string", "enum": ["draft", "processing", "pending-scheduled", "scheduled", "working", "paused", "archived"]}, "description": "Filter by campaign statuses."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "created_at", "description": "Column to sort by."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string", "enum": ["stats"]}, "description": "Include related data. Use
statsto include campaign statistics and labels."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "integer"}, "description": "Filter by label IDs."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 15, "description": "Number of results per page.", "minimum": 1, "maximum": 100}
- 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.
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "description": "The campaign ID.", "minimum": 1}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string"}, "description": "Include related data (e.g.,
template,subjects)."}
- 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.
- 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.
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "desc", "enum": ["asc", "desc"], "description": "Sort direction."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "id", "description": "Column to sort by."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search sequences by title."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string", "enum": ["stats"]}, "description": "Include additional data. Use
statsto include email count, subscriber count, and revenue for each sequence."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 15, "description": "Number of sequences per page.", "minimum": 1, "maximum": 100}
- 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.
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "id", "description": "Column to sort by."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "DESC", "enum": ["ASC", "DESC"], "description": "Sort direction."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search funnels by title (partial match)."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "integer"}, "description": "Filter funnels by label IDs."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string", "enum": ["triggers"]}, "description": "Include additional related data. Supported values:
triggers."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 15, "description": "Number of funnels per page.", "minimum": 1, "maximum": 100}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 1, "description": "Page number for pagination.", "minimum": 1, "maximum": 10000}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "integer"}, "description": "Only automations whose contacts carry these tag ids."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "integer"}, "description": "Only automations whose contacts are on these list ids."}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string"}, "description": "Filter automations by status, e.g.
publishedordraft."}
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.
- 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.
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "description": "The contact ID.", "minimum": 1}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "enum": ["open", "click", "unopened"], "description": "Filter emails by engagement status."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "crm", "enum": ["crm", "fluentsmtp"], "description": "Email source tab. Use
fluentsmtpto show FluentSMTP logs instead of CRM campaign emails."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 15, "description": "Number of emails per page.", "minimum": 1, "maximum": 100}
- 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
- 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
- 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
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Space read via
$request->get()in get()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "User ID read via
$request->getSafe()in get()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Topic Slug read via
$request->getSafe()in get()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search read via
$request->getSafe()in get()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Status read via
$request->getSafe()in get()."}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 10, "description": "Per Page read via
$request->get()in get().", "minimum": 1, "maximum": 100}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "default": 1, "description": "Page read via
$request->get()in get().", "minimum": 1, "maximum": 10000}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "default": ["post_content"], "description": "Search In read via
$request->get()in get()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Order By Type read via
$request->getSafe()in get()."}
- 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
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}
- 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.
- 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.
- 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.
- 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
- 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.
- 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.
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}
- 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.
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "description": "Feed ID extracted from the URL path.", "minimum": 1}
- 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.
- 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
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Status read via
$request->getSafe()in getCourses()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "latest", "description": "Sort By read via
$request->getSafe()in getCourses()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Topic Slug read via
$request->getSafe()in getCourses()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search read via
$request->getSafe()in getCourses()."}
- 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
- 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
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "description": "Course ID extracted from the URL path.", "minimum": 1}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search read via
$request->getSafe()in getCourseStudents()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "created_at", "description": "Sort By read via
$request->getSafe()in getCourseStudents()."}
- 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
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "description": "Course ID extracted from the URL path.", "minimum": 1}
- 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
- Location
- path
- Required
- Yes
- Schema
- {"type": "string", "description": "SpaceSlug extracted from the URL path.", "minLength": 1, "pattern": "^(?!\\.{1,2}$)[^/\\\\\\x00-\\x1f?#]+$"}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Search read via
$request->getSafe()in getMembers()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "description": "Status read via
$request->get()in getMembers()."}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "default": "created_at", "description": "Sort By read via
$request->getSafe()in getMembers()."}
- 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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Location
- query
- Required
- No
- Schema
- {"type": "string"}
- Location
- query
- Required
- No
- Schema
- {"type": "string"}
- Location
- query
- Required
- No
- Schema
- {"type": "string"}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string"}}
- Location
- query
- Required
- No
- Schema
- {"type": "string"}
- Location
- query
- Required
- No
- Schema
- {"type": "string", "enum": ["ASC", "DESC"]}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "minimum": 1, "maximum": 100}
- 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.
- 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.
- 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.
- Location
- query
- Required
- Yes
- Schema
- {"type": "integer", "minimum": 1}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "minimum": 1, "maximum": 100}
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "minimum": 1, "maximum": 10000}
- Location
- query
- Required
- No
- Schema
- {"type": "string"}
- Location
- query
- Required
- No
- Schema
- {"type": "string"}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string"}, "minItems": 2, "maxItems": 2}
- Location
- query
- Required
- No
- Schema
- {"type": "array", "items": {"type": "string"}}
- 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.
- Location
- path
- Required
- Yes
- Schema
- {"type": "integer", "minimum": 1}
- 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.
- Location
- query
- Required
- No
- Schema
- {"type": "integer", "minimum": 1}
- Location
- query
- Required
- No
- Schema
- {"type": "string"}
- Location
- query
- Required
- No
- Schema
- {"type": "string"}
- 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.
- 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
- Behavior
- Trusted HTTPS site root, optional install subdirectory
- Group
- Credentials
- Behavior
- WordPress username; no colon/control characters
- Group
- Credentials
- Behavior
- Private dedicated Application Password; never main login
- Group
- Credentials
- Behavior
- Absolute owner-private non-symlink password-only file, <=64 KiB
- Group
- Credentials
- Behavior
- Private unique named site_url/username/app_password or password_file profiles
- Group
- Credentials
- Behavior
- Exact selected private site label
- Group
- Credentials
- Behavior
- Legacy aliases; conflicting canonical values refuse
- Group
- Compatibility
- Behavior
- 1/true hides and directly refuses 13 confirmed operations
- Group
- Safety
- Behavior
- 0/false refuses all confirmed operations; default true
- Group
- Safety
- Behavior
- Private best-effort JSONL guard log, no payloads
- Group
- Safety
- Behavior
- 30000 default; integer100–300000; no automatic retry
- Group
- Tuning
- 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.
- 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
- 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
- This companion
- Local preview hash, explicit confirmation, stop on first failure
- Existing alternatives
- Official Forms has actual provider-state tokens and idempotency guards
- 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
- 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
- This companion
- Codex actual task/token measurement pending
- Existing alternatives
- Dynamic community discovery already exists; no percentage claimed
Versions and migration
| Component | Current reviewed version |
|---|---|
| Package/desktop manifest | 2.0.0 |
| Node support | 22 or newer |
| Native API namespaces | CRM v2; Community v2; Forms v1; WordPress v2 |
| Forms source | 6.2.14 at pinned commit |
| MCP SDK | 1.32.0 locked |
| Schema validators | Ajv8.20.0; ajv-formats3.0.1 locked |
| Source provenance | Five 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.
- 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
- 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
- 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
- 2.0.0 correction
- Native comment field and POST edits replace message/PATCH
- Caller action
- Use --comment and actual feed/comment IDs
- 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
- 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
- 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
- 2.0.0 correction
- start_date/end_date/metric replace ignored period/group_by
- Caller action
- Supply both dates or neither
- 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
- 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
- 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.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 newsletterThe 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.













