{"id":300919,"date":"2026-05-06T15:27:08","date_gmt":"2026-05-06T15:27:08","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/primer-pay\/"},"modified":"2026-05-06T15:29:07","modified_gmt":"2026-05-06T15:29:07","slug":"primer-pay","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/primer-pay\/","author":23481691,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.1","stable_tag":"0.3.1","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Primer Pay","header_author":"Primer Systems","header_description":"Monetize WordPress content with x402 micropayments. Visitors with the Primer Pay browser extension pay seamlessly; everyone else sees a teaser.","assets_banners_color":"97bd24","last_updated":"2026-05-06 15:29:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/primer-systems\/primer-pay-wordpress","header_author_uri":"https:\/\/primer.systems","rating":5,"author_block_rating":0,"active_installs":0,"downloads":26,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.3.1":{"tag":"0.3.1","author":"primersystems","date":"2026-05-06 15:29:07"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3524596,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3524596,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3524579,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3524579,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":{"primer-pay\/content-gate":{"name":"primer-pay\/content-gate","title":"Primer Pay Content Gate"}},"tagged_versions":["0.3.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3524579,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3524579,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3524579,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3524579,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"Settings page \u2014 configure your wallet address, default price, access duration, and accepted networks.","2":"Adding the Content Gate block \u2014 search for \"Primer Pay\" in the Gutenberg block inserter.","3":"Content Gate in the editor \u2014 the block splits free teaser (above) from paid content (below), with per-post settings in the sidebar.","4":"Front-end paywall banner \u2014 visitors without the extension see the price and a link to get started."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[506,377,12688,209195,260969],"plugin_category":[35],"plugin_contributors":[262044],"plugin_business_model":[],"class_list":["post-300919","plugin","type-plugin","status-publish","hentry","plugin_tags-micropayments","plugin_tags-monetization","plugin_tags-paywall","plugin_tags-usdc","plugin_tags-x402","plugin_category-advertising","plugin_contributors-primersystems","plugin_committers-primersystems"],"banners":{"banner":"https:\/\/ps.w.org\/primer-pay\/assets\/banner-772x250.png?rev=3524579","banner_2x":"https:\/\/ps.w.org\/primer-pay\/assets\/banner-1544x500.png?rev=3524579","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/primer-pay\/assets\/icon-128x128.png?rev=3524596","icon_2x":"https:\/\/ps.w.org\/primer-pay\/assets\/icon-256x256.png?rev=3524596","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/primer-pay\/assets\/screenshot-1.png?rev=3524579","caption":"Settings page \u2014 configure your wallet address, default price, access duration, and accepted networks."},{"src":"https:\/\/ps.w.org\/primer-pay\/assets\/screenshot-2.png?rev=3524579","caption":"Adding the Content Gate block \u2014 search for \"Primer Pay\" in the Gutenberg block inserter."},{"src":"https:\/\/ps.w.org\/primer-pay\/assets\/screenshot-3.png?rev=3524579","caption":"Content Gate in the editor \u2014 the block splits free teaser (above) from paid content (below), with per-post settings in the sidebar."},{"src":"https:\/\/ps.w.org\/primer-pay\/assets\/screenshot-4.png?rev=3524579","caption":"Front-end paywall banner \u2014 visitors without the extension see the price and a link to get started."}],"raw_content":"<!--section=description-->\n<p>Primer Pay lets you put any post or page behind a micropayment wall using the x402 protocol. Visitors with the Primer Pay browser extension pay seamlessly and see your content instantly. No user accounts, no subscriptions, no payment forms.<\/p>\n\n<p><strong>How it works:<\/strong><\/p>\n\n<ol>\n<li>You enter your wallet address in Settings &gt; Primer Pay.<\/li>\n<li>You check \"Enable x402 Paywall\" on any post and set a price (e.g., $0.01 USDC).<\/li>\n<li>Visitors with the Primer Pay Chrome extension pay automatically and see your content.<\/li>\n<li>Visitors without the extension see a teaser and a prompt to install Primer Pay.<\/li>\n<li>Payments settle on Base (Ethereum L2) via USDC \u2014 low fees, instant finality.<\/li>\n<\/ol>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Gutenberg Content Gate block \u2014 visual divider between free teaser and paid content with inline settings<\/li>\n<li>Classic editor support \u2014 <code>[primer_pay_x402]<\/code> shortcode plus sidebar meta box<\/li>\n<li>Per-post price override (defaults to your site-wide price)<\/li>\n<li>Per-post wallet override \u2014 route payments to a different wallet per post (multi-author support)<\/li>\n<li>Multi-network: accept payments on Base, SKALE Base, or both \u2014 with configurable priority<\/li>\n<li>Theme-matching paywall banner \u2014 inherits your site's fonts, colors, and border radius<\/li>\n<li>Configurable access duration: 30 minutes to \"never expires\"<\/li>\n<li><code>.well-known\/x402<\/code> discovery endpoint \u2014 JSON index for AI agents and crawlers to find purchasable content<\/li>\n<li>Works with any theme that renders the_content() normally<\/li>\n<li>No user accounts or login required<\/li>\n<li>Non-custodial \u2014 payments go directly to your wallet<\/li>\n<\/ul>\n\n<p><strong>Requirements:<\/strong><\/p>\n\n<ul>\n<li>A wallet address on Base or SKALE Base (e.g., from MetaMask, Coinbase Wallet, or Primer Pay itself \u2014 same address works on all supported networks)<\/li>\n<li>HTTPS recommended (cookies are marked Secure on HTTPS; HTTP still works for local dev)<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on the Primer x402 facilitator service to verify and settle payments. When a visitor attempts to pay for content, the plugin sends the signed payment authorization to the facilitator, which validates the signature and executes the on-chain USDC transfer on the Base network.<\/p>\n\n<ul>\n<li>Service: Primer x402 Facilitator<\/li>\n<li>Endpoint: https:\/\/x402.primer.systems\/settle<\/li>\n<li>When: Whenever a visitor submits a valid X-PAYMENT header to the plugin's unlock endpoint<\/li>\n<li>Data sent: The base64-encoded signed payment authorization (EIP-712 typed data) from the visitor, plus the payment requirements (amount, asset address, recipient wallet address, network). No personally identifiable information about the visitor is sent \u2014 the only identifier is the wallet address they signed with.<\/li>\n<li>Terms of service: https:\/\/primer.systems<\/li>\n<li>Privacy policy: https:\/\/primer.systems<\/li>\n<\/ul>\n\n<p>This is the standard x402 protocol flow. If you prefer to run your own facilitator, you can configure a custom facilitator URL in the plugin settings.<\/p>\n\n<!--section=installation-->\n<p><strong>From WordPress.org (recommended):<\/strong><\/p>\n\n<ol>\n<li>In your WordPress admin, go to Plugins &gt; Add New.<\/li>\n<li>Search for \"Primer Pay\".<\/li>\n<li>Click Install Now, then Activate.<\/li>\n<\/ol>\n\n<p><strong>Manual upload:<\/strong><\/p>\n\n<ol>\n<li>Download the plugin zip file.<\/li>\n<li>In your WordPress admin, go to Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Select the zip file and click Install Now, then Activate.<\/li>\n<\/ol>\n\n<p><strong>Setup:<\/strong><\/p>\n\n<ol>\n<li>Go to Settings &gt; Primer Pay and enter your wallet address.<\/li>\n<li>Edit any post, check \"Enable x402 Paywall\" in the Primer Pay sidebar box, and publish.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20x402%3F\"><h3>What is x402?<\/h3><\/dt>\n<dd><p>x402 is a protocol for web payments using HTTP status code 402 (Payment Required). When a server returns 402, the Primer Pay browser extension automatically handles the payment and retries the request.<\/p><\/dd>\n<dt id=\"do%20my%20visitors%20need%20crypto%3F\"><h3>Do my visitors need crypto?<\/h3><\/dt>\n<dd><p>Visitors need the Primer Pay browser extension with a small USDC balance. The extension manages a simple wallet \u2014 no MetaMask or crypto experience required.<\/p><\/dd>\n<dt id=\"what%20are%20the%20fees%3F\"><h3>What are the fees?<\/h3><\/dt>\n<dd><p>Primer does not charge fees. Base network gas fees are typically less than $0.001 per transaction.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20visitor%20doesn%27t%20have%20the%20extension%3F\"><h3>What happens if a visitor doesn't have the extension?<\/h3><\/dt>\n<dd><p>They see a free teaser of your content plus a styled banner explaining the price and linking to the Primer Pay extension.<\/p><\/dd>\n<dt id=\"is%20this%20custodial%3F\"><h3>Is this custodial?<\/h3><\/dt>\n<dd><p>No. Payments go directly from the visitor's extension wallet to your wallet address. Primer never holds funds.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>Fixed: Paywall banner now correctly hidden when no wallet is configured (was showing unstyled)<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Gutenberg block: \"Primer Pay Content Gate\" \u2014 visual editor block for splitting free and paid content<\/li>\n<li>Theme-matching paywall banner: inherits site fonts, colors, and border radius via CSS custom properties<\/li>\n<li>Per-post wallet override: route payments to a different wallet per post<\/li>\n<li>.well-known\/x402 discovery endpoint: JSON index for AI agents and crawlers<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Removed front-end \"Powered by x402\" attribution (guideline 10 compliance)<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Multi-network support: Base and SKALE Base<\/li>\n<li>Network selection UI with preferred network<\/li>\n<li>Automatic USDC contract lookup per network<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Global settings: wallet address, default price, facilitator URL, access duration<\/li>\n<li>Per-post paywall toggle with price and access-duration overrides<\/li>\n<li>[primer_pay_x402] shortcode for teaser\/content splitting (registered so the marker never appears in output)<\/li>\n<li>REST unlock endpoint at \/wp-json\/primer-pay\/v1\/unlock\/&lt;post_id&gt;<\/li>\n<li>HMAC-signed session cookies so refreshing doesn't re-charge readers<\/li>\n<li>Archive-safe teaser rendering (no content leaks on blog index, categories, feeds, excerpts)<\/li>\n<li>Non-extension visitor fallback with install CTA<\/li>\n<li>Declined-payment handling with retry button<\/li>\n<\/ul>","raw_excerpt":"Monetize your WordPress content with x402 micropayments. No accounts, no subscriptions \u2014 just instant pay-per-view with USDC.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/300919","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=300919"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/primersystems"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=300919"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=300919"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=300919"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=300919"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=300919"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=300919"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}