> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# v1.84.0 (2026년 2월 20일)

> 제품 수준 분석, Verifi RDR 분쟁 예방, DodoPayments CLI, 고객 포털 UI 개편, 인라인 체크아웃 결제 수단 업데이트, 세금 ID 자동 입력, 리턴 URL 쿼리 매개변수, 고객 이메일 업데이트 API 및 Bun 어댑터

## 새로운 기능

### 1. **제품 수준 분석**

이제 각 제품은 고유한 **전용 분석 대시보드**를 제공합니다. \*\*Products > \[Select a Product]\*\*로 이동하면 해당 제품에 대한 상세 지표를 확인할 수 있으며, 다섯 개의 탭으로 구성되어 있습니다:

<Frame>
  <img src="https://mintcdn.com/dodopayments/QP0nYJEAkU83kGFn/images/product-analytics/overview.png?fit=max&auto=format&n=QP0nYJEAkU83kGFn&q=85&s=f2ce88b712ba0205839cd334d0f2a367" alt="제품 수준 분석" style={{ maxHeight: '500px', width: 'auto' }} width="2368" height="1564" data-path="images/product-analytics/overview.png" />
</Frame>

| 탭       | 제공 내용                                                      |
| ------- | ---------------------------------------------------------- |
| **개요**  | 총 수익, 성공적인 결제 수, 30일 수익 추세 차트(일별 또는 누적), 필터 가능한 거래 테이블     |
| **고객**  | 지출 기준 상위 3명의 고객을 포디움 형태로 보여주며 전체 고객 분석 테이블 제공              |
| **유지**  | 고객 이탈률, 수익 이탈률, 패턴 식별을 위한 이중 선형 추세 차트                      |
| **구독자** | 상태, 시작일, 다음 청구일, 금액과 함께 해당 제품의 모든 구독 목록                    |
| **MRR** | 신규 MRR, 확장 MRR, 이탈 MRR, 순 신규 MRR 분해가 포함된 월간 반복 수익 누적 막대 차트 |

모든 탭에는 **날짜 필터**(기본값: 전체 기간)가 있어 원하는 기간을 자유롭게 분석할 수 있습니다.

<Tip>
  유지 탭을 활용해 높은 이탈률을 보이는 제품을 조기에 파악하고, MRR 탭으로 확장 수익이 월별 이탈 수익을 능가하는지 추적하세요.
</Tip>

