PortalWP Documentation

Everything you need to install, configure, and get the most out of PortalWP — even if you've never installed a WordPress plugin before.

WordPress 6.0+ PHP 8.1+ 5-min setup Beginner friendly

System Requirements

Before installing PortalWP, make sure your hosting meets these requirements. Most modern shared hosting providers (Hostinger, SiteGround, Kinsta, WP Engine, Cloudways) already do.

RequirementMinimumRecommended
WordPress6.0Latest version
PHP8.18.3
MySQL / MariaDB5.7 / 10.3MySQL 8.0+
PHP Memory Limit128 MB256 MB (required for PDF generation)
HTTPS / SSLRequiredRequired — needed for PWA & payments
WordPress REST APIMust be enabledDo not block /wp-json/ in .htaccess
💡 How to check PHP memory: In WordPress admin go to Tools → Site Health → Info → Server. Look for "PHP Memory Limit". If below 128MB, add php_value memory_limit 256M to your .htaccess file, or contact your hosting provider.
↑ Back to top

Installing PortalWP

PortalWP is a standard WordPress plugin ZIP file. There are two ways to install it — choose whichever feels more comfortable.

Method 1 — WP Admin Upload (Recommended for beginners)

1

Download the ZIP file

After purchase, download PortalWP.zip from the link in your confirmation email, or log in to your account dashboard to download it.

2

Go to Plugins → Add New Plugin

Log in to your WordPress admin. In the left sidebar click Plugins, then click the Add New Plugin button at the top of the page.

3

Click "Upload Plugin"

Near the top of the Add Plugins page, click the Upload Plugin button. A file upload area will appear.

4

Select your ZIP and install

Click Choose File, select the PortalWP.zip you downloaded, then click Install Now. WordPress will upload and extract the plugin automatically.

5

Click "Activate Plugin"

Once installation completes, click Activate Plugin. You will be automatically redirected to the PortalWP Setup Wizard.

Method 2 — Manual FTP/SFTP Installation

Use this method if the WP Admin upload fails (usually due to a server file size limit), or if you prefer direct server access.

1

Unzip the file on your computer

Extract PortalWP.zip. You'll get a folder named PortalWP containing all plugin files.

2

Connect via FTP or SFTP

Use FileZilla (free) or your preferred FTP client. Connect to your server using the credentials found in your hosting control panel (usually under FTP Accounts).

3

Upload to wp-content/plugins/

Navigate to /public_html/wp-content/plugins/ on your server. Upload the entire PortalWP folder here — the folder itself, not just its contents.

4

Activate in WP Admin

Go to WP Admin → Plugins. Find PortalWP in the list and click Activate. The setup wizard launches automatically.

After Activation — The Wizard Redirect

When you activate PortalWP for the first time, it automatically creates your portal page, sets up 8 database tables, and redirects you to the Setup Wizard at /wp-admin/?page=portalwp-wizard.

⚠️ Do not skip the Setup Wizard. It must complete fully for the portal to function correctly. If you are not redirected automatically, go to PortalWP → Setup Wizard in your WP Admin sidebar.
⚡ After the wizard completes, go to Settings → Permalinks and click Save Changes (without changing anything). This is required so your portal URL resolves correctly.
↑ Back to top

Setup Wizard — 5 Steps

The Setup Wizard runs automatically after activation. It takes about 3 minutes to complete. Here's what each step does:

1

Portal Name & URL Slug

Set your portal's name (shown in email subjects and the browser tab) and the URL slug. The default slug is portal, making your portal available at yoursite.com/portal. You can change it to anything — client-area, dashboard, etc.

2

Logo & Branding

Upload your agency logo and choose an accent color. These appear in the client portal header and in all emails sent to clients. You can change these any time in Settings → Branding.

3

Payment Gateway

Connect Razorpay (for Indian clients) or Stripe (for global clients), or skip this step and set up payments later. Both gateways can be active simultaneously.

4

Invite Your First Client

Optionally add your first client right from the wizard — just enter their name and email. They'll receive an invitation email with a magic login link. You can skip this and add clients later.

5

Done!

The wizard summarises what was set up. Click Go to Dashboard to start using PortalWP. Your portal page is live and ready for clients.

