https://app.statisfy.com/...). Two resolution styles are used,
so the exact value matters:
These are distinct from PostHog-backed feature flags (
useFeatureFlag), which gate
production rollouts by user / cohort / percentage. The flags on this page are manual URL
switches only.Quick reference
Flag details
&show_sync=true — Meeting CRM sync status
Append to a meeting activity URL to reveal a CRM sync-status indicator at the bottom of the
activity, so you can confirm whether a specific activity synced to the connected CRM.
- Where: meeting activity detail (
/book/[id]/.../activity/[activity_id]) - Value required:
=true
&salesforce_account_debug=true — Salesforce account debug
On an account’s Objects view, reveals controls to refresh field values directly from
Salesforce — both a bulk “refresh all fields” action and per-field refresh — and displays
the live Salesforce value alongside the Statisfy value so you can spot field-level
differences.
- Where: account detail → Objects (
/book/[id]/details) - Value required:
=true
?tab=delete — Delete any activity
An unlisted tab on the Activity page that lets an admin look up an activity by ID, preview
it, and permanently delete it.
- Where:
https://app.statisfy.com/activity?tab=delete - Gated by:
activity_reportpermission (admins only — the tab renders empty otherwise) - Guardrail: a deletion reason is mandatory (minimum 5 words / 20 characters) before the delete can be submitted
?tab=unsubscribed — Unsubscribed recipients
An unlisted tab on the Campaigns page that lists every recipient who has unsubscribed,
along with the timestamp. It has no visible tab trigger and is reachable only via the URL.
- Where:
https://app.statisfy.com/campaigns?tab=unsubscribed
/integrations/monitoring?tab=sync_issues — Records stuck on their way to the CRM
A Sync Issues tab on the Integration Monitoring page listing every record whose changes
have not reached the connected CRM, in one place. The per-record banner on an opportunity answers
“is this one stuck”; this page answers “what is stuck at all”, which nothing else could without
opening records one at a time.
- Where:
https://app.statisfy.com/integrations/monitoring?tab=sync_issues - Gated by: the
settingsmanagepermission. Rows carry raw CRM error bodies naming Salesforce field API names and validation rules, which is why it is permission-gated. - Visible tab: the monitoring page shows an Integrations tab and a Sync Issues tab only when bidirectional (upstream) sync is on for at least one of accounts, opportunities, people, or activities. Otherwise the page shows only the integration list.
- Old URL retired:
/integrations?tab=sync_issuesno longer opens Sync Issues. Use the monitoring URL above.
Entity sub-tabs
The page opens on Opportunities. Each sub-tab is its own&issueType= value, so a
deep link lands on the right one:
Reading a row
- ID links to the record itself, and shows a friendlier label where the id says nothing — a contact row shows the person’s email, with the uuid kept in the link.
- Last attempt is when the push was last tried, in UTC, newest first.
- Error is the CRM’s own words: the message, and the field it named where it named one. Expanding a row shows the CRM’s raw response with the HTTP headers stripped.
- Retry sync appears on Opportunities only. It pushes that one record immediately and reports what the CRM said. The other types have no single-record push to offer yet.
An empty table is the healthy answer. A record in sync has no row at all, so there is no green
“all good” list to read — absence is the signal. The CRM’s name comes from the record’s own
destination, so a HubSpot tenant reads HubSpot and a Jira-bound project task reads JIRA.
ERRORED vs FAILED
The cap is
UPSTREAM_SYNC_MAX_RETRIES (default 5). Rows written before the skip landed can
carry a true count above the cap; the UI clamps the display to “5 of 5” while the row keeps
the real number.
?sync_errors=1 — CRM sync status icon on account and person pages
Shows the sync status icon (and its Force sync dialog) on an account or person page for a
user whose role does not see it by default.
- Where:
/book/[id]?sync_errors=1and/people/[id]?sync_errors=1(use&sync_errors=1when the URL already has a?) - Shown without the flag to: the Admin and Member All Accounts roles
- Value required:
=1 - Backed by:
useShowSyncErrors(), which readsuseUrlFeatureFlag('sync_errors') - Not sticky: the icon goes away on the next page that does not carry the flag
?manage_customers=1 + ?skip_type_check=1 — Self-serve account merge
On Settings → Accounts, manage_customers=1 turns on the self-serve UI for merging
duplicate accounts. skip_type_check=1 additionally includes accounts that have no type set
in the merge-candidate list (untyped accounts are excluded server-side by default).
- Where:
https://app.statisfy.com/settings?tab=accounts&manage_customers=1&skip_type_check=1 - Sticky:
manage_customersis sticky for the browser session — once enabled it stays on across navigation until you pass?manage_customers=0 - See also: Merging duplicate accounts
?internal — Integration backfill & detailed monitoring
A presence flag (just ?internal, no value) that reveals operator-only tooling inside the
Integration admin without standing up server-side flags:
- Warehouse config (BigQuery, Snowflake, Redshift, Postgres): per-query backfill triggers
- JIRA config: per-project backfill controls
- Integration monitoring: the diagnostic view (log request-id chips, failure-investigation context)
?internal to the relevant Integration → Admin page (e.g. JIRA, BigQuery, Snowflake).
There is no separate Snowflake flag — Snowflake backfill and monitoring are covered by
?internal, the same as the other warehouse integrations.?health_frequency_update=1 — Health computation frequency
On Settings → Config, reveals a control that lets users change how frequently account
health is recomputed. This is an in-development flag and is hidden by default.
- Where:
https://app.statisfy.com/settings?tab=config&health_frequency_update=1 - Value required:
=1
?show_note=1 — Comment internal-note visibility
On an externally-shared project, reveals the comment-visibility controls: the
Reply / Internal-note tabs in the composer (project and task comments) plus the
per-comment visibility badge. Without the flag the composer falls back to a plain
single box and every comment is saved as internal — so the internal-note surface
stays hidden until the full shared-comments experience is fully rolled out.
- Where: project detail and task comments (
/projects/[id], and the/share/...project view) — only takes effect when the project’s Share externally toggle is on - Value required:
=1 - Backed by:
useUrlFeatureFlag('show_note')
/portals — Portals management page
A route that lists all portals (drafts + live, with any archived-but-live one badged
Archived), and lets you create a portal and manage publishable API keys. It has no
entry in the left navigation yet — the feature is not fully live, so the page is reachable
only by navigating to the URL directly.
- Where:
/portals(e.g.https://dev-app.statisfy.com/portals) - Sub-params:
?tab=api-keys— deep-links straight to the API-keys panel (same panel as/settings?tab=api-keys)?view=live— filters the list to live portals only (hides drafts)
- Related:
/portals/[id]for an individual portal
?ai_usage=1 — AI Usage & Credits page
Reveals the AI Usage row in the left navigation (under Settings) and unlocks the
/ai-usage route directly. There is no rollout infrastructure behind this — it’s a plain
URL switch, not a per-org enablement.
- Where: anywhere in the app, e.g.
https://app.statisfy.com/ai-usage?ai_usage=1 - Value required:
=1 - Backed by:
useUrlFeatureFlag('ai_usage') - Page content: see AI Usage & Credits for what the page shows once unlocked
?workbench=1 — Human Twin settings tab
Reveals the Human Twin tab in Settings (admin users only).
- Where:
https://app.statisfy.com/settings?tab=workbench-agent&workbench=1 - Value required:
=1 - Backed by:
useUrlFeatureFlag('workbench')
Third-party tools (MCP)
The Workbench can use connected third-party MCP tools (for example, Jira) when it prepares actions. An admin enables them under the Human Twin tab:- Turn on Enable third-party MCP tools for the workbench.
- Select which tools the workbench may use from each connected server.
- Optionally add an injected prompt that steers when and how it uses them (for example, “File a Jira ticket when a customer reports a hardware issue”).
Skills
The Skills tab under Settings → Human Twin sets which skills (ready-made workflows) the Human Twin can load. One list applies to every kind of Workbench run.- Open the Skills tab and click Add Skills.
- Pick skills from the catalog. To detach one, click remove on its card.
- Click Save. Cancel discards unsaved edits.
- Save replaces the whole list. Removing a card and saving detaches that skill.
- Unavailable skills stay visible. An attached skill that is later archived or turned off shows as an Unavailable card. Remove it and save to clean it up.
- Refused saves. Statisfy refuses the save and names the skills at fault if you add a skill your organization can’t use (“These skills can’t be attached: …”) or one that needs tools the Workbench can’t provide, such as the slide-building tools (“These skills need tools the workbench can’t provide …”). Only newly added skills are checked.
Previewing the Workbench for a user
Admins can see what the Workbench would prepare for a specific person and account — a dry run that reads their data. It’s useful for checking how the Workbench behaves for a teammate before they rely on it. From the Human Twin tab, click Playground (or go directly to/settings/workbench-agent/playground?workbench=1). On the preview panel:
- User — choose the person to run as. The preview uses that user’s book of business and permissions.
- Account — pick the account to focus on.
- Activity (optional) — leave it on Whole account (or pick one activity) to scan the whole account, or select a single activity (like one email thread) to scope the preview to just that.
- Click Run preview.
Workbench Preview is available to admins and creates, sends, or executes nothing
side-effecting — but read-only lookups (like a search or a memory read) may still execute,
so it isn’t a fully inert read of static data.