Troubleshooting
Common issues and how to fix them.
Provisioning
Site provisioning fails or hangs
Symptoms: Signup completes payment but site is never created, or spinner runs indefinitely.
Check:
- Go to WaaS → Settings → Provisioning — look for stuck intents
- Check the Activity Log (WaaS → Settings → Activity tab) for error details
- Verify file system permissions:
# The WaaS data directory must be writable by the web serverls -la wp-content/uploads/grabwp-tenancy-waas/
- Check PHP error log for fatal errors during provisioning
Common causes:
- Insufficient disk space
- File permission issues (web server can't create directories)
- PHP memory limit too low — increase
memory_limitinphp.ini - PHP max execution time — increase
max_execution_timefor long provisioning tasks
Provisioning intent stuck in "pending"
- Go to WaaS → Settings → Provisioning
- Find the stuck intent
- Click Retry to re-queue it, or Dismiss to discard it
Payment & Billing
Polar webhook not received
Symptoms: Customer pays but subscription stays pending. "Last webhook received" timestamp doesn't update.
Check:
- Verify the webhook URL in Polar dashboard matches exactly:
https://yoursaas.com/wp-json/grabwp-waas/v1/webhooks/billing/polar
- Check that your site is accessible from the internet (not localhost)
- Verify the webhook secret matches between Polar and WaaS settings
- Check Polar dashboard → Webhooks → Delivery log for failed attempts
Common causes:
- Wrong webhook URL (typo, HTTP instead of HTTPS)
- Firewall blocking incoming webhooks
- Webhook secret mismatch — copy-paste carefully, the
whsec_prefix is required - Site behind basic auth or maintenance mode
Payment succeeds but site not provisioned
- Check if the webhook was received (WaaS → Settings → Billing → last webhook timestamp)
- If webhook received: check provisioning queue (WaaS → Settings → Provisioning)
- If webhook not received: see "Polar webhook not received" above
- Check Activity Log for errors
WooCommerce checkout redirects to empty cart
- Verify the Anchor Product exists and is published (even if hidden)
- Click Create/Repair WooCommerce Anchor Product in WaaS → Settings → General
- Clear any WooCommerce cache plugins
Templates
Templates not appearing in gallery
Check:
- Is the template marked as Active? (WaaS → Templates → Edit)
- Is the source tenant still active? (Tenancy → All Tenants)
- Is the template restricted to specific plans? Check Allowed Plans on the template
- Does the template have a thumbnail? Templates without thumbnails may appear broken
- Clear any page caching on the templates page
Template preview not loading
- The preview URL uses
?grabwp_waas_preview=<slug>— make sure your server/caching layer doesn't block this parameter - Check that the source tenant site is accessible
- Verify there are no PHP errors in the tenant site
Custom Domains
Domain verification fails
Check:
- DNS propagation may take up to 48 hours (usually 5-30 minutes)
- Use a DNS checker to verify the record is visible:
dig mybusiness.com CNAME # For Cloudflare SaaS modedig mybusiness.com A # For Direct IP mode
- Ensure the record value is correct:
- CNAME mode: must point to your CNAME Target exactly
- Direct IP mode: must point to your server IP exactly
Custom domain shows wrong site or SSL error
Cloudflare SaaS:
- Check that the fallback origin is correctly configured in Cloudflare
- Verify the custom hostname is added in Cloudflare dashboard
- SSL provisioning can take a few minutes
Direct IP:
- Ensure your web server (Nginx/Apache) has a server block for the custom domain
- Run Certbot or equivalent for SSL on the new domain
- Reload/restart your web server after config changes
Tenant Sites
Tenant site not loading (404 or blank page)
- Check domain/subdomain DNS resolves correctly
- Verify the tenant exists in Tenancy → All Tenants
- Check the tenant's database tables exist
- Look for PHP errors in the error log
- Verify wildcard DNS is configured:
*.yoursaas.com → your server IP
Tenant admin is inaccessible
- Try accessing via
tenant-slug.yoursaas.com/wp-admin/ - If login fails, the tenant user may not have been created — check provisioning logs
- For WaaS Auth mode: tenants log in via OTP on the dashboard, not wp-login.php
Email
OTP codes not arriving
- Check your spam/junk folder
- Verify SMTP plugin is configured and working
- Send a test email from WP Mail SMTP → Email Test (or your SMTP plugin's test feature)
- In development: check Mailpit at
http://yourserver:8025/
Common causes:
- No SMTP plugin installed (default
wp_mail()often rejected by mail servers) - SMTP credentials incorrect
- Port blocked by hosting provider (port 25/465/587)
- Sender email domain has no SPF/DKIM records
File Permissions
"Permission denied" errors
The web server user (usually www-data or nginx) needs write access to:
chown -R www-data:www-data wp-content/grabwp-tenancy/
chown -R www-data:www-data wp-content/grabwp-tenancy-pro/
chown -R www-data:www-data wp-content/uploads/grabwp-tenancy-waas/
chown -R www-data:www-data wp-content/uploads/
S3 connection test fails
- Double-check endpoint URL, bucket name, region
- Verify access key and secret key are correct
- For MinIO: enable Path-Style Endpoint checkbox
- Check that the bucket exists and the credentials have read/write permission
- Verify network connectivity — your server must be able to reach the S3 endpoint
Performance
Slow provisioning
- Increase PHP
memory_limitto at least 256M - Increase
max_execution_timeto at least 120 seconds - For SQLite tenants: ensure SSD storage
- For S3 storage: provisioning uploads are slower than local — expected behavior
Admin dashboard slow
- The subscriptions and domains list tables query the database — ensure indexes are intact
- If you have hundreds of tenants, consider MySQL performance tuning
- Clear object cache if using a caching plugin
Getting Help
If you've tried the above and still have issues:
- Check the Activity Log — WaaS → Settings → Activity for detailed error records
- Check PHP error log — usually at
/var/log/php-fpm/error.logor in your hosting control panel - Check WordPress debug log — enable
WP_DEBUG_LOGinwp-config.php:Logs are written todefine('WP_DEBUG', true);define('WP_DEBUG_LOG', true);define('WP_DEBUG_DISPLAY', false);wp-content/debug.log
Back to: WaaS Documentation Index