Appearance
Payment providers
PackEdge doesn't take your money. You connect your own payment provider, buyers pay you directly, and PackEdge turns each completed order into a license, a customer record and a receipt.
Six providers are supported. All of them work the same way once connected — what differs is who is legally the seller, and a few provider-specific setup steps.
| Provider | Merchant of record | Creates products for you | Registers its own webhook |
|---|---|---|---|
| Stripe | Only with Managed Payments | Yes | Yes |
| Polar | Yes | Yes | Yes |
| Paddle | Yes | Yes | No |
| Lemon Squeezy | Yes | No — map by hand | No |
| Creem | Yes | Yes | No |
| Dodo Payments | Yes | Yes | No |
Merchant of record, and why it matters
With a plain payment service provider — Stripe by default — you are the merchant of record. You are the seller of record for tax purposes, which means registering for and remitting VAT, GST and sales tax in every jurisdiction where you have an obligation.
With a merchant of record, the provider is legally the seller. They collect and remit the tax, handle chargebacks and disputes, and answer billing questions from your buyers. You get a single payout and no tax registrations. The cost is a higher percentage per sale.
That is the entire trade-off. PackEdge is neutral on it: connect whichever suits your situation, and switch later if it changes.
Stripe sits in both columns. On its own it is a PSP; enable Managed Payments on the connection and Stripe becomes the merchant of record for the same integration.
One active provider at a time
An account sells through exactly one provider. Connecting a second is refused until you disconnect the first — this avoids the situation where two providers both hold live products for the same plan and it is unclear which one a buyer will be charged by.
Your credentials for a disconnected provider are removed, but the mapping between your plans and that provider's products is kept. Reconnect the same account later and your plans are still linked.
Live and test mode
Every provider keeps separate live and test credentials, and you choose which one checkout uses. Switching mode does not touch existing licenses — it only changes which keys the next checkout is created with.
Provider-side product ids are bound to a mode: a live product id is meaningless under a test key. PackEdge stores them separately and picks the right one, so flipping between modes never requires re-syncing your catalogue.
Test mode is where you should do all of your first-time setup. Every provider here offers one, though they differ in how it is addressed — a separate API host, a separate key, or a flag on the request.
Test mode badge
When your active connection is in test mode the console sidebar shows a TEST MODE badge. If you are wondering why a real purchase isn't arriving, check that first.
How a purchase becomes a license
The same path for all six providers:
- A buyer opens your checkout URL —
/public/v1/checkout/{planId}. - PackEdge creates a checkout at your provider, carrying the product and plan ids as metadata, and redirects the buyer to the provider's payment page.
- The buyer pays. The provider charges them and sends PackEdge a webhook.
- PackEdge verifies the webhook signature, then mints the license, records the payment, creates the customer if new, and emails the receipt with the license key.
- The buyer lands back on your thank-you page, which shows the key.
The webhook is not optional
Steps 4 and 5 depend entirely on the webhook arriving and verifying. If it never lands, the buyer has paid and has no license. Each provider page below tells you exactly what to configure, and the console shows whether a signing secret is stored for the mode you are selling in.
Redeliveries are safe. Every event is recorded and processed once, so a provider retrying a webhook cannot mint a second license for one order.
Plans and provider products
A PackEdge plan is what you sell. Each plan is mirrored as a product at your provider, because that is what a checkout has to reference.
For five of the six providers this is automatic: create a plan and PackEdge creates the matching product, in both live and test mode, named Your Product — Plan Name. Edit the price and it re-prices or re-creates as that provider requires.
Lemon Squeezy is the exception. Its API exposes products read-only, so nothing can create them for you. Build the product in the Lemon Squeezy dashboard, then map each plan to a variant from the plan editor. See Lemon Squeezy.
You can also map a plan to a product you already have at any provider — useful if you are moving an existing catalogue onto PackEdge and want to keep selling the same products. The plan editor lists what's in your provider account; pick one instead of letting PackEdge create a duplicate.
Billing cycles
Plans support one-off (one_time, lifetime) and recurring (weekly, biweekly, monthly, quarterly, semiannual, yearly, biyearly) cycles.
Not every provider can express every cycle. Creem has no weekly period — a weekly plan is skipped when syncing to Creem rather than being created as monthly, because billing someone monthly when the plan says weekly is worse than not selling it. Polar supports monthly and yearly only; other recurring cycles become one-off purchases there.
If a plan doesn't appear at your provider after saving, an unsupported cycle is the first thing to check.
Connecting a provider
Settings → Payments in the console. Pick a provider, and the form asks for exactly what that provider needs, with a "Before you connect" checklist for anything you must do in their dashboard first.
Where the provider's API allows it, PackEdge registers the webhook endpoint and captures the signing secret for you, so there is nothing to copy. Where it does not — Paddle, Lemon Squeezy, Creem, Dodo — the console shows the webhook URL and a field to paste the secret into.
Local development
Providers cannot reach localhost, so webhook auto-registration is skipped and you'll need a tunnel. See Local development.
