메인 콘텐츠로 건너뛰기

새로운 기능

1. 제품 수준 분석

이제 각 제품은 고유한 전용 분석 대시보드를 제공합니다. **Products > [Select a Product]**로 이동하면 해당 제품에 대한 상세 지표를 확인할 수 있으며, 다섯 개의 탭으로 구성되어 있습니다:
Product-Level Analytics
제공 내용
개요총 수익, 성공적인 결제 수, 30일 수익 추세 차트(일별 또는 누적), 필터 가능한 거래 테이블
고객지출 기준 상위 3명의 고객을 포디움 형태로 보여주며 전체 고객 분석 테이블 제공
유지고객 이탈률, 수익 이탈률, 패턴 식별을 위한 이중 선형 추세 차트
구독자상태, 시작일, 다음 청구일, 금액과 함께 해당 제품의 모든 구독 목록
MRR신규 MRR, 확장 MRR, 이탈 MRR, 순 신규 MRR 분해가 포함된 월간 반복 수익 누적 막대 차트
모든 탭에는 날짜 필터(기본값: 전체 기간)가 있어 원하는 기간을 자유롭게 분석할 수 있습니다.
유지 탭을 활용해 높은 이탈률을 보이는 제품을 조기에 파악하고, MRR 탭으로 확장 수익이 월별 이탈 수익을 능가하는지 추적하세요.
자세히 알아보기: Product-Level Analytics

2. Dodo Payments용 Verifi RDR 지원

Dodo Payments는 이제 Verifi가 제공하는 **Visa Rapid Dispute Resolution (RDR)**을 지원합니다. RDR은 적격한 Visa 분쟁을 공식 차지백이 되기 전에 해결하는 자동화된 분쟁 방지 도구입니다. 카드 소지자가 분쟁을 시작하면 RDR이 이를 가로채고 거래 금액이 구성된 USD 한도 이하인 경우 자동으로 환불을 처리합니다. 중요한 이유
이점영향
분쟁 비율 감소RDR로 해결된 분쟁은 Visa의 0.9% 한도에 포함되지 않습니다
분쟁 수수료 없음분쟁당 환불 불가 15 15~25 수수료를 피할 수 있습니다
운영 부담 없음증빙 자료 수집이나 응답 기한 없음
향상된 고객 경험카드 소지자는 즉시 환불을 받습니다
계정 보호Visa의 Dispute Monitoring Program (VDMP)에서 벗어날 수 있습니다
Visa의 0.9% 분쟁 비율 또는 월 100건 이상의 분쟁을 초과하면 VDMP가 발동하며 최대 월 $50,000 이상의 벌금이 부과될 수 있습니다. RDR을 사용하면 이러한 한도보다 훨씬 낮게 유지할 수 있습니다.
작동 방식
  1. 카드 소지자가 은행에 분쟁을 제기합니다
  2. RDR이 정식 차지백이 되기 전에 분쟁을 가로챕니다
  3. 거래 금액이 설정된 한도 이하이면 자동으로 환불을 처리합니다
  4. 분쟁이 즉시 해결되며 분쟁 비율에 포함되지 않습니다
RDR을 통해 자동 환불된 거래는 Dodo Payments 대시보드에서 분쟁 손실로 표시됩니다. 이는 기대된 동작이며, 공식 차지백을 방지하기 위해 자동으로 환불이 처리되었기 때문입니다.
계정에 Verifi RDR을 활성화하려면 support@dodopayments.com으로 문의하여 한도를 구성하세요. 자세히 알아보기: Visa RDR Documentation

3. DodoPayments CLI

브랜드 새롭게 출시된 DodoPayments CLI (dodopayments-cli)로 터미널에서 전체 Dodo Payments 워크플로를 관리하세요. 명령줄을 선호하는 개발자를 위해 설계된 CLI를 사용하면 제품, 결제, 고객, 할인, 라이선스, 애드온, 환불을 관리하고, 편집기를 벗어나지 않고 체크아웃 세션까지 생성할 수 있습니다. 설치
npm install -g dodopayments-cli
주요 명령어
명령어설명
dodo loginAPI 키로 인증 (브라우저 자동 실행)
dodo products list모든 제품 나열
dodo payments list모든 결제 나열
dodo customers create새 고객 생성
dodo checkout new체크아웃 세션 생성 및 URL 수신
dodo wh listenWebSocket을 통해 라이브 테스트 웹훅을 로컬 서버로 전달
dodo wh trigger모의 웹훅 페이로드를 임의의 엔드포인트로 전송
웹훅 테스트 CLI에는 개발을 위한 두 가지 강력한 도구가 포함되어 있습니다:
  • dodo wh listen — WebSocket 연결을 열어 실제 테스트 웹훅을 로컬 서버로 전달하며 시그니처 확인 테스트를 위해 원래 헤더를 유지합니다
  • dodo wh trigger — 구독, 결제, 환불, 분쟁, 라이선스를 포함한 22개 이벤트 유형 전체를 지원하며 대화형으로 모의 웹훅 페이로드를 전송합니다