✅ After finishing the wizard, remember to go to Settings → Permalinks → Save Changes to flush rewrite rules.
↑ Back to top

Troubleshooting Installation

White screen or 500 error after activation

  • Check your PHP version — PortalWP requires PHP 8.1+. Go to Tools → Site Health → Info → Server.
  • Increase the PHP memory limit — add php_value memory_limit 256M to your .htaccess file.
  • Temporarily deactivate other plugins to check for conflicts, then re-activate them one by one.
  • Enable WordPress debug mode: add define('WP_DEBUG', true); to wp-config.php and check the debug log file.

Portal page returns 404

  • Go to Settings → Permalinks → Save Changes to flush WordPress rewrite rules.
  • Make sure a page exists in Pages that uses the PortalWP template or has the [portalwp] shortcode assigned.

REST API errors (401 or 403)

  • Make sure /wp-json/ is not blocked in your .htaccess or by a security plugin.
  • Test your REST API is accessible by visiting yoursite.com/wp-json/ in a browser.
  • If using Wordfence or iThemes Security, whitelist the PortalWP REST namespace: portalwp/v1.
↑ Back to top

Adding Your First Client

Once your portal is set up, adding a client takes 30 seconds. The client gets an email with a magic login link — no password needed.

1

Go to PortalWP → Clients → Add New

In your WordPress admin sidebar, click PortalWP, then Clients, then the Add New button at the top.

2

Enter the client's name and email

Fill in their full name and email address. The email address must be unique — each client has one portal account.

3

Click "Save & Send Invitation"

PortalWP creates the client account and sends them an invitation email containing a secure magic login link. They click it and are instantly logged into their portal — no password registration required.

💡 Magic links expire after 60 minutes by default. If a client says the link has expired, go to their profile in PortalWP → Clients and click Resend Invitation. You can change the expiry duration in Settings → General.

Client Detail Page

Click any client's name in the Clients list to open their detail page. Here you'll find all their data organized in tabs:

  • Overview — Activity summary, last login, storage used.
  • Files — Upload files, create folders, request files from the client.
  • Invoices — Create and manage invoices for this client.
  • Contracts — Create and send contracts for e-signature.
  • Projects — Create and manage Kanban projects.
  • Messages — View and reply to conversations with this client.

Editing & Deleting Clients

From the Clients list, use the action menu (⋯) next to any client to Edit their details or Delete their account. Deleting a client removes all their associated data — files, invoices, contracts, messages. This action cannot be undone.

↑ Back to top

Admin Onboarding Checklist

When you first log in to the PortalWP admin dashboard, you'll see a 7-step onboarding checklist in the top-right area. It guides you through the key setup tasks:

  1. Set your branding (logo + accent color)
  2. Configure your portal URL slug
  3. Connect a payment gateway
  4. Add your first client
  5. Upload a file to a client
  6. Create an invoice
  7. Send a message to a client

PortalWP auto-detects which steps you've already completed and marks them as done. The checklist shows a progress bar so you always know how close you are to a fully configured portal. You can collapse or dismiss it once complete.

↑ Back to top

Settings — General

Go to WP Admin → PortalWP → Settings → General to configure the core portal options.

SettingWhat it does
Portal URL SlugThe URL path for your client portal. Default: portalyoursite.com/portal. After changing this, go to Settings → Permalinks → Save Changes.
Portal TitleShown in browser tabs and email subjects. Default: your site name.
Welcome MessageDisplayed on the client's dashboard home. Supports HTML. Use {client_name} as a placeholder. Default: "Welcome back, {client_name}."
Default CurrencyThe default invoice currency. Options: INR, USD, EUR, GBP, AUD, CAD, SGD. Individual invoices can use a different currency.
Invoice PrefixAdded before the auto-incremented invoice number. Example: INV- → invoices numbered INV-001, INV-002…
Max Upload Size (MB)Maximum size per file upload. Default: 50 MB. Cannot exceed your PHP upload_max_filesize.
💡 To increase the upload size beyond 50 MB, add these lines to your .htaccess:
php_value upload_max_filesize 100M
php_value post_max_size 100M
↑ Back to top

Settings — Branding

