Changelog
Perfex Connect release notes
Every version of Perfex Connect, newest first: what is new, improved and fixed, and what to check before you upgrade.
- Current version
- v1.2.1
- Released
- Releases
- 8
31 workflow recipes for n8n, Make and Zapier
1 new1 improved1 fixed- NewRecipes & Kits: 21 new recipes (31 in all: 15 n8n, 8 Make, 7 Zapier, 1 without middleware), each with the steps and your own API address filled in; the n8n ones are complete workflows to paste or download: - overdue invoices → a daily Slack list, or a reminder e-mail in your own words with the online invoice link - payment received → a Google Sheets ledger, a QuickBooks-ready sheet row (Make) or a QuickBooks Online sales receipt (Zapier) - new ticket → Microsoft Teams (n8n and Zapier) or Discord; customer replied on a ticket → Slack (Make) - estimate accepted → a project with starter tasks (n8n) or a project and a kick-off task (Zapier) - signed contracts → Slack (checked every 15 minutes, because Perfex raises no event when a customer signs) - overdue tasks → a morning digest in Slack; a daily KPI digest (new leads, overdue invoices, open tickets, payments of the day per currency) - Typeform, Google Forms and Facebook Lead Ads (Zapier) → new lead; Calendly booking → lead with a call reminder; new customer contact → Brevo - Telegram message → Perfex task through your own bot (n8n), only from the chats you list
- ImprovedThe Recipes page shows each recipe's trigger and what it does (trigger → actions)
- FixedFixed in the existing recipes: "New ticket → Trello card" used a field that ticket events do not send (now data.id); "New customer → Mailchimp" listens to contact.created, because customer.created comes before Perfex adds the primary contact; the Zapier recipes name the triggers as the Zapier kit shows them (e.g. "Lead created")
Upgrade notes
- Replace the module files and run Upgrade Database (migration 121 is an empty step; nothing in the database changes). The REST API, webhooks, MCP and the WordPress plugin behave as in 1.2.0
WordPress plugin: website forms, user sync, client portal sign-in
1 new4 improved1 fixed1 security- SecurityNew companion plugin "Perfex Connect for WordPress" 1.0.0 (PHP 7.4+, WordPress 6.0+), in the package as perfex-connect-for-wordpress-1.0.0.zip and downloadable from Connect › WordPress (Download Plugin): - Connection: the CRM address plus a one-time pairing code made in Connect (10 minutes, single use, exchanged for a key with the WordPress scopes) or a pasted API key; the key is stored AES-256-GCM encrypted with the site's WordPress salts and never shown again; Health tab (versions, clock, scopes, permissions, retry queue, WP-Cron) - Forms: lead, contact and ticket forms built from the Perfex lead / ticket fields and the custom fields a public form may show, as [
perfex_formid="…"] or the Perfex Form block; attachments under Perfex's own file rules (type checked from the content, no double extensions or scripts, size and count limits); consent checkbox (stored as a GDPR consent with the chosen purpose when GDPR lead consent is on); first-touch campaign capture (utm_*, gclid, fbclid, msclkid, landing page, referrer) into the lead; spam protection: honeypot, signed minimum-time token, limit per address, optional Cloudflare Turnstile or hCaptcha with your keys; works without JavaScript - Contact Form 7, WPForms and Gravity Forms: entries of mapped forms go to Perfex as leads, contact forms or tickets (hooks only when the plugin is active; Contact Form 7 uploads optional) - A retry queue keeps entries and user syncs (encrypted) when Perfex cannot be reached and sends them again by WP-Cron; failed ones stay visible on the Health tab with Retry - Users: one-direction sync, WordPress → Perfex (new and changed users create or update their contact, optional new customer) or Perfex → WordPress (users are linked; name changes in Perfex arrive by signed webhook) - Open Client Portal button (shortcode and block): WordPress asks Connect for a one-time sign-in link for the linked contact (60 seconds, single use, hash stored); no password is ever sent - Knowledge base (public articles, search, groups) and Documents (invoices / estimates of the linked customer, read-only, the contact's portal permission decides, drafts hidden as in the client area) shortcodes and blocks - Webhooks from Perfex: the plugin subscribes itself through the existing subscriptions API; deliveries are checked against the X-Pcx-Signature HMAC, a 5-minute window and a replay guard;do_actionpcfw_webhookfor developers - Translatable (text domain perfex-connect-for-wordpress, .pot included), uninstall.php removes everything the plugin stored in WordPress, nothing loaded from a CDN - ImprovedConnect › WordPress page: KPIs, connected sites (versions, last seen, acting staff, ⋯ Copy Address / Disconnect), form entries (form, channel, record link, page and campaign, refused entries with the reason, filters, paging), linked users (Confirm Link / Unlink, search, paging), settings, the pairing dialog with a countdown
- NewNew REST routes v1/wordpress/… (pair, hello, forms/schema, forms/submit, users/sync, users/{id}, sso, kb, documents) and scopes wordpress:read, wordpress:write, wordpress:sso; documented in the OpenAPI file
- ImprovedSecurity: pairing codes and sign-in tokens stored as SHA-256 only, single use (one conditional update), throttled per address and per CRM; a link made by matching an e-mail is "pending" and opens neither the portal nor documents until an administrator confirms it (or Trust WordPress E-Mails is switched on); a non-administrator can pair a site only for themself and cannot disconnect someone else's site; disconnecting a site (or revoking its key) stops its API calls, webhooks and open sign-in links at once; visitor text is stored as text in the lead description; a WordPress site key receives contact.* webhook events only for contacts linked to its own site
- ImprovedPortal sign-in, e-mail trust and the default lead source / ticket department / attachment size are settings on the WordPress page and in Connect › Settings (portal sign-in and e-mail trust are off by default)
- ImprovedNo booking button: Connect has no booking API yet
- FixedFixed: updating a contact through the API (PATCH/PUT contacts) no longer removes the contact's client portal permissions; they stay unless the request sets them
Upgrade notes
- Replace the module files and run Upgrade Database (migration 120 adds the tables
pcx_wp_sites,pcx_wp_pairing,pcx_wp_links,pcx_wp_ssoandpcx_wp_submissions; migrations 112–119 are empty steps so every earlier version upgrades in one go). Nothing existing changes; the REST API, webhooks and MCP behave as in 1.1.1
- SecurityNew companion plugin "Perfex Connect for WordPress" 1.0.0 (PHP 7.4+, WordPress 6.0+), in the package as perfex-connect-for-wordpress-1.0.0.zip and downloadable from Connect › WordPress (Download Plugin): - Connection: the CRM address plus a one-time pairing code made in Connect (10 minutes, single use, exchanged for a key with the WordPress scopes) or a pasted API key; the key is stored AES-256-GCM encrypted with the site's WordPress salts and never shown again; Health tab (versions, clock, scopes, permissions, retry queue, WP-Cron) - Forms: lead, contact and ticket forms built from the Perfex lead / ticket fields and the custom fields a public form may show, as [
Tool Style: a small tool list for MCP clients
1 new2 improved1 security- NewNew Tool Style per MCP token and per connected OAuth app: - Compact (recommended, the default for new tokens and new connections): five generic record tools
connect_search,connect_get,connect_create,connect_updateandconnect_deletewith a "resource" argument, plusconnect_describe(without a resource: the resources this connection may use; with one: its fields) and the task tools. The resource list of each tool holds only what the token's scopes, its tool allow-list, the delete settings, AI Access and the staff member's Perfex permissions allow. An administrator with every resource sees 9 tools (about 9K characters, ~2.3K model tokens) instead of 164 (about 197K characters, ~49K tokens) - Detailed: one tool per resource and action, exactly as in 1.1.0 - SecurityBoth styles behave the same: a compact call runs the per-resource tool it stands for, so scopes, permissions (view own included), AI Access, approvals, the delete switch, rate limits, the Audit page (which shows the concrete tool, e.g.
customers_update) and the untrusted-data envelope are unchanged. Per-resource tool names keep working on a Compact token - ImprovedThe token dialog and the OAuth consent page show both styles with the estimated size of their tool list (it follows the chosen scopes, allow-list and level); the token list and Connected Apps show the style, and a connected app can be switched (its current access token follows at once)
- ImprovedMCP resources and prompts are unchanged
Upgrade notes
- Existing tokens and connected apps stay Detailed, so clients that already know the per-resource tool names keep working. Switch a token to Compact on Connect › MCP Server (edit the token) or a connected app with Use Compact; the client then reloads its tool list
- Migration 111 adds a
tool_stylecolumn to the MCP token and OAuth grant tables; nothing is removed
- NewNew Tool Style per MCP token and per connected OAuth app: - Compact (recommended, the default for new tokens and new connections): five generic record tools
Safer MCP: scopes, approvals, OAuth and audit
1 new17 improved4 security4 breakingRead before upgradingChanges that affect existing MCP clients
- BreakingMCP tool results have a new shape. 1.0 returned the record data itself; 1.1 returns a structured envelope: {"perfex_connect": {"tool", "status", "trust": "untrusted_crm_data", "notice"}, "data": <what 1.0 returned>} in structuredContent and in the text block. Scripts or agents that read MCP results directly must read them under "data". The REST API is unchanged
- BreakingWrites ask for approval by default. Every MCP token (new and existing) has Ask Before Every Change switched on: an assistant's create or update becomes a request on Connect › Approvals instead of being written. Tokens of unattended automations that must write directly: edit the token on Connect › MCP Server and switch it off
- BreakingDelete tools are off by default. They are no longer offered until an administrator switches on Settings › MCP Server › Allow Delete Tools AND the token has its own Allow Deletes
- BreakingOAuth for MCP clients is new and off by default (Settings › OAuth for MCP Clients). Nothing changes for pasted tokens
Upgrade notes
- Upload the zip on Setup › Modules (or replace the folder) and open Setup › Modules once: Perfex offers the Upgrade Database step (migrations 104–110), which adds the new columns and tables. Nothing is removed. Upgrading straight from 1.0.1 or 1.0.2 works the same way
- Existing tokens keep their reach: read → read on every resource, write → read and write on every resource; then approval on and deletes off as above. Review each token's access on Connect › MCP Server
- Give the new permission Approve MCP Requests to the people who should decide requests (administrators always can)
- Clients that use the 1.0 two-step confirm (confirm=true) keep working for tokens with approval switched off
- Browser access (CORS) is new: web pages on other sites still cannot read API, MCP or OAuth answers unless you list their origin in Settings › Browser Access (CORS). Server-side clients are not affected
MCP tokens
- ImprovedAccess per resource: read or write on each resource (customers, leads, tickets, invoices, and the resources of other SellMyCode modules), or everything. The staff member's Perfex permissions, view own included, still apply on every call: a token never reaches more than its staff member could in Perfex
- ImprovedAsk before every change (on by default): an assistant's create, update or delete becomes a request in the new Approvals page; approvers get a Perfex notification; the assistant is told the request is pending and can check the decision. Approving runs the change at that moment, after checking again that the token is still valid, its scopes and the requester's permissions still cover it and the record still has the values the request saw (otherwise the request ends as Record Changed and nothing is written). Requests expire after 72 hours (setting)
- NewNew permission Approve MCP Requests; the person who asked may approve their own request (setting, on by default)
- ImprovedDelete tools are off for the whole site by default; a token also needs its own Allow Deletes
- ImprovedAllowed addresses (IPv4/IPv6, CIDR), its own calls per minute and per day, edit, and New Secret (rotate)
- ImprovedConnect a Client: ready-to-paste setup for Claude Desktop, Claude.ai & ChatGPT connectors, Cursor, VS Code, Claude Code and plain HTTP, with this site's address filled in (the token itself is shown once, when it is made)
- ImprovedExisting tokens keep their access (read → read everything, write → everything) and now ask before every change and have deletes off; change this per token on the MCP Server page
OAuth for MCP clients (off by default: Settings › OAuth for MCP Clients)
- SecurityClaude, ChatGPT and other connectors sign in with a staff account instead of a pasted token: authorization code with PKCE (S256 only), a consent page in Perfex where each person chooses read only or read and write, all or some resources, approval and deletes; short-lived access tokens, rotating refresh tokens (a reused refresh token or authorization code disconnects the app), revocation, Connected Apps list with Disconnect
- ImprovedSelf-registration of apps (RFC 7591) only with return addresses on an allow-list of hosts (claude.ai, chatgpt.com, localhost … by default); administrators can add clients by hand (public or with a secret)
- ImprovedDiscovery: server and resource metadata under /perfex_connect/oauth2/, announced by the MCP endpoint on 401
Audit
- SecurityNew Audit page: every REST call and every MCP, AI Staff and Anna tool call in one list — time, staff member, key or app, call, a short summary of the parameters (secrets masked), result and address; search, filters, CSV export and retention. Staff see only their own calls
MCP server
- ImprovedResources (read-only: the latest records and one record per resource) and prompts (customer overview, overdue invoices, ticket triage, lead pipeline, my tasks)
- SecurityTool results are a structured envelope that marks CRM text as untrusted data; hidden direction and zero-width characters are removed from record values
Browser access
- SecurityStrict CORS for the REST API, MCP and OAuth: only this site and the origins you list (never a wildcard)
AI Access and Anna bridge
- ImprovedSettings › AI Access: switch resources off for every AI channel (MCP, connected apps, AI Staff, Anna)
- ImprovedWhen the Anna AI module is active, Connect adds tools to it from its resource registry, including the data of other SellMyCode modules. Every call runs with the permissions of the staff member using Anna, writes show Anna's confirmation first, and Anna's own MCP endpoint gets none of these tools. Choose the tools in Settings › Anna Bridge
- ImprovedAnna receives at most six tools (search, get, create, update, delete, describe) whatever you tick: the resources you tick for an action become that tool's choices. The default selection went from 26 tools to 3, and ticking every resource stays far below OpenAI's limit of 128 tools per request
Perfex AI Staff
- ImprovedConnect now joins AI Staff as a few generic tools (search, get, create, update, describe; delete only while delete tools are allowed) with the record type as a choice, instead of four tools per resource: the tool definitions AI Staff sends drop from about 163,000 to about 6,000 characters. Each call still runs as the per-resource action it stands for, so AI Access switches, Perfex permissions, view own, approval cards and the Audit page are unchanged
- ImprovedAgents or AI Staff MCP tokens saved with the older names (
connect_customers_search…) keep working, limited to that resource - ImprovedThe standalone MCP server keeps its per-resource tools for outside clients
Other
- ImprovedTranslations of the new texts in all 9 languages
- ImprovedUpgrading from 1.0.1 or 1.0.2 directly to 1.1.0 works through Perfex's Upgrade Database step
License checks name the product
3 improvedLicense
- ImprovedEvery license call (activate, check, pause) now sends Connect's sellmycode.net item id, as sellmycode.net requires
- ImprovedA purchase code bought for another product, or an unknown one, only shows "This purchase code is not valid for Perfex Connect." It is never activated; the detailed reason is written to Perfex's application log for administrators
- ImprovedAn activation made by an older version with another product's purchase code is paused automatically and removed from this install; enter your Connect purchase code to switch Connect back on
License
6 improvedLicense
- ImprovedWhen the site moves to another domain (a new address, a staging or test copy), the license is never activated for the new domain on its own: not when the module is switched on again, not by the scheduled check, not when a page opens. Perfex Connect stays switched off until an administrator confirms: the License page and the admin banner say "This site now runs on <new domain>. Activate your license for this domain?" with an "Activate on <new domain>" button. When all activation slots are in use, the page shows sellmycode.net's hint and the Request a Transfer button
- ImprovedThe old domain is never paused from the new one (module deactivation and the Pause button only use a token of this domain); it keeps its slot until the author releases it
- ImprovedPaused, revoked or otherwise invalid licenses: besides Reactivate, "Use a different purchase code" opens a code field on the page. The stored code is replaced only when sellmycode.net confirms the new one; if it fails, the current code stays and the error is shown
- ImprovedBlocked licenses: when the author blocks the purchase code (License Blocked) or this domain for it (This Site Is Blocked for This License), Perfex Connect switches off on the next check and the License page and admin banner show sellmycode.net's hint with an Appeal / Contact the Author button; Reactivate is hidden, a different purchase code can still be used
- ImprovedThe license is checked every 6 hours instead of once a day, and also when an administrator or staff member opens a Connect page and the last check is more than 6 hours old. That check runs after the page is sent (or in the background), so pages never wait for it, and several pages opened at once make one check at most
- ImprovedNew texts in all 9 languages
License
1 new3 improvedLicense
- NewActivate Perfex Connect with your sellmycode.net purchase code on the new License page (Connect › License, also under Setup › Module Licenses): license type, domain, activations used and limit, update period, last check, and Pause to move the license to another site. Only administrators see the activation form; other staff are asked to contact their administrator. Test sites (localhost, *.test, *.local, private network addresses) need no license.
- ImprovedWithout a valid license (not activated, paused, revoked, a code for another product, or no confirmed answer within the grace period) Perfex Connect switches off and Perfex works as without the module: the REST API, the MCP server, inbound hooks, Facebook / Instagram Lead Ads and WooCommerce webhooks and OAuth returns answer HTTP 403 with {"success":false,"error":{"code":"license_inactive"}}; no events are recorded and the queue stops (webhook deliveries, automation runs, Lead Ads and WooCommerce sync). Admin pages answer "License Not Valid" and administrators see a banner. API keys, subscriptions, rules and queued jobs are kept and resume once the license is valid again.
- ImprovedDeactivating the module pauses this site's license (the activation stays bound to the domain) and activating it again resumes it; uninstalling pauses it and removes the stored purchase code (also with "Keep data on uninstall").
- ImprovedLicense page and dialogs in light and dark, in all 9 languages.
First release
32 newFirst release.
REST API
- NewVersion 1 at /perfex_connect/api/v1 for 39 resources: customers, contacts, leads (with statuses and sources), projects, milestones, tasks, timesheets, tickets (with statuses, priorities and services), departments, invoices, estimates, proposals, contracts (with types), expenses (with categories), payments, payment modes, credit notes, items (with groups), staff, custom field definitions, files and attachments, calendar events, notes, reminders, knowledge base articles and groups, currencies, taxes, countries, customer groups and a read-only list of every status.
- NewRelated records under their parent (customers/{id}/contacts, invoices, projects, tickets, notes, files …; projects/{id}/tasks, milestones, members, timesheets, files; tasks/{id}/comments, checklist, assignees, followers, timers) and actions (send, mark, convert) for invoices, estimates, proposals, contracts and credit notes.
- NewLists with page /
per_page, sort (several fields, "-" for descending), q full-text search, filter[field] and filter[field][op] (eq, ne, gt, gte, lt, lte, in, like, null),created_since/updated_since, fields= and include= (customer,custom_fields). One envelope for every answer, error codes with a field map on 422. - NewCreate, update (PATCH partial, PUT full) and delete through Perfex's own models, so activity log, notifications, hooks and custom fields behave as in the Perfex screens; totals of sales documents computed on the server.
- NewIdempotency-Key on writes (24 hours), ETag / If-Match on single records, bulk endpoint (up to 100 operations, optionally all or nothing), multipart uploads and signed, expiring download links for files.
- NewAPI keys: one staff member per key (Perfex permissions apply, View (Own) narrows lists), scopes per resource and read / write, limits per minute and per day, IP allow-lists (CIDR), expiry, rotation, revocation; stored hashed and shown once; Bearer header only, constant-time checks, failed sign-ins throttled per address.
- NewOpenAPI 3.1 document generated from the live resources, built-in interactive reference with search, parameters, examples in curl, PHP, JavaScript and Python and "Try it" with one of your keys (the key never reaches the browser), Postman 2.1 collection.
- NewRequest log with filters, the redacted request and response, timing and the key; replay a call as the same key.
- NewCompatibility helper for the third-party "API" module: both run side by side (separate addresses and tables); a page lists its users and webhooks, maps its endpoints and event names, and creates matching Connect keys.
Webhooks and events
- New121 event types: created, updated, deleted and status changed for every resource, plus invoice sent / paid / cancelled, estimate and proposal accepted / declined / sent, lead converted / lost / junk, ticket replied, task assigned / commented, staff and contact sign-ins, failed staff sign-ins and your own custom events. Changes made by Perfex screens, the client portal, other modules, the API, rules and syncs are all seen; resources without Perfex hooks are watched on cron.
- NewEvent payload = the record's API representation, with the changed fields on updates; event log with filters, a payload viewer and replay to webhooks.
- NewOutgoing webhooks: events or patterns (invoice.*, *), extra headers, conditions; HMAC-SHA256 signature with a timestamp (X-Pcx-Signature), delivery id and attempt headers; 8 attempts with backoff from 1 minute to 6 hours, then the delivery gives up; an endpoint that keeps failing pauses itself; delivery log with request and response, redeliver, test send, secret rotation.
- NewSubscription API for Zapier, Make, n8n and your own code: subscribe / unsubscribe, the event catalogue and sample payloads (instant triggers, REST hooks).
- NewInbound catch-hooks: a private address per hook that creates, updates or upserts a record of any resource (leads, customers, contacts, tasks, tickets …) from JSON or form posts; token or HMAC authentication; field mapping with paths, templates and defaults; duplicate protection; dry run; log with the redacted payload; optional custom event.
Automation rules
- New"When <event> [if conditions] then <actions>" with all / any condition groups and 17 operators, or on a schedule.
- NewActions: create or update any record, assign, change status, add a note, add a task, notify staff, send an e-mail through Perfex, send an SMS through Perfex's SMS gateway, call a webhook, emit a custom event, wait (delay), stop.
- NewTemplates with {{fields}} and filters; dry run on a sample event; run log with a step-by-step trace; 11 ready-made rules. Rules act with the rights of the staff member who saved them; chains between rules are opt-in and limited.
Integrations
- NewZapier, Make and n8n: REST hooks, step-by-step guides, 10 ready-made recipes, an n8n community node package and a Zapier CLI app skeleton generated for your installation (with every resource and event).
- NewFacebook and Instagram Lead Ads through your own Meta app: OAuth, page and form selection, Lead Ads webhooks with signature check, backfill of past leads, mapping of questions to lead fields and custom fields, defaults (status, source, assignee, tags), duplicate handling by e-mail and / or phone, token refresh and a missed-lead check.
- NewWooCommerce, any number of stores: connection test, webhooks registered for you, customers and products both ways, orders to invoices with a status map and payments, refunds to credit notes, guest orders, tax and currency checks, conflict rule (newest, WooCommerce or CRM wins), scheduled reconciliation, full sync, sync log and record map.
MCP server and AI
- NewModel Context Protocol server (Streamable HTTP, JSON-RPC) with personal tokens: search, get, create, update and delete tools for every resource plus overview, describe and recent-events tools; read-only or read-write tokens, tool allow-lists, expiry, rate limits; writes answer a preview until confirmed; call log.
- NewWith Perfex AI Staff active, the same tools are offered to AI Staff (writes go through its approval cards) instead of a second server.
Our other modules
- NewPerfex Brain Pro: 9 widgets (API usage, requests by key, errors, webhook health, rule runs, sync status, events, queue, MCP calls).
- NewPerfex Sentinel: key and token use, failed sign-ins and bursts, settings, safe mode and imports in the audit log.
Control
- NewSafe mode: one switch holds every outgoing webhook, rule call and sync until it is switched off; an emergency file does the same without signing in.
- NewHealth page with checks for cron, queue, keys, webhooks, integrations, storage and the server, and repair actions.
- NewExport / import of API keys (new secrets are issued on import), rules, webhooks, inbound hooks, integrations and settings in one file — secrets are never exported — with a dry run.
- NewOutgoing requests only to public HTTPS addresses, DNS pinned, no redirects, size and time limits.
- NewRetention for the request log, deliveries, events, runs and sync logs; keep or remove data on uninstall.
- NewPermissions per area (view, keys, webhooks, automations, integrations, MCP, settings).
- NewSame look as our other modules: Plus Jakarta Sans, light and dark in step with them, in-page dialogs, phone layouts.
- NewEnglish, Spanish, Portuguese (Brazil), French, German, Italian, Dutch, Turkish and Russian.