Troubleshooting clients and portals
The refusals, missing buttons and surprises people actually hit when setting up client portals — grouped by where they happen, with the fix for each.
Most portal problems are one of six things: the invite, a creation refusal, a visibility surprise, a blocked approval or request, billing being confused with access, or a storefront that shows nothing. Find your symptom below.
Invite problems
| Symptom | Cause | Fix |
|---|---|---|
| The client never received their invite | Delivery failed, or the invite went out from the platform address and was filtered | Use Resend Invite on Overview → Portal setup, and verify your sending domain under Settings → Email identity |
| Only Email is offered as a delivery method | Text and Email + text channels only render where your workspace's native app host is armed | Send by email. This is expected in most workspaces |
| There is no QR or mobile invite link | The same native app requirement | Use the emailed link |
| "Enter a phone number before sending a text invite" | A text channel is selected with no number | Enter the SMS number, or switch back to Email |
| The client set a password but the seat still reads Invite sent | A seat only becomes Active once that person sets their own password | Have that person open their own invite, not the primary login's |
Verify your sending domain before the first real client
The invite is the first thing a client sees. Until you verify your own domain under SettingsEmail identity, it arrives from a shared platform address and spam filters treat it accordingly.
Portal creation refusals
| Symptom | Cause | Fix |
|---|---|---|
| "Add a client email before creating portal access" | The client record has no email, and the email is the portal login | Edit the client, add the email, reopen Create portal |
| "This client already has an unassigned portal. Link the next portal to a project instead." | A client may hold only one account-level portal with no project | Choose the existing-project mode under Portal target and pick the website, or manage the portal that already exists |
| Choose pack and Create pack are greyed out | Packs are applied as part of the invite, and no delivery method is selected | Tick Send onboarding invite now, pick a channel, then attach the pack |
| Create portal is missing from the row kebab | The client already has a portal, or you lack Client Portals (edit) | Open the client to check, or ask an owner for the permission |
Sections and visibility surprises
| Symptom | Cause | Fix |
|---|---|---|
| Section toggles reset after you hand-edited them | You clicked a different Portal kind pill, which rewrites every toggle from that kind's preset | Pick the kind first, then hand-adjust the checkboxes, then Save changes |
| You turned a section off but the client still gets emails or new files about it | Section flags hide the surface, not the producers behind it | Turn the matching category off under Settings → Access as well |
| Active SEO program is greyed out with a tooltip about enrollment | The website is not enrolled in the SEO Command Center, or the portal has no project of its own | Enrol the website in the SEO Command Center, then return. Use Retry if the check errored |
| A service shows on one of the client's websites but not another | Entitlements live on a portal. A website with no portal of its own inherits the client's first portal's services | From Client visibility, create a portal for that website so it can hold its own services |
| A recent change is not in the client's portal | Add-on entitlement reads are not realtime | Wait about 15 seconds, or have the client reload |
| The Access and Sections tabs are missing entirely | Both are owner-only | Ask a workspace owner to make the change |
Approval and request blockers
| Symptom | Cause | Fix |
|---|---|---|
| Request Approval stays disabled | "This portal has no linked project. Approvals are project-scoped — link a project to this portal first." | Link a project to the portal, then create the approval |
| You cannot set a request to Cancelled | Cancellation is a client-side action only | Use Rejected, or archive the request from the inbox |
| A red Unread client conversation marker will not clear | Read markers are per person — a teammate opening it does not clear yours | Open the request and read the thread yourself |
| An approval status change did not save | The detail page requires Save status | Set the status and press Save status |
Discovery and onboarding
| Symptom | Cause | Fix |
|---|---|---|
| Discovery still shows "not started" after the client filled the form | Discovery is stamped on both the portal and the project row, and different surfaces prefer different rows | Use Mark discovery complete under Settings → Portal lifecycle — it writes both |
| The client sees "Discovery interview unavailable" | No pack with a discovery form is attached to that portal | Attach a pack with a discovery form, or accept that this portal has no questionnaire |
| A multi-project client cannot find the right questionnaire | The Discovery Interview page is per project | They pick the project at the top of the page |
| The onboarding pack never arrived with the portal | A pack is applied as part of the invite, so it fires only when a delivery method was on at portal creation | Send the discovery form and client tasks yourself this time, and tick Send onboarding invite now before attaching a pack on the next portal |
Billing versus access
| Symptom | Cause | Fix |
|---|---|---|
| Cancelling an add-on did not stop the Stripe charge | Removing portal access and cancelling a subscription are two separate actions | Cancel the recurring charge through the client's billing door, then remove the access |
| The Billing tab is missing | You are inside the iOS admin shell, or you lack Billing (view) | Use the web admin, or ask an owner for the permission |
| Consolidate billing does not appear | It only shows when a client has two or more live subscriptions that are not already cancelling, and it is web only | Nothing to fix if the client has one subscription |
Access and money are separate everywhere in Zyan
Turning a service off, deactivating a portal and deleting a portal all remove access. None of them cancel a Stripe subscription. Cancel the charge first, then take the access away.
Deleting the wrong thing
| Symptom | Cause | Fix |
|---|---|---|
| Deleting a portal lost project history you expected to keep | Delete wipes messages, requests with comments, tasks, uploaded files, discovery answers, notifications and the login | Use Deactivate instead — it revokes access and keeps the data. Delete asks you to type the access email for exactly this reason |
| Cancel invitation removed the portal completely | Cancel invitation permanently deletes the portal. It is not a soft undo | Recreate the portal and invite again |
| Deleting a client left a portal behind | Delete client removes the client row only — portals and projects survive | Create a client using that portal's access email to reattach it, manage it as an internal portal, or delete the portal separately |
Storefront showing nothing
| Symptom | Cause | Fix |
|---|---|---|
| The storefront page is blank or returns not found | The storefront switch is off, no Stripe account is connected, no products are switched on, or the plans are not synced to Stripe | Open Settings → Storefront, enable Self-serve storefront, confirm the Stripe connection, and switch on at least one synced, priced, active catalog plan |
| A product disappeared from a working storefront | Its plan drifted out of Stripe sync, was deactivated, or was priced at zero | Fix the plan in the Billing Catalog and let it re-sync |