← Plugins Beta
Paid Access
Charge people, AI agents, or both for the same post.
Stripe memberships, paid reads for AI agents, and member content for visual builders. Free and open source, built for EmDash.
Features
-
Stripe memberships
Monthly and yearly plans, Checkout, billing management, and email-link sign-in.
-
Paid reads for AI agents
Sell individual Markdown reads for USDC through x402.
-
Content for each audience
Connect your builder to show member content, plan perks, and guest prompts.
-
Rules for builder pages
Add members-only rules to published pages, with access checks in your site.
-
Post and taxonomy rules
Choose access per entry, or apply a rule across categories and tags.
-
Server-rendered paywalls
Check access before the protected body reaches the reader's HTML.
-
Payment receipts
Review agent payments, with testnet and mainnet totals kept separate.
-
Free, with no plugin fees
The complete GPL plugin. No license keys, paid tiers, or transaction cut.
The latest public beta is 0.1.0-beta.2, released October 10, 2026. It adds audience segments and page rules for visual builders, plus two access and caching fixes. Get the npm package or read the release notes .
Paid Access gives your EmDash site two ways to earn from the same writing. People subscribe through Stripe. AI agents buy individual reads through x402, a payment protocol built around HTTP's 402 Payment Required response. Use either, or both.
Memberships that feel familiar
Connect a plan to a Stripe product and offer monthly or yearly billing. Readers pay through Stripe Checkout, sign in with a one-time email link, and manage billing in Stripe's customer portal.
Your post template checks access before rendering the body. Readers without access see your excerpt, pricing, or custom paywall. Stripe sets the amount charged; the labels in Paid Access are display copy.
A paid read for an AI agent
An agent requests a post's Markdown address, such as /agents/posts/your-post.md. Paid Access replies with the price, payment network, and wallet address. An x402-compatible client pays in USDC and retries; after settlement, it receives the full Markdown post.
Payments go to your wallet on Base. Receipts record the payment and link to its transaction. Start on Base Sepolia with test USDC; test payments stay separate from mainnet totals.
This is a paid Markdown route for compatible clients. It doesn't automatically charge every bot that visits your site.
Choose who can read each post
- Public: people read freely; agents get free Markdown when you explicitly offer it.
- Free for people, paid for agents: the page stays public, while the Markdown route charges per read.
- Members or paying agents: people need a configured plan; agents can buy a single read.
- Members only: people need a configured plan, and the post isn't offered to agents.
Set a rule beside an entry in the editor, or apply it to a category or tag. Public HTML remains readable by bots, so a paid Markdown offer alone doesn't prevent scraping.
New in beta.2: content for the right reader
Paid Access can now tell a visual builder which audience a visitor belongs to. Show an Account link to signed-in readers, an upgrade prompt to guests, or a resource to people on a particular plan.
Your site passes the builder three kinds of segment: member for a verified sign-in, plan:<slug> for an owned plan, and entitled when the reader can access a specific entry. Signing in alone doesn't mean someone has paid. Use a plan or entry entitlement for paid content.
There's also Add a rule for a page in Paid Access Rules. It covers published entries edited outside the usual post editor, including builder pages. These rules are members-only, require a plan in Stripe mode, and don't sell the page to agents.
Both features need your site's integration: pass segments to the builder, and check whole-page access in the page route. The builder must leave hidden content out of the HTML and embedded data. See the visual builder guide .
Two useful fixes
Beta.2 denies access when your site asks for an unknown or removed plan. It also keeps HTML, paid Markdown, and other no-store responses out of Astro's route cache, so Astro's route cache can't replay a paid response to an unpaid request.
One beta.2 limitation remains: a saved rule with both a removed plan and a valid plan can still accept the valid plan. Review affected rules whenever you remove a plan.
Install it on your site
The npm package includes the EmDash plugin and its Astro companion. Register both, then render protected post bodies through PaidContent. The EmDash plugin directory listing isn't published yet.
You'll need a server-rendered EmDash 1.2 site, x402 1.2, Astro ^6.1.3 or ^7.3.5, and Node 22.12+. Memberships also need Stripe, a working email provider, and EMDASH_ENCRYPTION_KEY for encrypted settings. Agent payments need a Base wallet and a compatible facilitator. Both payment modules start off.
Check every place your site exposes content: the post template, builder output, feeds, APIs, search, and alternate routes. With the companion enabled, all HTML bypasses shared caching, including public pages. Your CDN must honor that, and your host will handle more requests. Follow the installation guide and hosting checklist .
What is still in beta
Start with Stripe test mode and Base Sepolia, then verify checkout, email, access rules, and caching on your own site. The release notes separate package checks from deployed-site and payment tests. Cloudflare Workers needs separate host verification.
This beta doesn't include subscriber agent tokens, prepaid passes, free-member entitlements, automatic migration, checkout trial configuration, or Cloudflare Monetization Gateway support. It uses x402 at your site's server.
Beta.3 is in preparation. It adds native EmDash reader-access integration and editor controls, and replaces legacy delegation with an explicit offline migration path. It requires a matching EmDash core build and isn't published to npm. Keep using the beta.2 install below; read the beta.3 preview if you're following development.
Free software, help when you need it
The complete plugin is free under GPL-2.0-or-later. Paid Access takes no percentage; Stripe, network, or facilitator fees may still apply. I offer setup, migration, hosting, and support if you'd like a hand.
Paid Access began as a fork of Restrict With Stripe for EmDash by Stranger Studios, with the original authorship and history retained.
Install
# Install the current public beta explicitly.
# npm's default latest tag still points to beta.1.
pnpm add [email protected] @emdash-cms/[email protected]
// In your existing astro.config.mjs:
import paidAccessPlugin from "emdash-paid-access";
import { paidAccessAstro } from "emdash-paid-access/astro";
// Keep your adapter, database, storage, and other plugins.
// Add paidAccessAstro({ collections: ["posts"] }) to integrations.
// Add paidAccessPlugin to emdash({ plugins: [...] }).
// In your post template's frontmatter:
import PaidContent from "emdash-paid-access/components/PaidContent.astro";
// Render the protected body once, in the template:
// <PaidContent entry={post} collection="posts" />
# Complete setup and verification:
# https://github.com/masonjames/emdash-paid-access/blob/v0.1.0-beta.2/docs/guides/installation.md Questions
Do my readers need a crypto wallet?
People pay through Stripe and sign in by email. Only agents using the paid x402 route need USDC and a compatible payment client.
Can I charge agents and keep the website free?
Yes. Choose Free for people, paid for agents. The Markdown route charges per read, but the page's HTML stays public. It doesn't prevent bots from reading that public page.
Can I use this with a visual builder?
Beta.2 supplies audience segments and rules for published builder pages. Your site must connect those segments to the builder and check page access. Paid content needs a plan or entry entitlement; a member segment only means the reader is signed in.
Does it work alongside Restrict With Stripe?
Beta.2 has an optional delegate mode that leaves member access with Restrict With Stripe while you evaluate paid agent reads. It doesn't migrate records or bridge sessions. The beta.3 candidate replaces delegation with an explicit offline migration path, so read the guide for the version you're using.
Will a paywall affect search?
The paywall includes structured data that identifies restricted content, and agents can discover offered Markdown reads. Search engines see the public excerpt. This makes the access policy clearer; it doesn't guarantee rankings or indexing.
Is anything locked behind a paid plugin plan?
No. The full plugin is free and open source, with no license key or transaction percentage. Provider fees and any setup, migration, hosting, or support you choose are separate.
Can I try it without real payments?
Yes. Use Stripe test mode for memberships and Base Sepolia test USDC for agents. Verify the full flow on your site before enabling live payments; a successful package build doesn't test your email, theme, or CDN.
Should I install beta.2 or beta.3?
Install 0.1.0-beta.2, the current public npm beta. Beta.3 is a source candidate that needs a matching EmDash core and hasn't been published to npm. Use the exact install command above because npm's default latest tag still points to beta.1.