웹훅 리스너는 테스트 모드 API 키에서만 작동합니다. dodo wh listen을 사용하기 전에 반드시 테스트 모드 키로 로그인하세요.
자세히 알아보기: CLI Documentation

4. 고객 포털 UI 개편

고객 포털이 깔끔하고 통합된 인터페이스로 완전히 재설계되었습니다. 개편된 포털은 좌측 사이드바 탐색과 정리된 섹션으로 구성되어 고객에게 보다 직관적인 셀프서비스 경험을 제공합니다.
Customer Portal UI Revamp
변경 사항
섹션기능
활성 구독플랜 세부정보, 결제 주기, 다음 결제일과 함께 모든 활성 구독 보기
결제 수단저장된 결제 수단 관리, 새 카드 추가, 결제 정보 업데이트
청구 내역다운로드 가능한 PDF 영수증과 함께 과거 청구서 확인
청구 정보이름, 이메일, 전화번호, 청구 주소 편집
구독 세부정보취소 또는 플랜 변경 옵션과 함께 구독 상세 정보 보기
플랜 변경포털 내 Product Collections을 통한 업그레이드 또는 다운그레이드
고객은 개편된 포털에서 활성 구독에 대한 결제 수단을 업데이트하거나 실패한 결제로 보류된 구독을 다시 활성화할 수도 있습니다.
개편된 포털은 라이브 모드에서 https://customer.dodopayments.com/login/{business_id}, 테스트 모드에서 https://test.customer.dodopayments.com/login/{business_id}에서 이용할 수 있습니다.
자세히 알아보기: Customer Portal

5. 인라인 체크아웃에서 결제 수단 업데이트

inline checkout는 이제 구독을 위한 결제 수단 업데이트를 지원합니다. 고객이 활성 구독의 결제 수단을 변경하거나 보류된 구독을 다시 활성화해야 할 때, 업데이트 결제 수단 흐름을 인라인 체크아웃을 통해 페이지 레이아웃 내에서 직접 렌더링하여 매끄럽고 임베디드된 경험을 제공합니다. 작동 방식
  1. Update Payment Method API를 호출하여 payment_link를 가져옵니다:
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});
  1. 반환된 payment_link를 인라인 체크아웃의 checkoutUrl로 사용합니다:
DodoPayments.Checkout.open({
  checkoutUrl: response.payment_link,
  elementId: "dodo-inline-checkout"
});
인라인 프레임은 결제 수단 수집 양식만 렌더링하여 고객이 페이지를 벗어나지 않고도 새 카드 정보를 입력하거나 저장된 결제 수단을 선택할 수 있게 합니다.
보류된 구독의 경우 결제 수단 업데이트 흐름이 남은 비용에 대한 청구를 자동으로 생성합니다. payment.succeededsubscription.active 웹훅을 모니터링하여 재활성화를 확인하세요.
자세히 알아보기: Inline Checkout | Subscription Payment Method Updates

6. 체크아웃 세션용 세금 ID 자동 입력 지원

체크아웃 세션을 생성할 때 tax_id 매개변수를 사용하여 세금 ID(예: VAT 번호, GST 번호)를 미리 입력할 수 있습니다. 이는 고객의 세금 식별 번호를 이미 알고 있는 B2B 거래에 이상적입니다. 세금 ID가 자동 입력되면 체크아웃 폼에서 해당 필드가 사전 입력되고 잠금 상태로 표시됩니다.
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  customer: { customer_id: 'cus_123' },
  billing_address: { country: 'DE' },
  tax_id: 'DE999999999',
  return_url: 'https://yoursite.com/return'
});
tax_id 매개변수에는 최소 country 필드가 있는 billing_address이 필요합니다. 세금 자격은 실시간으로 검증되며, 적격한 B2B 거래에는 리버스 차지 규칙이 자동으로 적용됩니다.
allow_customer_editing_tax_id 피처 플래그를 사용하여 고객이 자동 입력된 세금 ID를 변경할 수 있는지 제어하고 allow_tax_id을 통해 체크아웃에서 세금 ID 표시 여부를 전환하세요. 자세히 알아보기: Checkout Sessions - Tax ID | B2B Payments

