WP qURL
Create and manage LayerV qURL secure access links from the WordPress admin.
by Justin Greer · github.com/justingreerbbi/wp-qurl-for-wordpress · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/justingreerbbi/wp-qurl-for-wordpress/archive/refs/heads/main.zipReadme
=== WP qURL === Contributors: justingreer Tags: qurl, layerv, security, access control, secure links Requires at least: 6.3 Tested up to: 7.0 Requires PHP: 8.0 Stable tag: 1.2.3 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html
Create and manage LayerV qURL secure access links from the WordPress admin.
THIS PLUGIN IS IN ACTIVE DEVELOPMENT.
== Description ==
WP qURL integrates LayerV qURL secure access links into your WordPress site. Authors and administrators can create time-limited, policy-bound portal links to protected URLs directly from the WordPress admin area.
qURL protects resources behind cryptographic, just-in-time access — ideal for sharing internal dashboards, staging environments, contractor access, and sensitive documents.
= Features =
- Page protection — Unlock protected pages via LayerV
qurl.accessedIP/UA grants, with live session fallback - qURL Access Link block — Gutenberg block for logged-in users or visitors to mint one-time qURL links
- Public REST API — Secure frontend minting via
/wp-json/wp-qurl/v1/mint(no admin functions) - Create qURLs — Protect any HTTPS URL with configurable expiration, session duration, and one-time use
- Dashboard — View protected URLs with status filters
- Portal link storage — Locally stores ephemeral portal links (the API returns them only once)
- Access log — View active sessions via the LayerV API and log access events via webhooks
- Role-based access — Administrators manage all qURLs; authors can create and view their own
- Encrypted API key — API credentials stored encrypted using WordPress salts
- Webhook management — Register and manage LayerV webhooks from the admin
- Troubleshooting tools — Optional administrator-only blocked-page diagnostics
= Requirements =
- A LayerV account with an API key (
qurl:readandqurl:writescopes) - WordPress 6.3+
- PHP 8.0+ with the OpenSSL extension
= API Documentation =
This plugin uses the LayerV qURL Service API. Production API base: https://api.layerv.ai
== Installation ==
- Upload the
wp-qurlfolder to/wp-content/plugins/ - Activate the plugin through the Plugins menu in WordPress
- Go to qURLs → Settings and enter your LayerV API key
- Click Test Connection to verify credentials
- Create your first qURL under qURLs → Create qURL
= Webhook Setup =
- Go to qURLs → Webhooks
- Select the events you want (qurl.accessed, qurl.access_denied, etc.)
- Click Register Webhook with LayerV
- Use a qURL portal link and check qURLs → Access Log for events
Your site must use HTTPS and expose the WordPress REST API to the internet.
A LayerV webhook with qurl.accessed is recommended for protected WordPress pages. Without it, WordPress can still unlock via live LayerV sessions.
== Frequently Asked Questions ==
= Why are portal links stored locally? =
The LayerV API returns qurl_link only once at creation time. It cannot be recovered later. WP qURL encrypts and stores links so you can copy them again from the dashboard.
= Who can create qURLs? =
By default: Administrators (full access), Editors and Authors (create access). Administrators can revoke resources; authors can create and manage their own tokens.
= Does this work with private/local URLs? =
For URLs not directly routable on the internet, use the qURL Connector alongside this plugin.
= How do I protect a WordPress page? =
- Register the LayerV webhook under qURLs → Webhooks (recommended)
- Edit the page, enable Protect this page with qURL, and save
- Use Create qURL for this page or the qURL Access Link block
- Share the portal link — LayerV sends the visitor to the page; WordPress unlocks by matching IP and browser
Editors and administrators can still preview protected pages while logged in.
= How do I add self-service qURL links to a page? =
- Edit a page or post in the block editor
- Add the qURL Access Link block (search for "qURL")
- Set the Endpoint to the protected path or URL (e.g.
/members-only/) - Publish — logged-in users with the
mint_qurl_selfcapability can generate a personal one-time link
Configure block defaults and allowed roles under qURLs → Settings → Frontend Block.
= Why does a valid qURL link show Access Denied on a protected page? =
Open the qURL portal link first so LayerV records the access, then land on the protected page from the same browser and network. WordPress matches the visitor IP and user agent from the qurl.accessed webhook (or live LayerV sessions as a fallback).
For diagnosis, enable Debug Mode under qURLs → Settings → Troubleshooting. Diagnostics are shown only to signed-in qURL administrators.
== Developer Hooks ==
wp_qurl_mint_args— filter mint arguments before API callwp_qurl_pre_mint— short-circuit mintingwp_qurl_minted— action after successful mintwp_qurl_user_can_mint_self— filter frontend mint permissionwp_qurl_resolve_endpoint/wp_qurl_is_endpoint_allowed— endpoint validationwp_qurl_trust_proxy_headers— override automatic reverse-proxy IP detectionwp_qurl_client_ip— filter detected visitor IP used for unlock matchingwp_qurl_block_debug_context— filter the blocked-page debug payload when debug mode is enabled
== Screenshots ==
- Dashboard listing protected URLs and stored portal links
- Create qURL form with expiration and session options
- Resource detail with qURL tokens and active sessions
- Settings page with API configuration
== Changelog ==
= 1.2.3 =
- Initial release
- Create, list, and revoke qURLs via the LayerV API
- Protect WordPress pages with webhook IP/UA grants and live session fallback
- qURL Access Link Gutenberg block and public mint REST API
- Dashboard with status filters; quota display on Settings
- Webhook management, access log, encrypted credentials, and role-based capabilities
- Optional administrator-only blocked-page diagnostics
== Upgrade Notice ==
= 1.2.3 = Initial release of WP qURL.