Paddle Billing for Joomla

Sell memberships and software on Joomla. Let Paddle Billing take the payments.

PaddleSubs turns every Paddle purchase into an Access Subscription: Joomla user groups granted for exactly as long as the customer has paid for, then renewed, reminded and expired on schedule. Paddle handles the checkout, sales tax and invoices.

Joomla 5.4 and 6 · PHP 8.2+ · Paddle Billing sandbox and live

My Access Subscriptions 3 products
  • Pro Membership
    Automatic renewal · valid until 12 March 2027
    Active
  • Plugin Updates
    Renewal, starts when the current year ends on 1 November 2026
    Pending
  • Video Course
    Expired on 30 June 2026 · Renew
    Inactive
An example customer's Access Subscriptions, as PaddleSubs shows them on your site.

How it works

From a product in Paddle to a paying member in Joomla

Paddle owns the catalogue, the checkout and the money. PaddleSubs keeps Joomla in step with it.

  1. 1. Connect Paddle

    Add your Paddle API key and client-side token. Start in Paddle's sandbox and switch to live when your products are ready.

  2. 2. Decide what each product grants

    Products and prices live in Paddle. In Joomla you choose the user groups a purchase adds or removes, and how long access lasts: days, a fixed date or a lifetime.

  3. 3. Sell

    Customers sign in or register on your product page and pay in Paddle's checkout. Paddle sells as merchant of record, so sales tax, receipts and payment methods are handled there.

  4. 4. Access runs itself

    Paddle's webhooks create the Access Subscription. Joomla's Scheduled Tasks activate it, send reminders before it ends and take the groups away when it expires.

Features

Everything between the payment and the page it unlocks

Members-only content

Show part of an article only to customers of certain products, combining them with AND and OR.

Content released over time

Unlock lessons or chapters by how long a customer has had access, or how long they have left.

Live prices in articles

Price tags read the current price from Paddle, localised to the visitor's country and currency if you choose.

Customer self-service

Customers see their Access Subscriptions and renew them on your site, and manage payment methods, invoices and Subscriptions in Paddle's billing portal.

Expiry reminders

Emails before access ends and after it has ended, written as Joomla Mail Templates you can edit and translate.

Coupons and upgrades

Coupon codes kept in step with Paddle, plus levels that discount moving a customer up to a higher tier.

Earnings after fees

Dashboard statistics use Paddle's payout figures, so each product shows what you earned after Paddle's fee, refunds and credits.

Calm when Paddle is slow

Webhooks are queued and processed in order, and customer and administrator lists render from local records if Paddle can't be reached.

Selling software?

Licenses with seats, bound to the sites that use them

Make a product licensed and every purchase becomes a license. The quantity bought in Paddle is the number of sites it covers.

  • Renewals extend the same license, so a customer's sites stay bound to it.
  • A site is its registrable domain, so www and staging can share one seat. Localhost and .test hosts can be free or refused.
  • Customers move a license to another site from their account page, within the limits you set per product.
  • Every bind, release and override is recorded.
Your service claims a seat through Joomla's Web Services API
POST /api/index.php/v1/paddlesubs/activations
Authorization: Bearer <Joomla API token>

{ "user_id": 42, "product_id": 7,
  "identifier": "www.example.com" }

A refusal is a 409 with a reason your code can act on:

no_license all_seats_bound identifier_bound_elsewhere change_limit_reached

Built the Joomla way

Uses what Joomla already gives you

No parallel membership system to learn. Access is Joomla user groups, and the moving parts are Joomla's own.

User groups
added and removed with access
Scheduled Tasks
for expiry, reminders and webhooks
Mail Templates
for every email it sends
Web Services
with API tokens and ACL actions
Content plugins
for prices, links and restrictions
Language files
for every string customers see

Moving from Akeeba Subscriptions?

Bring your customers with you

The import carries existing purchases over as Access Subscriptions. Customers keep their accounts, passwords and access, and nothing about them is sent to Paddle.

  • Read from the live database or an uploaded SQL dump.
  • Do a trial run first: it makes every decision and writes nothing.
  • Attach old levels to Paddle prices, or create them in Paddle as you go.
  • Undo an import: only what that run created is removed.
Read the migration guide

Questions

Before you buy

What do I need?

A Joomla 5.4 or 6 site on PHP 8.2 or later with MySQL, and a Paddle Billing account. Paddle's sandbox is free to use while you set up and test.

Is PaddleSubs made by Paddle?

No. PaddleSubs is an independent Joomla extension. It is not affiliated with or endorsed by Paddle; it uses Paddle Billing's public API.

One-time purchases or Subscriptions?

Both. A one-time purchase grants access for the period you set. A Subscription renews in Paddle, and each renewal extends the customer's access.

Where is the money and customer data kept?

Prices, payments and card details stay in Paddle. Your site stores the Paddle IDs it needs, the links to Joomla users, and the Access Subscriptions themselves.

What if a webhook is missed?

"Sync from Paddle" catches up customers, transactions and access in one step. It is also how you connect a Paddle account that already has sales.

What does a repeat purchase do?

You choose per product: start another period straight away, start where the current access ends, or add seats as a separate license.

Try it against Paddle's sandbox first

Set up your products, run test purchases and watch Access Subscriptions appear before a single real payment is taken.