Go to PortalWP → Settings → Branding. These settings control how the portal looks to your clients.

SettingDetails
LogoUpload via WordPress Media Library or paste a URL. Recommended size: 200×50 px PNG or SVG. Appears in the portal header and client emails.
Accent ColorThe primary color for buttons, links, and highlights throughout the portal. Enter a hex code (e.g., #6c63ff). Default is PortalWP purple.
Show Powered-by BadgeToggle the "Powered by PortalWP" text in the portal footer. Disable this on ✦ Pro to fully white-label the portal for your brand.
🎨 White-label tip: On the Pro plan, disable the "Powered by PortalWP" badge so clients see only your brand. Pair with your custom logo and accent color for a fully branded experience.
↑ Back to top

Settings — Email & SMTP

Go to PortalWP → Settings → Email. PortalWP has its own built-in SMTP configuration — you don't need a separate email plugin.

Why configure SMTP?

By default, WordPress sends emails using your server's mail function, which has poor deliverability (emails often end up in spam). Configuring SMTP sends emails through a proper mail provider, ensuring clients actually receive them.

Supported Providers

PortalWP includes preset configurations for the most common providers. Select your provider and the host/port fields are filled automatically:

  • Gmail — Uses smtp.gmail.com. Requires a Google App Password (not your regular Gmail password).
  • Outlook / Hotmail — Uses smtp.office365.com.
  • Yahoo Mail — Uses smtp.mail.yahoo.com. Requires an App Password.
  • Zoho Mail — Uses smtp.zoho.com.
  • Hostinger — Uses smtp.hostinger.com. Great if your site is hosted on Hostinger.
  • Custom SMTP — Enter your own host, port, and security settings for any other provider (SendGrid, Mailgun, Amazon SES, etc.).

SMTP Settings

FieldDescription
SMTP HostYour mail server hostname (auto-filled for preset providers).
SMTP PortCommon ports: 465 (SSL), 587 (TLS), 25 (none). Use 587/TLS for most providers.
SecurityTLS, SSL, or None. Use TLS unless your provider requires otherwise.
Email / UsernameThe email address you send from (e.g., hello@youragency.com).
Password / App PasswordYour email password. For Gmail and Yahoo, you must generate an App Password — a regular password won't work with SMTP.

Testing Your Email

After saving your settings, click the Save & Test Email button. PortalWP will send a test email to your WordPress admin address. If you don't receive it within 2 minutes, check the credentials and try again.

⚠️ Gmail users: You must use an App Password — your regular Gmail password will be rejected. Go to Google Account → Security → 2-Step Verification → App passwords to generate one.

Email Notification Types

PortalWP sends emails for these events (each can be individually enabled or disabled):

  • New client invitation (magic login link)
  • Invoice created and sent to client
  • Payment received confirmation
  • Contract ready to sign / signed by client
  • New file uploaded
  • New message received
  • Project status changed
  • Invoice overdue reminder
↑ Back to top

Settings — Payments Overview

Go to PortalWP → Settings → Payments. You can enable Razorpay, Stripe, or both simultaneously.

PortalWP automatically uses the right gateway based on invoice currency: INR invoices → Razorpay, USD/EUR/other invoices → Stripe. This means you can serve both Indian and international clients seamlessly.

For detailed setup instructions, see:

↑ Back to top

Settings — AI Assistant ✦ Pro

Go to PortalWP → Settings → AI Assistant. The AI assistant helps you draft invoices, contracts, and messages in seconds. It is a Pro plan feature and requires your own API key from your chosen provider.

Supported AI Providers

ProviderAvailable ModelsBest For
Google GeminiGemini 2.5 Flash, 2.5 Flash Lite, 2.5 ProFast, cost-effective. Recommended for most users.
OpenAI (GPT)GPT-5.4 nano, GPT-5.4, GPT-5.5, o3Highest quality responses.
Anthropic ClaudeClaude 3.5 Haiku, Claude 3.5 SonnetBest for long contract drafting.

Configuration

1

Choose your AI provider

Select from Google Gemini, OpenAI, or Anthropic Claude in the Provider dropdown.

2

Select a model

The model list updates based on your provider choice. For beginners, Gemini 2.5 Flash is recommended — it's fast and very affordable.

3

Enter your API key

Paste your API key from the provider's dashboard. Keys are stored securely in your WordPress database and never sent to PortalWP servers.

4

Save Settings

Click Save. The AI assist button (✨) will now appear inside invoice, contract, and message editors.

💡 Getting an API key: Visit Google AI Studio for Gemini keys (free tier available), OpenAI Platform for GPT keys, or Anthropic Console for Claude keys.
↑ Back to top

Settings — License Management

Go to PortalWP → Settings → License.

Activating Your License

1

Copy your license key

Your license key was sent in the purchase confirmation email. It looks like: PWPRO-XXXX-XXXX-XXXX-XXXX.

2

Paste it and click Activate

Paste the key into the License Key field and click Activate License. The page will show your plan name, expiry date, and activated site URL.

The License tab also shows: your current plan (Starter / Agency / Pro), how many site installations your plan allows, the license expiry date, and a button to deactivate the license (needed if you want to move it to a different site).

⚠️ Without an active license, PortalWP features are locked behind an upgrade prompt. The plugin still loads, but client management and all features are disabled until you activate a license.
↑ Back to top

Secure File Sharing

Share sensitive deliverables — designs, proposals, reports, source files — with clients securely. Files are never accessible via a direct URL, even if someone guesses the path.

How File Security Works

Files are stored in wp-content/uploads/portalwp/[client-id]/ with UUID filenames (like a1b2c3d4-e5f6-....pdf) — impossible to guess. The directory has an .htaccess that blocks all direct HTTP access. Files are served exclusively through the PortalWP REST API, which verifies the client's JWT token before streaming any file.

Uploading Files (from Admin)

1

Go to the client's Files tab

In PortalWP → Clients, click the client's name, then click the Files tab.

2

Upload files

Click Upload File or drag and drop files directly into the upload zone. Multiple files can be uploaded at once.

3

Add optional details

Optionally add a folder name (to organise files) and a description or note visible to the client.

4

Click Upload

The file is stored securely and the client receives an email notification.

Client Experience

Clients see their files in a clean grid or list view showing file name, size, upload date, and a download button. They can filter by folder and search by filename. Downloads are authenticated — sharing the download URL with someone else won't work.

File Requests

On Agency and Pro plans, you can request files from clients. Go to a client's Files tab → Request File. Enter what you need and a description. The client sees the pending request on their dashboard and can upload directly from the portal. You receive an email notification when they upload.

↑ Back to top

Invoices & PDF Generation

Create professional invoices with line items, tax, and automatic totals. PortalWP generates branded PDFs using the mPDF library — no external service required.

Creating an Invoice

1

Go to PortalWP → Invoices → Add New

2

Select the client and set details

Choose the client from the dropdown, set the currency (INR or USD), due date, and invoice prefix.

3

Add line items

Each line has: description, quantity, unit price, and an optional tax rate. PortalWP auto-calculates subtotal, tax, and total as you type.

4

Add notes (optional)

Add payment instructions or any notes for the client in the Notes field at the bottom.

5

Save or Send

Click Save Draft to save without sending, or Send to Client to send immediately. The client receives an email with a link to view and pay the invoice.

PDF Generation

When an invoice is sent or viewed, PortalWP automatically generates a branded PDF using mPDF. The PDF includes your logo, business name, client details, invoice number, all line items, totals, payment status, and due date. The PDF is generated on demand and served securely.

⚠️ mPDF requires a PHP memory limit of at least 128 MB (256 MB recommended). If PDF generation fails or times out, increase your PHP memory limit.

Invoice Statuses

StatusMeaning
DraftSaved but not yet visible to the client
SentClient can view it; payment pending
Partially PaidClient made a partial payment
PaidFull payment received and verified
OverduePast due date and unpaid
VoidCancelled invoice

Recurring Invoices ✦ Pro

On the Pro plan, mark any invoice as recurring. Choose a frequency (weekly, monthly, quarterly, or yearly) and a start date. PortalWP automatically creates and sends the next invoice at the scheduled time. The client receives an email with the invoice link and payment button. Overdue checks and reminders run daily in the background automatically.

↑ Back to top

Contracts & E-Signatures

Create, send, and collect legally binding e-signatures on contracts entirely within the client portal. No third-party service (DocuSign, PandaDoc, etc.) required. Available on Agency and Pro plans.

Creating a Contract

1

Go to PortalWP → Contracts → Add New

2

Enter the title and select the client

3

Write or paste the contract body

Use the rich text editor. On Pro, click the ✨ AI Draft button and describe what you need in plain English — the AI writes the full contract for you in seconds.

4

Add signature fields

Click Insert Signature Field to add one or more signature blocks. You can have multiple signers (e.g., client + co-founder).

5

Set an optional expiry date

After this date, the contract can no longer be signed.

6

Click "Send for Signature"

The client receives an email with a link to review and sign the contract.

How Clients Sign

The client opens the portal, reads the contract in full, then chooses one of three signing methods:

  • Draw — Use finger on mobile or mouse on desktop to draw their signature.
  • Type — Type their full name, rendered in a cursive signature font.
  • Upload — Upload an image of their handwritten signature.

After signing, PortalWP records: signature image, full name, timestamp (UTC), IP address, and browser user agent. A signed PDF is automatically generated, emailed to both parties, and available for download.

Legal Validity

E-signatures created in PortalWP are legally valid in India under the Information Technology Act, 2000 (Section 5), and in the EU under eIDAS Article 25 as a Simple Electronic Signature. The audit trail provides sufficient evidence for most commercial contracts.

💡 For high-stakes contracts (property, employment, financial agreements), consult a lawyer about whether Qualified Electronic Signatures (QES) are required in your jurisdiction.
↑ Back to top

Project Kanban Board

Give clients full visibility into project progress with a Kanban board. Eliminates "what's the status?" emails entirely.

Creating a Project

1

Go to PortalWP → Projects → Add New

2

Enter project name, assign to client, set target date

3

Add tasks

Each task (Kanban card) has a title, description, assignee (your team member), and starting status.

4

Click Publish

The project becomes visible to the client. They can see all tasks and the overall progress percentage.

Kanban Columns

Tasks move through 4 columns. Drag and drop tasks between columns in the admin. Clients see the board update in real-time (auto-refreshes every 30 seconds):

  • 📋 Not Started — Work hasn't begun yet.
  • 🔄 In Progress — Actively being worked on.
  • 👀 In Review — Ready for client feedback. Client is notified by email.
  • Completed — Task is done and approved.

Client Approval Workflow

When you move a task to In Review, the client receives an email notification. They can view the task, leave a comment, then click Approve (moves to Completed) or Request Changes (moves back to In Progress with their comment). You receive an email immediately when they respond.

↑ Back to top

Async Messaging & Read Receipts

Replace scattered email chains and WhatsApp threads with structured, per-client conversations inside the portal. Available on Agency and Pro plans.

How Messaging Works

Each client has a Messages inbox in the portal. Conversations are threaded — each thread is tied to a topic or project. Both you and the client can start new threads or reply in existing ones.

  • Rich text — Bold, italic, lists, and links in messages.
  • File attachments — Attach files directly in messages. Served securely like all portal files.
  • Read receipts — You can see when the client has read your message (blue checkmark icon). Clients can also see when you've read theirs.
  • Unread badge — An unread count badge appears on the Messages nav item when new messages arrive.
  • Email notifications — Both parties receive an email when a new message is received (configurable in Settings → Email).

Admin Inbox

In WP Admin, go to PortalWP → Messages to see all conversations across all clients in one place. Filter by client or unread status. Reply directly from the admin panel — no need to navigate to each client's individual profile.

↑ Back to top

PWA — Progressive Web App

PortalWP includes full PWA support out of the box. Clients can install the portal to their phone's home screen and use it like a native app — no App Store required.

What PWA Provides

  • 📱 Add to Home Screen — Clients are prompted after 2 visits. On Android an "Add to Home Screen" banner appears automatically. On iOS: Tap Share → Add to Home Screen.
  • 🖥️ Full-screen launch — The portal opens without a browser address bar, looking and feeling like a native app.
  • Offline support — Static assets (CSS, JS, images) are cached by a service worker. Clients can view previously loaded pages even without internet.
  • 🔔 Push notifications ✦ Pro — Clients receive push notifications on their phone/desktop for new invoices, messages, and project updates.
  • 🎨 Your icon on their phone — The portal uses your logo as the home screen icon.

PWA Setup Requirements

  • Your site must have HTTPS (SSL certificate). PWA will not work on http://.
  • Upload a 512×512 PNG icon in PortalWP → Settings → Branding → App Icon. This is the icon that appears on the client's home screen.
  • The portal page must be publicly accessible (not password-protected at the server level).
✅ Once active, visit your portal URL on a mobile device. You'll see the "Add to Home Screen" prompt within 2 visits.
↑ Back to top

Analytics Dashboard ✦ Pro

Go to PortalWP → Analytics to see a full overview of your agency's portal activity. Available on the Pro plan.

What You Can See

SectionWhat it shows
KPI CardsTotal revenue collected, average payment days, top client by revenue, total file uploads
Monthly Revenue ChartBar chart of revenue by month — helps spot trends and seasonal patterns
Invoice Status ChartDonut chart showing the split of Draft / Sent / Paid / Overdue / Void invoices
Portal Login ActivityLine chart of client logins over the last 30 days
File Upload ActivityLine chart of file uploads over the last 30 days
Top Clients TableRanked list of clients by total revenue paid
↑ Back to top

AI Assistant Usage ✦ Pro

Once you've configured your AI provider in Settings → AI Assistant, a ✨ AI Assist button appears in the invoice, contract, and message editors.

What the AI Can Do

  • Draft an invoice description — Describe the project scope and the AI writes professional line item descriptions.
  • Draft a contract — Describe your engagement in plain English. The AI writes a full contract draft (scope, payment terms, IP rights, etc.) ready for your review.
  • Draft a client message — Describe what you want to communicate and the AI writes a professional, concise message.

How to Use It

1

Open the editor

Open a new invoice, contract, or message form.

2

Click ✨ AI Assist

A text input appears asking you to describe what you need.

3

Describe your request

Type in plain English, e.g., "Write a web design contract for a 5-page WordPress website, $2000, 30-day deadline, 50% upfront payment."

4

Review and edit

The AI-generated content fills the editor. Always review and adjust before sending to a client.

⚠️ AI-generated contracts and invoices are drafts for your review — they are not legal advice. Review all AI output carefully before sending to clients.
↑ Back to top

Razorpay Setup (UPI + Indian Cards)

Razorpay lets clients pay via UPI (PhonePe, Google Pay, Paytm), NetBanking, Indian debit/credit cards, and wallets. Available on Agency and Pro plans.

Step 1 — Create a Razorpay Account

Go to razorpay.com → Sign Up. Test mode works immediately. For live payments, you'll need to complete KYC with your business documents (requires a registered Indian business).

Step 2 — Get Your API Keys

1

Log in to Razorpay Dashboard

Go to Settings → API Keys.

2

Generate Test Key

Click Generate Test Key. You'll see a Key ID (starts with rzp_test_) and a Key Secret. Copy both — you won't be able to see the secret again.

Step 3 — Enter Keys in PortalWP

1

Go to PortalWP → Settings → Payments → Razorpay

2

Paste your Key ID and Key Secret

3

Toggle Enable Razorpay on, select INR, click Save

Going Live

Once KYC is approved, generate Live Keys in Razorpay (starts with rzp_live_) and replace the test keys in PortalWP settings.

⚠️ Never use live keys in a test/staging environment. Keep test and live keys strictly separate.
↑ Back to top

Stripe Setup (Global Payments)

Stripe accepts payments from clients worldwide — Visa, Mastercard, Amex, Apple Pay, Google Pay, and 135+ currencies. Available on Agency and Pro plans.

Step 1 — Create a Stripe Account

Go to stripe.com → Create account. Stripe supports businesses in 46+ countries. Test mode works immediately without any KYC.

Step 2 — Get API Keys

1

In Stripe Dashboard → Developers → API Keys

Make sure the Test Mode toggle (top right) is ON.

2

Copy both keys

Copy your Publishable key (starts with pk_test_) and Secret key (starts with sk_test_).

Step 3 — Enter Keys in PortalWP

1

Go to PortalWP → Settings → Payments → Stripe

2

Paste your Publishable Key and Secret Key

3

Toggle Enable Stripe on, select default currency, click Save

💡 You can enable both Razorpay and Stripe at the same time. INR invoices use Razorpay; USD/EUR/other invoices use Stripe. This is the recommended setup for agencies with both Indian and international clients.
↑ Back to top

Webhook Configuration

Webhooks ensure your invoice payment status updates even when clients close the browser before the redirect completes. This is especially important for UPI payments where the redirect sometimes fails. Webhooks are strongly recommended — do not skip this step.

Your Webhook URLs

https://yoursite.com/wp-json/portalwp/v1/webhooks/razorpay
https://yoursite.com/wp-json/portalwp/v1/webhooks/stripe
# Replace yoursite.com with your actual domain

Setting Up Razorpay Webhook

1

Razorpay Dashboard → Settings → Webhooks → Add New Webhook

2

Paste the Razorpay webhook URL

Enter the PortalWP Razorpay webhook URL from above.

3

Set a Webhook Secret

Enter any random string as a secret (e.g., generate one at generate-secret.vercel.app). Copy it.

4

Enable events and create

Enable payment.captured and payment.failed events. Click Create Webhook.

5

Paste secret in PortalWP

Go to PortalWP → Settings → Payments → Razorpay and paste the Webhook Secret. Save.

Setting Up Stripe Webhook

1

Stripe Dashboard → Developers → Webhooks → Add endpoint

2

Paste the Stripe webhook URL and select events

Enter the PortalWP Stripe webhook URL. Under "Events to listen to" add: payment_intent.succeeded and payment_intent.payment_failed.

3

Copy the Signing Secret

After creating the endpoint, copy the Signing Secret (starts with whsec_).

4

Paste in PortalWP

Go to PortalWP → Settings → Payments → Stripe and paste the Signing Secret. Save.

✅ Test by completing a test payment. The invoice status in PortalWP should change to "Paid" within a few seconds.
↑ Back to top

Testing Payments in Sandbox

Always test payments in sandbox/test mode before going live. Use the test credentials below — no real money is transferred.

Razorpay Test Cards

Card NumberExpiryCVVResult
4111 1111 1111 1111Any future dateAny 3 digits✅ Success
5267 3181 8797 5449Any future dateAny 3 digits✅ Success (Mastercard)
4000 0000 0000 0002Any future dateAny 3 digits❌ Failure

UPI Test IDs: Use success@razorpay to simulate a successful payment, failure@razorpay to simulate a failure.

Stripe Test Cards

Card NumberExpiryCVCResult
4242 4242 4242 4242Any future dateAny 3 digits✅ Success
4000 0000 0000 9995Any future dateAny 3 digits❌ Declined (insufficient funds)
4000 0025 0000 3155Any future dateAny 3 digits🔐 3D Secure required

Go-Live Checklist

  • ✅ Test payment completes and invoice status updates to "Paid"
  • ✅ Client receives payment confirmation email
  • ✅ You receive payment notification email
  • ✅ Webhook fires and appears in Razorpay/Stripe webhook logs
  • ✅ Failed payment shows a proper error message in the portal
  • ✅ Switch API keys from test to live in PortalWP settings
↑ Back to top

Client Login & Magic Links

PortalWP uses passwordless magic link authentication. Clients never set a password — they request a login link and are instantly authenticated. This is simpler and more secure than passwords.

How Clients Log In

1

Client visits the portal URL

e.g., yoursite.com/portal. They see a login form asking for their email address.

2

Client enters their email and clicks "Send Magic Link"

PortalWP sends an email containing a secure one-time login link.

3

Client clicks the link in their email

They are instantly logged into their portal dashboard. The link works once and expires after 60 minutes (configurable in Settings → General → Magic Link Expiry).

Session Duration

Once logged in, the client stays logged in for 7 days by default (configurable in Settings → General → Session Duration). They don't need to log in again unless they clear their browser data or the session expires.

💡 Client says the link expired? Go to their profile in PortalWP → Clients and click Resend Invitation / Magic Link. The new link expires in 60 minutes.
↑ Back to top

Portal Tour — Client Welcome Walkthrough

The first time a client logs into the portal, they see a 3-step welcome tour that introduces them to the main sections. The tour uses a modal overlay with progress dots, a Skip button, and a Next button.

Tour Steps

  • Step 1 — Dashboard: Overview of the portal and what they can find here.
  • Step 2 — Files: How to download files shared by your team.
  • Step 3 — Invoices: How to view and pay invoices.

The tour is shown only once (tracked in the client's browser localStorage). Clients can skip it at any time. After the tour, they land on their dashboard and can navigate freely.

↑ Back to top

Dark Mode

The client portal supports both light and dark themes. Clients can toggle dark mode using the 🌙 / ☀️ button in the portal header. Their preference is saved automatically and remembered on their next visit.

Dark mode works with your custom accent color — PortalWP automatically adjusts contrast ratios to ensure readability in both themes.

To enable dark mode support for clients, make sure it is not disabled in PortalWP → Settings → Branding (it is enabled by default).

↑ Back to top

Client Profile Page

Clients can access their Profile page from the portal navigation. The Profile page lets clients view and manage their own account details.

  • View their name and email address on file.
  • See their portal activity (last login, total files downloaded, invoices paid).
  • Manage notification preferences (which email notifications they want to receive).

Clients cannot change their own email address from the portal — this must be done by you in the admin under PortalWP → Clients → [Client Name] → Edit.

↑ Back to top

NPS Feedback Survey

PortalWP includes a built-in Net Promoter Score (NPS) survey to collect client satisfaction feedback automatically. The survey appears as a subtle slide-up banner at the bottom of the portal after a client has been using it for a while.

How It Works

  • The NPS survey asks: "How likely are you to recommend [your agency] to a friend or colleague?" on a 0–10 scale.
  • After rating, clients can optionally leave a comment.
  • Survey responses are stored in your WordPress database. You can view them in the PortalWP admin.
  • The survey appears only once per client — it won't keep reappearing after they respond.
↑ Back to top

Troubleshooting Common Issues

Clients not receiving emails

  • Check spam/junk folders first.
  • Configure SMTP in PortalWP → Settings → Email and use the Send Test Email button to verify it works.
  • For Gmail: use an App Password, not your regular Gmail password.
  • Make sure the "From" email address is from the same domain as your website for best deliverability.

PDF generation fails or times out

  • Increase PHP memory limit to at least 256 MB: add php_value memory_limit 256M to .htaccess.
  • Check your PHP max execution time: add php_value max_execution_time 120 to .htaccess.

Payment status not updating after payment

  • Verify your webhook is configured correctly — see Webhook Configuration.
  • Check the webhook logs in your Razorpay/Stripe dashboard for delivery failures.
  • Make sure /wp-json/ is not blocked by your security plugin or firewall.

PWA not prompting "Add to Home Screen"

  • Your site must be served over HTTPS.
  • Upload a 512×512 app icon in Settings → Branding → App Icon.
  • The prompt appears after the client's second visit (browser requirement).
  • On iOS, the prompt is manual — clients must tap Share → Add to Home Screen.

Portal URL returning 404

  • Go to Settings → Permalinks → Save Changes to flush rewrite rules.
  • Check that a portal page exists in Pages with the PortalWP template assigned.

REST API returning 401 or 403

  • Make sure /wp-json/ is not blocked in .htaccess or by a security plugin.
  • If using Wordfence or iThemes Security, whitelist the namespace portalwp/v1.
  • Test REST API accessibility by visiting yoursite.com/wp-json/ in a browser.
↑ Back to top

Support & Contact

Our support team is here to help. We respond to every message.

ChannelResponse TimeBest For
Email SupportWithin 24 hours (4 hours for Pro)Account, billing, technical issues
WordPress.org Forum1–3 business daysGeneral questions, free plan users
Browse FAQInstantCommon questions answered

When emailing support, please include: your WordPress version, PHP version, PortalWP plan, and a description of the issue (including any error messages). This helps us resolve your issue faster.

Pro plan users get priority 4-hour email support response time.
↑ Back to top