{"id":373855,"date":"2026-10-08T06:02:49","date_gmt":"2026-10-08T06:02:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/paywallproject\/"},"modified":"2026-10-08T06:08:28","modified_gmt":"2026-10-08T06:08:28","slug":"paywallproject","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/paywallproject\/","author":18562033,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.1.0","stable_tag":"3.1.0","tested":"7.1.3","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"PaywallProject","header_author":"PaywallProject","header_description":"All-in-one paywall and subscription plugin for news publishers and magazines.","assets_banners_color":"f5f5f2","last_updated":"2026-10-08 06:08:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/paywallproject.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":60,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.1.0":{"tag":"3.1.0","author":"paywall","date":"2026-10-08 06:08:28","revision":3733758}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3733754,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3733754,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3733754,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3733754,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3733754,"resolution":"1","location":"assets","locale":"","width":2776,"height":2082},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3733754,"resolution":"2","location":"assets","locale":"","width":2752,"height":2064},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3733754,"resolution":"3","location":"assets","locale":"","width":2784,"height":2088},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3733754,"resolution":"4","location":"assets","locale":"","width":2976,"height":2232},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3733754,"resolution":"5","location":"assets","locale":"","width":2704,"height":2028},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3733754,"resolution":"6","location":"assets","locale":"","width":2648,"height":1986}},"screenshots":{"1":"Dashboard with revenue, new subscribers, and the content that converts readers.","2":"The reader's account page: plan, renewal date, profile, and gift articles.","3":"The paywall on an article, asking the reader to create a free account or log in.","4":"Checkout with the plan summary and card payment.","5":"Analytics: revenue, conversion funnel, churn, and gifts over a date range.","6":"The subscribers list with search, filters, and bulk actions."}},"plugin_section":[],"plugin_tags":[17049,12688,12651,5349,4079],"plugin_category":[41,45],"plugin_contributors":[284947],"plugin_business_model":[],"class_list":["post-373855","plugin","type-plugin","status-publish","hentry","plugin_tags-memberships","plugin_tags-paywall","plugin_tags-publishers","plugin_tags-stripe","plugin_tags-subscriptions","plugin_category-communication","plugin_category-ecommerce","plugin_contributors-paywall","plugin_committers-paywall"],"banners":{"banner":"https:\/\/ps.w.org\/paywallproject\/assets\/banner-772x250.png?rev=3733754","banner_2x":"https:\/\/ps.w.org\/paywallproject\/assets\/banner-1544x500.png?rev=3733754","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/paywallproject\/assets\/icon-128x128.png?rev=3733754","icon_2x":"https:\/\/ps.w.org\/paywallproject\/assets\/icon-256x256.png?rev=3733754","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-1.png?rev=3733754","caption":"Dashboard with revenue, new subscribers, and the content that converts readers."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-2.png?rev=3733754","caption":"The reader's account page: plan, renewal date, profile, and gift articles."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-3.png?rev=3733754","caption":"The paywall on an article, asking the reader to create a free account or log in."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-4.png?rev=3733754","caption":"Checkout with the plan summary and card payment."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-5.png?rev=3733754","caption":"Analytics: revenue, conversion funnel, churn, and gifts over a date range."},{"src":"https:\/\/ps.w.org\/paywallproject\/assets\/screenshot-6.png?rev=3733754","caption":"The subscribers list with search, filters, and bulk actions."}],"raw_content":"<!--section=description-->\n<p>PaywallProject helps publishers sell access to protected content with Stripe-powered subscriptions, gifts, coupons, subscriber management, and reporting.<\/p>\n\n<p>Learn more, read the documentation and get support at <a href=\"https:\/\/www.paywallproject.com\/\">paywallproject.com<\/a>.<\/p>\n\n<h4>Payments and fees<\/h4>\n\n<p>Payments go through Connect with Stripe. Connect your Stripe account in one click, with no API keys or webhooks to set up. PaywallProject charges a platform fee of 10% on each payment, on top of Stripe's own fees. The fee is shown on the Connect button before you agree to it.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the third-party services below. Nothing is sent to a service until you configure it.<\/p>\n\n<h4>Stripe<\/h4>\n\n<p>Stripe processes all payments. The plugin calls the Stripe API (api.stripe.com) when a reader checks out, buys a gift, changes or cancels a subscription, when tax is calculated at checkout, and when an administrator manages subscribers or coupons. It sends the reader's email address, name, billing and shipping address, the plan and price, and for tax estimates without an address, the reader's IP address. Checkout pages load Stripe.js from js.stripe.com, which collects card details directly; card numbers never reach your site.<\/p>\n\n<ul>\n<li>Terms: https:\/\/stripe.com\/legal\/ssa<\/li>\n<li>Privacy: https:\/\/stripe.com\/privacy<\/li>\n<\/ul>\n\n<h4>PaywallProject Connect hub (paywallproject.com)<\/h4>\n\n<p>Used for all payments made through Connect with Stripe. Before you connect, the plugin asks the hub for the platform fee rate and sends your site URL. When you connect, disconnect, or refresh the connection, it sends your site URL and the connection credentials. While connected, every Stripe API request listed above goes through the hub (https:\/\/paywallproject.com\/wp-json\/ppconnect\/v1), which forwards it to Stripe and applies the platform fee. That includes the reader data listed under Stripe.<\/p>\n\n<ul>\n<li>Terms: https:\/\/www.paywallproject.com\/terms-of-service\/<\/li>\n<li>Privacy policy: https:\/\/www.paywallproject.com\/privacy-policy\/<\/li>\n<\/ul>\n\n<h4>Google reCAPTCHA<\/h4>\n\n<p>Used only when reCAPTCHA is selected as the signup protection. Registration and checkout forms load the reCAPTCHA script from google.com, which collects data about the visitor's browser. When a form is submitted, the plugin sends the captcha token, your secret key and the visitor's IP address to Google to verify it.<\/p>\n\n<ul>\n<li>Terms: https:\/\/policies.google.com\/terms<\/li>\n<li>Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h4>Cloudflare Turnstile<\/h4>\n\n<p>Used only when Turnstile is selected as the signup protection. Registration and checkout forms load the Turnstile script from challenges.cloudflare.com. When a form is submitted, the plugin sends the Turnstile token, your secret key and the visitor's IP address to Cloudflare to verify it.<\/p>\n\n<ul>\n<li>Terms: https:\/\/www.cloudflare.com\/website-terms\/<\/li>\n<li>Privacy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/li>\n<\/ul>\n\n<h4>Slack<\/h4>\n\n<p>Used only when you enter a Slack webhook URL. When a subscriber signs up, renews or cancels, the plugin posts a message with the subscriber's email address and plan to that webhook.<\/p>\n\n<ul>\n<li>Terms: https:\/\/slack.com\/terms-of-service<\/li>\n<li>Privacy: https:\/\/slack.com\/trust\/privacy\/privacy-policy<\/li>\n<\/ul>\n\n<h4>Outgoing webhooks (Zapier and others)<\/h4>\n\n<p>Used only when you add a webhook URL. On the subscriber events you select, the plugin posts the event name and subscriber details (email address, name, plan and status) to the URL you entered. The data goes to whichever service owns that URL, under that service's terms.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/paywallproject<\/code> directory, or install the plugin through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the Plugins screen in WordPress.<\/li>\n<li>Go to PaywallProject, choose Connect with Stripe, and set up your access settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20require%20stripe%3F\"><h3>Does this require Stripe?<\/h3><\/dt>\n<dd><p>Yes. Stripe is the supported payment gateway for this version.<\/p><\/dd>\n<dt id=\"is%20there%20a%20fee%3F\"><h3>Is there a fee?<\/h3><\/dt>\n<dd><p>Yes. PaywallProject takes a platform fee of 10% of each payment made through Connect with Stripe. Stripe's own fees apply as well.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20help%3F\"><h3>Where can I get help?<\/h3><\/dt>\n<dd><p>Visit <a href=\"https:\/\/www.paywallproject.com\/\">paywallproject.com<\/a> for guides and support, or post in the plugin's support forum here on WordPress.org.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.1.0<\/h4>\n\n<ul>\n<li>Feature: Free access for listed email domains \u2014 a subscription level can now name the email domains it is free to, so everyone at a university, employer or association gets the paid plan at no charge without a coupon each. The address must be verified by one-time code first, and the grant applies only while a new account is being created, so it can never cancel an existing paid subscription. Levels with no domains listed are unchanged: readers see the same checkout as before.<\/li>\n<li>Improvement: Connecting Stripe now connects a live account by default, with a secondary button for a test account, and the site moves onto the mode it connected \u2014 so a new publisher no longer lands on \"Stripe is not configured\" straight after connecting. A publisher already selling live who tries a test account keeps their working checkout.<\/li>\n<li>Improvement: The free article meter now defaults to one article instead of five, so readers see a sample of the writing and are asked for an email address sooner. Sites that already saved a meter value are unaffected.<\/li>\n<li>Fix: The \"Set Up Webhook\" button no longer appears on sites that have no Stripe keys to use it \u2014 connecting handles webhooks anyway.<\/li>\n<li>Fix: Changing the email address on the checkout now clears a free-access offer raised for the previous address, so the code and the new account always go to the address on screen.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Feature: Connect with Stripe \u2014 connect the Stripe account you already have in one click, with no API keys to paste and no webhooks to configure. Renewals, cancellations and failed payments keep working on their own, and your customers, payouts and Stripe dashboard stay yours. The platform fee is stated on the button before you agree to it, and nothing is offered if it cannot be retrieved. Sites that already take payments with their own Stripe keys keep working exactly as before and are not asked to switch.<\/li>\n<li>Feature: New setup wizard \u2014 six steps (payments, plan, pages, access, checkout, signup protection) that leave a site able to sell. It creates the five pages the paywall needs with their shortcodes, turns on IP metering, applies the recommended checkout, and sets up captcha. Every step can be skipped, and each skip says plainly what it costs. Setup now has its own menu entry, and a notice on PaywallProject screens lists anything still outstanding with a link to the step that fixes it. Running a step again never duplicates a page or a plan, and never overwrites the restriction rules you already have.<\/li>\n<li>Improvement: Monthly renewals now appear in a subscriber's status history as \"Renewed\", once per paid invoice. Zapier, analytics and emails are not sent anything extra.<\/li>\n<li>Security: Stripe webhooks with a signature older than five minutes are now refused, so a captured webhook cannot be replayed to grant access again. Several signatures are accepted while a signing secret is being rotated. A server clock more than five minutes out will reject webhooks; this is logged as <code>stripe.webhook.signature_stale<\/code>, separately from an invalid signature, and the window can be adjusted with the <code>ppaccess_webhook_signature_tolerance<\/code> filter.<\/li>\n<li>Security: Uninstalling the plugin revokes the Stripe Connect credentials before removing them.<\/li>\n<li>Fix: Clearing a subscriber's Expires date in the admin now makes them never expire, instead of silently keeping the old date.<\/li>\n<\/ul>\n\n<p>Older releases are listed in changelog.txt.<\/p>","raw_excerpt":"All-in-one paywall and subscription plugin for news publishers and magazines.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/373855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=373855"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/paywall"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=373855"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=373855"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=373855"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=373855"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=373855"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=373855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}