7. 리턴 URL 리디렉션에 라이선스 키 및 이메일 포함

고객이 체크아웃을 완료하면 Dodo Payments는 기존 payment_id/subscription_idstatus 매개변수 외에 license_keyemailreturn_url 리디렉션에 쿼리 매개변수로 추가합니다. 추가된 쿼리 매개변수
매개변수유형조건
payment_idstring일회성 결제에 항상 포함
subscription_idstring구독 결제에 항상 포함
statusstring항상 포함
license_keystring제품에 라이선스 키가 활성화된 경우 포함(여러 개는 쉼표로 구분)
emailstring고객 기록에 이메일이 있는 경우 포함
예시 리디렉션 URL:
# One-time payment with license key
https://yoursite.com/return?payment_id=pay_xxx&status=succeeded&license_key=LK-001&email=customer%40example.com

# Subscription with multiple license keys
https://yoursite.com/return?subscription_id=sub_xxx&status=active&license_key=LK-001,LK-002&email=customer%40example.com
이러한 쿼리 매개변수를 사용하여 리턴 페이지에서 라이선스 키를 표시하거나 확인 이메일을 즉시 전송하세요. 추가 API 호출이 필요 없습니다.
자세히 알아보기: Checkout Sessions - Return URL | License Keys in Return URL

8. 고객 이메일 업데이트 API

PATCH /customers/{customer_id} 엔드포인트는 이제 고객 이메일 주소를 프로그래밍 방식으로 업데이트하는 기능을 지원합니다. 하나의 API 호출로 이름, 전화번호, 메타데이터와 함께 이메일을 업데이트하세요.
await client.customers.update('cus_123', {
  email: 'newemail@example.com',
  name: 'Updated Name'
});
업데이트 가능한 필드
필드유형설명
emailstring | null고객 이메일 주소
namestring | null고객 표시 이름
phone_numberstring | null국제 형식 전화번호
metadataobject | null사용자 지정 키-값 쌍
고객 이메일 업데이트는 고객 포털(셀프서비스), 대시보드 및 CLI에서 dodo customers update를 통해서도 이용할 수 있습니다.
자세히 알아보기: Customer Update API | Customer Management

9. Bun 어댑터 출시

@dodopayments/bun을 소개합니다 — Bun의 네이티브 서버(Bun.serve())를 위한 전용 프레임워크 어댑터입니다. 체크아웃, 고객 포털, 웹훅을 단 몇 줄의 코드로 Bun에 통합하세요. 설치
bun add @dodopayments/bun
빠른 설정
import { Checkout, CustomerPortal, Webhooks } from "@dodopayments/bun";

Bun.serve({
  routes: {
    "/api/checkout": Checkout({
      bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
      returnUrl: process.env.DODO_PAYMENTS_RETURN_URL!,
      environment: process.env.DODO_PAYMENTS_ENVIRONMENT!,
    }),
    "/api/customer-portal": CustomerPortal({
      bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
      environment: process.env.DODO_PAYMENTS_ENVIRONMENT!,
    }),
    "/api/webhooks": Webhooks({
      webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY!,
      onPaymentSucceeded: async (payload) => {
        console.log("Payment succeeded:", payload.data.payment_id);
      },
      onSubscriptionActive: async (payload) => {
        console.log("Subscription active:", payload.data.subscription_id);
      },
    }),
  },
});
Bun 어댑터는 세 가지 체크아웃 흐름(정적, 동적, 세션 기반), 고객 포털 세션 생성, 시그니처 검증 및 Zod 유효성 검사를 포함한 22개 이벤트 유형 전반의 보안 웹훅 처리를 지원합니다.
Bun 어댑터는 Next.js, Nuxt, Express, Fastify, Hono, Astro, SvelteKit, Remix, TanStack Start, Better Auth 및 Convex를 포함한 11개의 프레임워크 어댑터 가족에 합류합니다.
자세히 알아보기: Bun Adapter Documentation | Framework Adapters Overview