Creem handles merchant-of-record billing, which means it is legally the seller and the VAT is its problem rather than yours. That part is the same deal as Polar, Paddle and Lemon Squeezy.
Where it differs is stricter, and worth knowing before you start: Creem signs every webhook and PayGlue rejects any delivery whose signature does not match. Not a warning in a log, a hard refusal.
That is the right way round. It also means a mistyped secret does not degrade quietly, it stops everything. Worth understanding before you spend an evening on the wrong theory.
What you need
- A Ghost site you administer
- A Creem account with at least one product
- Admin access to both
Connect Ghost first
In Ghost, open Settings, then Integrations, then Add custom integration. Name it PayGlue and copy the Admin API key along with your site URL. That key can create and modify members, so treat it like a password.
Create an API key in Creem
In your Creem dashboard, go to Developers, then API Keys, and create a new key. It starts with creem_.
Copy it in full. A truncated key fails the health check with a message that reads like a connection problem rather than a copy problem.
Add the webhook endpoint
Go to Developers, then Webhooks, and click Add endpoint. Paste the webhook URL from your Creem connection page:
https://api.payglue.io/webhooks/creem?tenant=your-slug
Copy the whole string. The slug at the end is how the event finds your organisation, and a truncated copy means events arrive addressed to nobody.
Select the checkout and subscription events: checkout.completed, subscription.paid, subscription.active, subscription.canceled and subscription.expired.
After saving, Creem shows a signing secret. Copy it.
Enter the credentials, and mind the checkbox
In PayGlue, open Connection, then Creem, and fill in the API Key and the Webhook Secret.
Then the part that catches people. There is a checkbox: This is a Creem sandbox/test connection. It has to agree with the key you just pasted.
Ticked, PayGlue talks to test-api.creem.io. Unticked, api.creem.io. A live key with the box ticked fails the health check. A sandbox key with the box clear fails too. In both cases the error looks like bad credentials, and you will re-copy a perfectly good key before thinking of the checkbox.
Only the API side changes. Sandbox events arrive at the same webhook endpoint, so there is no second webhook to register.
Save, then run the health check. Green means Creem accepts the key and the environment matches.
Which events do what
| Creem event | What happens in Ghost |
|---|---|
checkout.completed |
Member created, one-time purchase |
subscription.paid |
Active membership confirmed, renewal |
subscription.active |
Membership granted |
subscription.canceled |
Membership revoked |
subscription.expired |
Membership revoked |
subscription.paid is the one people leave out because it looks redundant next to active. It is the renewal confirmation, and without it you have no signal that a recurring payment actually went through. Enable all five.
Map a product to a Ghost tier
Open the Buy Button, Paywall or Pricing Table editor, pick your Creem product, choose the Ghost newsletter and welcome email, and save.
Without a mapping the event arrives, passes signature verification, and then nothing happens. Correct behaviour, and indistinguishable from a fault until you know to check.
Test it in sandbox
Tick the box, use a sandbox key, make a test purchase.
Then check Analytics, then Webhook Events. Three outcomes, three different causes:
- No event at all: the URL in Creem is wrong, or the slug does not match your organisation.
- Event failed: signature mismatch. The secret in PayGlue is not identical to the one on the endpoint in Creem. With Creem this is a hard stop rather than a warning, so nothing at all will work until it matches.
- Event processed, nothing changed: no mapping for that product.
When you switch to live credentials, untick the box and clear the test members out of Ghost Admin.
Where Creem sits among the others
Its distinguishing feature is the one at the top of this page. Compared to the others PayGlue connects:
| Signs webhooks | Sandbox | |
|---|---|---|
| Creem | Yes, and enforced | Explicit checkbox |
| Polar | Yes | Separate environment |
| Lemon Squeezy | Yes, secret you invent | Per API key, no separate environment |
| Paddle | Not yet | Detected from the key prefix |
| Gumroad | Not yet | None |
Strictness is a feature. It means a misconfigured integration announces itself immediately rather than working until the day somebody sends you a forged event.
The cost is one more value that has to be exactly right, and one checkbox that has to agree with it. Neither is hard once you know they are there.
Is Creem the right pick
Choose it when you want merchant-of-record billing with proper signature verification, and a sandbox you can switch without juggling two sets of credentials in your head.
Look elsewhere when you want the shortest possible setup, in which case Gumroad registers its own webhooks and asks for three fields.
The full comparison of every route is here, and what merchant of record means for your tax position is here.