Introduction
Connect Dodo Payments to GoHighLevel (GHL) to sell from your GHL funnels, websites, emails, and SMS, and to fulfill orders with GHL automation. GHL is a CRM and marketing platform with funnels, websites, email and SMS, and automation (Workflows). GHL doesn’t list Dodo Payments as a built-in payment processor, so you connect the two in one of three ways. Pick one based on how embedded you want checkout to be and how much code you can write. Every approach handles fulfillment the same way: Dodo Payments sends webhook events to a GHL Inbound Webhook workflow, which tags the contact, grants access, and sends confirmations.Choose Your Approach
The three approaches differ in the code they need and in where the customer pays:Prerequisites
Before you start, you need:- A Dodo Payments account with at least one product.
- A GoHighLevel account with a funnel, website, or workflow.
- Access to Developer → Webhooks in the Dodo Payments dashboard, and to Developer → API Keys if you need an API key.
- For Approaches B and C: a small backend or serverless endpoint that creates checkout sessions.
Fulfillment with Webhooks (All Approaches)
The webhook workflow is the automation layer. Set it up once, and it works with every checkout approach.Create the Workflow
Add the Inbound Webhook Trigger
Register the Webhook in Dodo Payments
Add Fulfillment Actions
Approach A: Payment Links (No-Code)
Add a Dodo Payments payment link to any GHL button, funnel call to action, order page button, email, or SMS. Customers pay on the Dodo Payments hosted checkout. For what the checkout supports, see Checkout Features.Create a Product and Copy Its Payment Link
https://checkout.dodopayments.com/buy/{product_id}.Add the Link to Your GHL Button
Set a Success Page (Optional)
redirect_url parameter.Approach B: Overlay Checkout (Custom Code)
Approach B opens Dodo Payments checkout as a modal overlay on your GHL page, using the Checkout SDK from a CDN. It needs a backend that creates a checkout session and returns itscheckoutUrl.
Create a Backend Endpoint That Calls the Checkout Sessions API
checkout_url.Example handler logic, to adapt to your platform:DODO_PAYMENTS_API_KEY environment variable on the platform you deploy to, and never commit it to code. Allow requests from your GHL domain (CORS), and serve the endpoint from a domain you control, for example https://api.example.com/create-checkout. When you move to live mode, switch the URL to https://live.dodopayments.com/checkouts.Add a Custom Code Element in the GHL Page Builder
- Click the + icon at the top left of the builder to open Quick Add.
- Select Elements from the category list on the left.
- Find Custom Code (also shown as HTML) and drag it onto the page.
- Paste the code below into the element’s code editor, then save it.
Publish and Test on Your Domain
Approach C: Inline (Embedded) Checkout
Approach C embeds the checkout form inside your GHL page, with no redirect and no popup. It uses the same SDK with a container element to mount into. Like Approach B, it needs a backend to create the session.Create a Backend Endpoint That Calls the Checkout Sessions API
{ checkoutUrl }.Add a Container and SDK via Custom Code
- Click the + icon at the top left of the builder to open Quick Add.
- Select Elements from the category list on the left.
- Find Custom Code (also shown as HTML) and drag it onto the page where you want the checkout form to appear.
- Paste the code below into the element’s code editor, then save it.
Verify Your Domain for Wallets (Apple Pay)
/.well-known/apple-developer-merchantid-domain-association. On GHL-hosted pages, use the hosted checkout from Payment Links (Approach A) or skip Apple Pay.Events to Handle
Subscribe the GHL endpoint to the events your workflow acts on. The table suggests a GHL action for each:data.customer.email. Use GHL’s find/create contact by email action to match the payment to the right contact. For every event, see the Webhook Event Guide.
Testing & Going Live
Test in Test Mode
4242 4242 4242 4242 (expiry 06/32, CVV 123), and confirm that the GHL workflow runs and applies the tag or access.Go Live
- Payment Links (A): Replace the link with the product’s live payment link.
- Overlay checkout (B): Point your backend at
https://live.dodopayments.com/checkoutswith your live API key, and setmodeto"live"in the SDK’sInitializecall. - Inline checkout (C): Make the same changes as for overlay checkout, since it uses the same backend endpoint and SDK initialization.
Tips
Troubleshooting
Payment succeeded but nothing happened in GHL
Payment succeeded but nothing happened in GHL
Contact not created or not matched
Contact not created or not matched
Payment isn't showing in GHL's Payments tab
Payment isn't showing in GHL's Payments tab