skills/sales-dodo-payments/SKILL.md
Dodo Payments (dodopayments.com) platform help — developer-first Merchant of Record (MoR) for SaaS, AI, and digital products: sells on your behalf and handles global sales tax/VAT/GST across 220+ countries / 40+ payment methods, with subscriptions, usage/credit billing, one-time payments, embeddable checkout, and license keys. Full REST API (test/live.dodopayments.com, Bearer key) for payments/subscriptions/products/customers/checkout/license-keys/refunds/payouts, Standard-Webhooks-signed events, 9 SDKs, framework adapters, a CLI, and an MCP server. Per-transaction MoR fee, no monthly fee. Use when integrating payments/subscriptions via the API or SDK, verifying webhooks with the standardwebhooks library, choosing MoR vs a payment processor, handling tax/VAT as MoR, or issuing license keys. Do NOT use for merchant-of-record selection across vendors (use /sales-merchant-of-record), checkout-conversion strategy (use /sales-checkout), or general digital-product strategy (use /sales-digital-products).
npx skillsauth add sales-skills/sales sales-dodo-paymentsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
If references/learnings.md exists, read it first for accumulated platform knowledge.
What are you trying to do?
API/SDK or no-code? Code → REST API + a language SDK / framework adapter. Low-code → hosted Checkout Sessions + short links.
Skip-ahead rule: if the user's prompt already provides enough context, skip to Step 2.
| If the question is about... | Route to... |
|---|---|
| Choosing a Merchant of Record across vendors (Paddle/Lemon Squeezy/Polar/Creem/Dodo) | /sales-merchant-of-record {question} |
| Checkout/cart conversion strategy across platforms | /sales-checkout {question} |
| General digital-product selling strategy across tools | /sales-digital-products {question} |
| Generic iPaaS wiring to a CRM/ESP | /sales-integration {question} |
When routing, give the exact command, e.g. "This is a selection question — run: /sales-merchant-of-record MoR vs Stripe for a global SaaS".
Read references/platform-guide.md for the full reference — the MoR model (what Dodo takes liability for), the billing models (subscriptions/usage/credit/one-time), the object map (what's API vs hosted vs SDK), pricing, and quick-start recipes (create a payment; verify a webhook; spin up a checkout session).
Read references/dodo-payments-api-reference.md for the integration surface — base test/live.dodopayments.com, Bearer auth (Developer → API Keys, read-only/read-write), tiered rate limits, the endpoint catalog (payments, subscriptions, products, customers, checkout sessions, license keys/entitlements, discounts, refunds, disputes, payouts, webhooks management), Standard Webhooks signing (webhook-id/webhook-signature/webhook-timestamp via the standardwebhooks library), the 9 SDKs + framework adapters + MCP server + CLI.
Answer using only the relevant section. Don't dump the full reference.
Focus on the user's specific situation:
standardwebhooks. Events are signed per the Standard Webhooks spec (webhook-id/webhook-signature/webhook-timestamp). Use the library (don't hand-roll HMAC); get the signing key from the dashboard or GET /webhooks/{id}/signing-key.test.dodopayments.com key + the Dodo CLI (dodo wh trigger) to forward events locally. CLI mocks are unsigned → use unsafe_unwrap() in tests only, never in prod.If you discover a gotcha, workaround, or tip not covered in references/learnings.md, append it there.
Best-effort from research (2026-06) — API/pricing verified against docs.dodopayments.com; confirm current terms in-account.
/sales-merchant-of-record.test.dodopayments.com (test key) vs live.dodopayments.com (live key) — mixing host + key mode 401s.webhook-id/webhook-signature/webhook-timestamp; the standardwebhooks lib checks signature + timestamp (replay). Hand-rolled checks are the common bug.dodo wh trigger mocks aren't signed — unsafe_unwrap() is test-only; production must verify.X-RateLimit-*, back off on 429./sales-merchant-of-record — Choosing a Merchant of Record across vendors (Dodo vs Paddle/Lemon Squeezy/Polar/Creem/Gumroad vs Stripe+Tax) — selection strategy, MoR-vs-processor tradeoffs/sales-checkout — Checkout/cart conversion strategy (order bumps, upsells, AOV) across platforms/sales-digital-products — Selling digital products (license keys, delivery, pricing) across tools/sales-integration — Wiring Dodo events into a CRM/ESP via webhooks/Zapier/sales-do — Not sure which skill to use? The router matches any sales objective to the right skill. Install: npx skills add sales-skills/sales --skill sales-do -a claude-codeUser says: "How do I charge for my SaaS subscription with Dodo Payments from my backend?"
Skill does: Points to the official SDK (or POST /subscriptions / POST /payments against live.dodopayments.com with Authorization: Bearer), or a hosted Checkout Session (POST /checkouts) / framework adapter (Next.js/Express) for the front end. Stresses verifying the subscription. webhooks* with the standardwebhooks library to provision access, and that Dodo (MoR) handles the tax on the charge. Notes test-mode key + CLI for local dev.
Result: A working subscription charge with reliable event-driven provisioning.
User says: "Dodo is POSTing events to my endpoint — how do I verify them?"
Skill does: Explains events follow Standard Webhooks: headers webhook-id, webhook-signature, webhook-timestamp; verify with the standardwebhooks library using the signing key (dashboard or GET /webhooks/{id}/signing-key), which checks the signature and timestamp (replay protection). Recommends a framework adapter (which wraps this), deduping on webhook-id, and dodo wh trigger for local testing (mocks unsigned → unsafe_unwrap() in tests only).
Result: Authenticated, replay-safe webhook intake.
User says: "I'm a solo dev selling a global SaaS. Dodo Payments or Stripe?"
Skill does: Frames the Merchant-of-Record tradeoff — Dodo becomes seller of record and remits VAT/GST/sales tax worldwide (no per-country tax registration), at ~4% + $0.40 vs Stripe's ~2.9% + 30¢ (where you own tax compliance, even with Stripe Tax which calculates but doesn't remit). Recommends Dodo when global tax compliance overhead outweighs the fee, and routes the cross-vendor decision: "run: /sales-merchant-of-record Dodo vs Paddle vs Lemon Squeezy for indie SaaS."
Result: A clear MoR-vs-processor decision grounded in tax liability + fees.
Symptom: Requests to *.dodopayments.com are rejected.
Cause: Wrong host/key mode (test key against live. or vice-versa), a missing Authorization: Bearer header, or a read-only key used for a write.
Solution: Match host to key — test.dodopayments.com + test key, live.dodopayments.com + live key. Send Authorization: Bearer YOUR_API_KEY, and use a read-write key for create/update. Keys come from Developer → API Keys.
Symptom: Events arrive but verification rejects them.
Cause: Hand-rolled verification, wrong signing key, or verifying a re-serialized body — Dodo uses the Standard Webhooks scheme (webhook-id/webhook-signature/webhook-timestamp).
Solution: Use the standardwebhooks library with the signing key (dashboard or GET /webhooks/{id}/signing-key) over the raw body; it validates signature + timestamp. For local testing use dodo wh trigger (CLI mocks are unsigned — unsafe_unwrap() in tests only). Dedupe on webhook-id.
Symptom: Confusion about MoR fees and tax.
Cause: Dodo is a Merchant of Record — it's the legal seller and remits global VAT/GST/sales tax, so its fee (~4% + $0.40) is higher than a raw processor (~2.9% + 30¢).
Solution: That premium replaces your own multi-jurisdiction tax registration/filing. If you'd rather own tax compliance for a lower fee, a raw processor fits better — weigh it via /sales-merchant-of-record. Payouts are on a schedule (Payouts endpoints), not instant.
tools
Wizlogo (wizlogo.com) platform help — a budget online logo maker (template/style-variation, marketed as "AI") plus a hub of FREE branding tools (business-name, blog-name and slogan generators, business-card maker, invoice generator, color converter, domain search). The pricing traps: the FREE logo is PERSONAL-USE-ONLY; the two cheap paid tiers are RASTER PNG/JPG only — Single (~€39.99 one-time) and Unlimited (~€3.99 per WEEK, recurring) — and VECTOR (SVG/PDF/EPS) is gated to the ~€299.99 Enterprise tier, which also bundles human designer edits and a social kit. Transparent PNG is on all paid plans. Use when making a Wizlogo logo, understanding free-vs-paid or personal-vs-commercial use, which tier unlocks vector/SVG for print, the weekly-subscription billing trap, its free name/slogan generators, or whether it has an API (UI-only — no public API, webhooks, Zapier or MCP). Do NOT use to just generate the business name (use /sales-namelix) or to compare/validate branding tools (use /sales-idea-validation).
tools
VistaPrint platform help (vistaprint.com, a Cimpress company) — the small-business design + print + digital-marketing platform: a free AI Logomaker (4 generations, 60 more after free sign-up) exporting SVG/PNG/PDF at 4000x4000 with no watermark, a free Brand Kit, business cards/flyers/signage/apparel/promo print, and a website builder. THE RIGHTS TRAP: VistaPrint states NO intellectual-property rights transfer on an AI-generated logo — you get usage rights but CANNOT register it for trademark or copyright; only its human designer service transfers full IP. Use when making a VistaPrint logo, asking if you own or can trademark it, running out of AI logo credits, printed colors not matching the screen, bleed/DPI/font file-prep rejections, or asking whether VistaPrint has an API (the consumer site does not — automation runs through the parent Cimpress Open partner-fulfilment API). Do NOT use for Vista Social scheduling (use /sales-vistasocial) or comparing logo tools market-wide (use /sales-idea-validation).
tools
Turbologo (turbologo.com) platform help — a budget AI/DIY logo maker: enter a business name + industry, pick icons and colors, and it proposes logo concepts you refine in an in-browser editor, then pay a one-time fee to download (designing is free, previews are watermarked, downloading is the paywall). Vector SVG/PDF is gated to the mid tier and up; the top tier adds a brand kit (business cards, letterheads, email signatures, social assets). Use when generating a logo in Turbologo, choosing which download tier to buy, vector SVG vs raster PNG, removing the free watermark, the time-limited edit-after-purchase window, pay-to-download pricing questions, whether an AI logo is yours to trademark, or whether Turbologo has an API to bulk-generate logos (it is UI-only — no public API, webhooks, Zapier, or MCP). Do NOT use to generate the business name (use /sales-namelix), compare or validate branding tools across the market (use /sales-idea-validation), or build wider marketing creative (use /sales-canva).
tools
Online Logo Maker (onlinelogomaker.com) platform help — a long-standing free/freemium DIY logo maker: build the mark yourself from icons, shapes, text, and fonts — MANUAL/template-based, NOT enter-a-name-get-AI-concepts. The free pack downloads a LOW-RES 300px PNG with a background; vector SVG, transparent PNG, and 2000px high-res are gated to a one-time lifetime Premium pack (not a subscription). The free tier's commercial-use rights are disputed by reviewers — clean ownership effectively needs Premium, and a shared-icon mark can be non-distinctive. Use for building/editing a logo here, free download vs Premium, vector SVG or transparent PNG, one-time pricing, commercial-use/trademark terms, near-namesake confusion (NOT LogoMaker.com / LogoMakr / Logomakerr.ai), or whether it has an API (UI-only — no API, webhooks, Zapier, MCP). Do NOT use to generate the business name (use /sales-namelix), compare branding tools across the market (use /sales-idea-validation), or build wider creative (use /sales-canva).