Connect Dodo Payments so customers can subscribe to your listing packages. This page walks you through it step by step.

Dodo is a Merchant of Record Merchant of Record With Dodo, the customer technically buys from Dodo, not from you. Dodo is the legal seller and handles sales tax and VAT for you automatically, worldwide. The plugin grants and removes a customer’s package access based on signed webhook notifications from Dodo, so getting the webhook right is the most important part of this setup.


Before you start

You will need a Dodo Payments account and a few minutes in both the plugin and the Dodo dashboard. You will move between three places: the plugin’s Settings tab, the plugin’s Products tab, and the Dodo dashboard.

Important: pick one mode and stay in it Dodo has a Test mode and a Live mode. Your API mode, bearer token, webhook secret, and product IDs must all belong to the same mode. Mixing a test token with a live product ID (or the other way round) is the most common reason a Dodo setup does not work.


Step 1: Choose Dodo in the plugin Settings

  1. Open the plugin’s Settings tab.
  2. In the provider logo toggle, choose Dodo. The Dodo fields appear below.

Step 2: Fill in the Dodo settings fields

Three fields control your Dodo connection.

  1. API mode – A dropdown with two choices: Test (the default) and Live. Test mode talks to the host test.dodopayments.com and lets you try the whole flow without charging real cards. Live mode talks to live.dodopayments.com and takes real payments. Start in Test, then switch to Live when you are ready to sell.
  2. Bearer token– A password field. Paste your Dodo Payments API key for the mode you chose above. A test-mode key for Test, a live-mode key for Live.
  3. Webhook secret – The signing secret for your Dodo webhook. You get this in Step 4 when you create the webhook in Dodo, then paste it back here.
Dodo Settings in Listeo Subscriptions

Where to find your bearer token

  1. Log in to your Dodo Payments dashboard.
  2. Make sure the dashboard is in the same mode you picked in the plugin (Test or Live).
  3. Open the API keys page and copy your API key.
  4. Paste it into the Bearer token field in the plugin and save.

Match the mode If the plugin’s API mode is set to Test, your bearer token must be a test key. If it is set to Live, it must be a live key. The wrong combination will fail.


Step 3: Register the webhook in Dodo

The webhook is how Dodo tells your site about new subscriptions, renewals, and cancellations. Without it, customers can pay but never receive their package access.

  1. In the Dodo dashboard, go to the webhooks section and add a new webhook.
  2. Set the endpoint URL to your site’s Dodo webhook address (see below).
  3. Subscribe it to the events listed below.
  4. Save the webhook, then copy its signing secret.

Webhook endpoint URL

Use this address, replacing YOUR-SITE.com with your real domain:

https://YOUR-SITE.com/wp-json/listeo-recurring-packages/v1/dodo/webhook

How verification works The plugin verifies every Dodo webhook using the Standard Webhooks signature scheme. The signing secret may start with whsec_. This is why the secret in Step 2 must match the one Dodo shows you here.

Events to subscribe to

Subscribe the webhook to all of these subscription events:

  • subscription.active
  • subscription.renewed
  • subscription.on_hold
  • subscription.paused
  • subscription.updated
  • subscription.plan_changed
  • subscription.cancelled
  • subscription.failed
  • subscription.expired

Dodo also sends payment.succeeded and checkout.completed events, which the plugin uses to confirm the very first payment. If your dashboard lets you include them, do so.


Step 4: Copy the signing secret back into the plugin

  1. After saving the webhook in Dodo, copy its signing secret (it may start with whsec_).
  2. Paste it into the plugin’s Webhook secret field on the Settings tab.
  3. Save the plugin settings.

Warning: your server clock must be accurate Dodo webhook signatures are time-checked, with a tolerance of 5 minutes. If your server’s clock is wrong by more than that, valid webhooks will be rejected and access will not be granted. If webhooks are failing for no clear reason, ask your host to confirm the server time is correct.


Step 5: Create your product in Dodo and map it

The plugin does not create products in Dodo for you. You create the subscription product in Dodo, then tell the plugin which product belongs to each package.

  1. In the Dodo dashboard, create your subscription product with the price and billing interval you want.
  2. Open the product and copy its product ID. Dodo product IDs start with pdt_.
  3. In the plugin, open the Products tab and find the package you want to sell.
  4. Paste the product ID into Test Dodo Product ID or Live Dodo Product ID, matching the mode you are using.
  5. Save.

 

Paste product id in plugin settings

Where checkout happens When a customer subscribes, the plugin sends them to Dodo’s hosted checkout. In Live mode this is checkout.dodopayments.com; in Test mode it is test.checkout.dodopayments.com. You do not build a checkout page yourself.

A customer email is required Dodo needs a customer email to start a checkout. That means the buyer must be logged in or otherwise have an email on their account before they can subscribe.

For the full details on mapping product IDs to packages and how the Test and Live ID fields work, see Products & packages.


Customers can manage their own subscription

Dodo provides a customer billing portal. That means your subscribers get a working Manage button where they can update their payment method and cancel on their own, without contacting you.

Tip: test the full loop first Before going live, run a test subscription end to end in Test mode: subscribe, confirm the package access is granted, then cancel from the Manage button and confirm access is removed. When that works, switch every field to Live and repeat with the live product ID.

Final checklist API mode, bearer token, webhook secret, and product ID must all be for the same mode. Check this once more before you announce that subscriptions are open.