자세히 알아보기: [Product-Level Analytics](/features/analytics-and-reporting#product-level-analytics)

### 2. **Dodo Payments용 Verifi RDR 지원**

Dodo Payments는 이제 Verifi가 제공하는 \*\*Visa Rapid Dispute Resolution (RDR)\*\*을 지원합니다. RDR은 적격한 Visa 분쟁을 공식 차지백이 되기 전에 해결하는 자동화된 분쟁 방지 도구입니다. 카드 소지자가 분쟁을 시작하면 RDR이 이를 가로채고 거래 금액이 구성된 USD 한도 이하인 경우 자동으로 환불을 처리합니다.

**중요한 이유**

| 혜택                  | 영향                                                            |
| ------------------- | ------------------------------------------------------------- |
| **분쟁 비율 감소**        | RDR로 해결된 분쟁은 Visa의 0.9% 임계값에 포함되지 않음                          |
| **분쟁 수수료는 여전히 적용됨** | RDR로 해결된 거래에 대해 분쟁 수수료가 여전히 부과됨 - 이는 Visa와의 분쟁 대리를 위한 비용을 포함함 |
| **운영 오버헤드 없음**      | 증거 수집이나 응답 마감 기한 없음                                           |
| **향상된 고객 경험**       | 카드 소지자는 즉시 환불을 받음                                             |
| **계정 보호**           | Visa의 분쟁 모니터링 프로그램(VDMP)에 포함되지 않음                             |

<Warning>
  Visa의 0.9% 분쟁 비율 또는 월 100건 이상의 분쟁을 초과하면 VDMP가 발동하며 최대 월 \$50,000 이상의 벌금이 부과될 수 있습니다. RDR을 사용하면 이러한 한도보다 훨씬 낮게 유지할 수 있습니다.
</Warning>

**작동 방식**

1. 카드 소지자가 은행에 분쟁을 제기합니다
2. RDR이 정식 차지백이 되기 전에 분쟁을 가로챕니다
3. 거래 금액이 설정된 한도 이하이면 자동으로 환불을 처리합니다
4. 분쟁이 즉시 해결되며 **분쟁 비율에 포함되지 않습니다**

<Info>
  RDR을 통해 자동 환불된 거래는 Dodo Payments 대시보드에서 **분쟁 손실**로 표시됩니다. 이는 기대된 동작이며, 공식 차지백을 방지하기 위해 자동으로 환불이 처리되었기 때문입니다.
</Info>

계정에 Verifi RDR을 활성화하려면 **[support@dodopayments.com](mailto:support@dodopayments.com)**으로 문의하여 한도를 구성하세요.

자세히 알아보기: [Visa RDR Documentation](/features/transactions/disputes#visa-rapid-dispute-resolution-rdr)

### 3. **DodoPayments CLI**

브랜드 새롭게 출시된 **DodoPayments CLI** (`dodopayments-cli`)로 터미널에서 전체 Dodo Payments 워크플로를 관리하세요. 명령줄을 선호하는 개발자를 위해 설계된 CLI를 사용하면 제품, 결제, 고객, 할인, 라이선스, 애드온, 환불을 관리하고, 편집기를 벗어나지 않고 체크아웃 세션까지 생성할 수 있습니다.

**설치**

<CodeGroup>
  ```bash npm (Recommended) theme={null}
  npm install -g dodopayments-cli
  ```

  ```bash Bun theme={null}
  bun install -g dodopayments-cli
  ```
</CodeGroup>

**주요 명령어**

| 명령어                     | 설명                                  |
| ----------------------- | ----------------------------------- |
| `dodo login`            | API 키로 인증 (브라우저 자동 실행)              |
| `dodo products list`    | 모든 제품 나열                            |
| `dodo payments list`    | 모든 결제 나열                            |
| `dodo customers create` | 새 고객 생성                             |
| `dodo checkout new`     | 체크아웃 세션 생성 및 URL 수신                 |
| `dodo wh listen`        | WebSocket을 통해 라이브 테스트 웹훅을 로컬 서버로 전달 |
| `dodo wh trigger`       | 모의 웹훅 페이로드를 임의의 엔드포인트로 전송           |

**웹훅 테스트**

CLI에는 개발을 위한 두 가지 강력한 도구가 포함되어 있습니다:

* **`dodo wh listen`** -- WebSocket 연결을 열어 실제 테스트 웹훅을 로컬 서버로 전달하며 시그니처 확인 테스트를 위해 원래 헤더를 유지합니다
* **`dodo wh trigger`** -- 구독, 결제, 환불, 분쟁, 라이선스를 포함한 22개 이벤트 유형 전체를 지원하며 대화형으로 모의 웹훅 페이로드를 전송합니다

<Tip>
  웹훅 리스너는 **테스트 모드** API 키에서만 작동합니다. `dodo wh listen`을 사용하기 전에 반드시 테스트 모드 키로 로그인하세요.
</Tip>

자세히 알아보기: [CLI Documentation](/developer-resources/sdks/cli)

### 4. **고객 포털 UI 개편**

고객 포털이 깔끔하고 통합된 인터페이스로 완전히 재설계되었습니다. 개편된 포털은 좌측 사이드바 탐색과 정리된 섹션으로 구성되어 고객에게 보다 직관적인 셀프서비스 경험을 제공합니다.

<Frame>
  <img src="https://mintcdn.com/dodopayments/kCngKZVrb0rZMS1f/images/customer-portal/new-portal.png?fit=max&auto=format&n=kCngKZVrb0rZMS1f&q=85&s=9431b2e24142e47cb39dc84c1a0303fe" alt="고객 포털 UI 개편" style={{ maxHeight: '500px', width: 'auto' }} width="2876" height="1568" data-path="images/customer-portal/new-portal.png" />
</Frame>

**변경 사항**

| 섹션          | 기능                                           |
| ----------- | -------------------------------------------- |
| **활성 구독**   | 플랜 세부정보, 결제 주기, 다음 결제일과 함께 모든 활성 구독 보기       |
| **결제 수단**   | 저장된 결제 수단 관리, 새 카드 추가, 결제 정보 업데이트            |
| **청구 내역**   | 다운로드 가능한 PDF 영수증과 함께 과거 청구서 확인               |
| **청구 정보**   | 이름, 이메일, 전화번호, 청구 주소 편집                      |
| **구독 세부정보** | 취소 또는 플랜 변경 옵션과 함께 구독 상세 정보 보기               |
| **플랜 변경**   | 포털 내 Product Collections을 통한 업그레이드 또는 다운그레이드 |

고객은 개편된 포털에서 활성 구독에 대한 결제 수단을 업데이트하거나 실패한 결제로 보류된 구독을 다시 활성화할 수도 있습니다.

<Check>
  개편된 포털은 라이브 모드에서 `https://customer.dodopayments.com/login/{business_id}`, 테스트 모드에서 `https://test.customer.dodopayments.com/login/{business_id}`에서 이용할 수 있습니다.
</Check>

자세히 알아보기: [Customer Portal](/features/customer-portal)

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

[inline checkout](/developer-resources/inline-checkout)는 이제 구독을 위한 **결제 수단 업데이트**를 지원합니다. 고객이 활성 구독의 결제 수단을 변경하거나 보류된 구독을 다시 활성화해야 할 때, 업데이트 결제 수단 흐름을 인라인 체크아웃을 통해 페이지 레이아웃 내에서 직접 렌더링하여 매끄럽고 임베디드된 경험을 제공합니다.

**작동 방식**

1. Update Payment Method API를 호출하여 `payment_link`를 가져옵니다:

```typescript theme={null}
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
  type: 'new',
  return_url: 'https://example.com/return'
});
```

2. 반환된 `payment_link`를 인라인 체크아웃의 `checkoutUrl`로 사용합니다:

```typescript theme={null}
DodoPayments.Checkout.open({
  checkoutUrl: response.payment_link,
  elementId: "dodo-inline-checkout"
});
```

인라인 프레임은 결제 수단 수집 양식만 렌더링하여 고객이 페이지를 벗어나지 않고도 새 카드 정보를 입력하거나 저장된 결제 수단을 선택할 수 있게 합니다.

<Tip>
  보류된 구독의 경우 결제 수단 업데이트 흐름이 남은 비용에 대한 청구를 자동으로 생성합니다. `payment.succeeded` 및 `subscription.active` 웹훅을 모니터링하여 재활성화를 확인하세요.
</Tip>

자세히 알아보기: [Inline Checkout](/developer-resources/inline-checkout) | [Subscription Payment Method Updates](/features/subscription#update-payment-method-for-active-subscription)

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

체크아웃 세션을 생성할 때 `tax_id` 매개변수를 사용하여 **세금 ID**(예: VAT 번호, GST 번호)를 미리 입력할 수 있습니다. 이는 고객의 세금 식별 번호를 이미 알고 있는 B2B 거래에 이상적입니다. 세금 ID가 자동 입력되면 체크아웃 폼에서 해당 필드가 사전 입력되고 잠금 상태로 표시됩니다.

```typescript theme={null}
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'
});
```

<Info>
  `tax_id` 매개변수에는 최소 `country` 필드가 있는 `billing_address`이 필요합니다. 세금 자격은 실시간으로 검증되며, 적격한 B2B 거래에는 리버스 차지 규칙이 자동으로 적용됩니다.
</Info>

`allow_customer_editing_tax_id` 피처 플래그를 사용하여 고객이 자동 입력된 세금 ID를 변경할 수 있는지 제어하고 `allow_tax_id`을 통해 체크아웃에서 세금 ID 표시 여부를 전환하세요.

자세히 알아보기: [Checkout Sessions - Tax ID](/developer-resources/checkout-session) | [B2B Payments](/features/b2b-payments)

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

고객이 체크아웃을 완료하면 Dodo Payments는 기존 `payment_id`/`subscription_id` 및 `status` 매개변수 외에 `license_key` 및 `email`를 `return_url` 리디렉션에 쿼리 매개변수로 추가합니다.

**추가된 쿼리 매개변수**

| 매개변수              | 유형       | 조건                                   |
| ----------------- | -------- | ------------------------------------ |
| `payment_id`      | `string` | 일회성 결제에 항상 포함                        |
| `subscription_id` | `string` | 구독 결제에 항상 포함                         |
| `status`          | `string` | 항상 포함                                |
| `license_key`     | `string` | 제품에 라이선스 키가 활성화된 경우 포함(여러 개는 쉼표로 구분) |
| `email`           | `string` | 고객 기록에 이메일이 있는 경우 포함                 |

**예시 리디렉션 URL:**

```text theme={null}
# 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
```

<Tip>
  이러한 쿼리 매개변수를 사용하여 리턴 페이지에서 라이선스 키를 표시하거나 확인 이메일을 즉시 전송하세요. 추가 API 호출이 필요 없습니다.
</Tip>

자세히 알아보기: [Checkout Sessions - Return URL](/developer-resources/checkout-session) | [License Keys in Return URL](/features/license-keys#license-keys-in-return-url)

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

`PATCH /customers/{customer_id}` 엔드포인트는 이제 고객 이메일 주소를 프로그래밍 방식으로 업데이트하는 기능을 지원합니다. 하나의 API 호출로 이름, 전화번호, 메타데이터와 함께 이메일을 업데이트하세요.

```typescript theme={null}
await client.customers.update('cus_123', {
  email: 'newemail@example.com',
  name: 'Updated Name'
});
```

**업데이트 가능한 필드**

| 필드             | 유형               | 설명           |
| -------------- | ---------------- | ------------ |
| `email`        | `string \| null` | 고객 이메일 주소    |
| `name`         | `string \| null` | 고객 표시 이름     |
| `phone_number` | `string \| null` | 국제 형식 전화번호   |
| `metadata`     | `object \| null` | 사용자 지정 키-값 쌍 |

<Info>
  고객 이메일 업데이트는 고객 포털(셀프서비스), 대시보드 및 CLI에서 `dodo customers update`를 통해서도 이용할 수 있습니다.
</Info>

자세히 알아보기: [Customer Update API](/api-reference/customers/patch-customer) | [Customer Management](/features/customers)

### 9. **Bun 어댑터 출시**

`@dodopayments/bun`을 소개합니다 -- [Bun](https://bun.sh)의 네이티브 서버(`Bun.serve()`)를 위한 전용 프레임워크 어댑터입니다. 체크아웃, 고객 포털, 웹훅을 단 몇 줄의 코드로 Bun에 통합하세요.

**설치**

```bash theme={null}
bun add @dodopayments/bun
```

**빠른 설정**

```typescript theme={null}
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개 이벤트 유형 전반의 보안 웹훅 처리를 지원합니다.

<Check>
  Bun 어댑터는 Next.js, Nuxt, Express, Fastify, Hono, Astro, SvelteKit, Remix, TanStack Start, Better Auth 및 Convex를 포함한 11개의 프레임워크 어댑터 가족에 합류합니다.
</Check>

자세히 알아보기: [Bun Adapter Documentation](/developer-resources/bun-adaptor) | [Framework Adapters Overview](/developer-resources/framework-adaptors)
