> ## 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.75.0 (January 23, 2026)

> 제품 컬렉션, GBP 일회성 결제를 위한 RevolutPay 및 Billie 결제 수단, 결제 세션 미리보기, 요금제 변경 요청 시 메타데이터, invoice_url 필드, 할인 유효성 검사 엔드포인트, 향상된 대시보드 필터링

## 새로운 기능

### 1. **제품 컬렉션**

고객 포털 내에서 통합 결제 경험, 요금제 선택, 원활한 업그레이드/다운그레이드 경로를 위해 관련 제품들을 함께 묶습니다.

<Frame>
  <img src="https://mintcdn.com/dodopayments/2YrxTqbaYgAm54C_/images/product-collection/checkout-page.png?fit=max&auto=format&n=2YrxTqbaYgAm54C_&q=85&s=1890932384bc32c8126c7993f3581855" alt="여러 계획 옵션을 보여주는 제품 컬렉션 결제 페이지" style={{ maxHeight: '500px', width: 'auto' }} width="1440" height="960" data-path="images/product-collection/checkout-page.png" />
</Frame>

**주요 이점**

* **컬렉션 기반 결제**: 컬렉션의 모든 제품을 하나의 결제 뷰에 표시하여 고객이 비교하고 원하는 요금제를 선택할 수 있도록 합니다.
* **체계적인 제품 관리**: 관련 제품(예: Starter, Pro, Enterprise)을 하나의 컬렉션 아래에 그룹화
* **고객 포털 통합**: 동일 컬렉션 내 제품 간 업그레이드 또는 다운그레이드를 가능하게 함
* **판매자 제어**: 각 컬렉션에서 제품을 활성화, 비활성화 및 재정렬

**작동 방식**

컬렉션을 위한 결제 세션 만들기:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_collection_id: 'pdc_abc123',
  product_cart: [], // Required: pass an empty array for collection checkout
  return_url: 'https://yoursite.com/return'
});

// Redirect customer to the checkout
window.location.href = session.checkout_url;
```

<Check>
  결과: 고객이 컬렉션의 모든 사용 가능한 제품을 보고 선택할 수 있는 통합 결제 경험.
</Check>

<Info>
  컬렉션 결제는 고객이 구매 전에 요금제를 나란히 비교하도록 하려는 구독 비즈니스에 이상적입니다.
</Info>

자세히 보기: [Product Collections Guide](/features/product-collections)

### 2. **GBP 통화를 위한 RevolutPay 및 Billie 결제 수단**

RevolutPay 및 Billie가 이제 GBP 일회성 결제 거래에 전 세계적으로 제공되어 고객에게 결제 방식의 유연성을 제공합니다.

**새로운 결제 수단**

| 결제 수단          | 사용 가능 국가 | 통화  | 구독 지원      |
| -------------- | -------- | --- | ---------- |
| **RevolutPay** | 전 세계     | GBP | 아니요 (일회성만) |
| **Billie**     | 전 세계     | GBP | 아니요 (일회성만) |

* **RevolutPay** – 전 세계 Revolut 사용자에게 빠르고 원활한 결제 제공
* **Billie** – 기업이 고객에게 유연한 결제 조건을 제공할 수 있도록 하는 B2B 후불 결제 솔루션

<Info>
  이러한 결제 수단은 GBP 거래에 자동으로 제공되며 추가 구성은 필요하지 않습니다.
</Info>

자세히 보기: [Payment Methods](/features/payment-methods)

### 3. **결제 세션 미리보기**

결제 세션을 생성하기 전에 미리보기하여 정확한 가격, 세금, 할인 및 합계를 계산합니다. 고객이 결제 단계로 진행하기 전에 실제 가격을 표시합니다.

**작동 방식**

```typescript theme={null}
const preview = await client.checkoutSessions.preview({
  product_cart: [
    { product_id: 'pdt_123', quantity: 1 }
  ],
  billing_address: {
    country: 'US',
    state: 'CA',
    zipcode: '94102'
  },
  discount_code: 'SAVE20'
});

console.log('Subtotal:', preview.current_breakup.subtotal);
console.log('Tax:', preview.current_breakup.tax);
console.log('Discount:', preview.current_breakup.discount);
console.log('Total:', preview.total_price);
```

**사용 사례**

* **맞춤 가격 표시**: 결제 전에 세금을 포함한 정확한 합계를 보여줍니다.
* **할인 유효성 검사**: 할인 코드를 확인하고 고객에게 절약액을 보여줍니다.
* **다중 통화 지원**: 다양한 통화의 가격을 미리보기합니다.
* **장바구니 요약**: 실시간 가격으로 맞춤 장바구니 UI 구축

<Card title="Preview API Reference" icon="code" href="/api-reference/checkout-sessions/preview">
  전체 미리보기 엔드포인트 설명서를 확인하세요.
</Card>

### 4. **요금제 변경 요청 시 메타데이터 지원**

요금제를 변경할 때 맞춤 메타데이터를 전달하여 요금제 전환 중 내부 시스템과의 통합 및 추적을 개선합니다.

```javascript theme={null}
// Adding metadata when changing a subscription plan
await client.subscriptions.changePlan('sub_123', {
  product_id: 'pdt_premium',
  proration_billing_mode: 'prorated_immediately',
  quantity: 1,
  metadata: {
    upgrade_reason: 'feature_request',
    previous_plan: 'basic',
    sales_rep: 'john@company.com'
  }
});
```

**사용 사례**

* **업그레이드/다운그레이드 이유 추적**: 고객이 요금제를 변경한 이유 저장
* **CRM 기록 연결**: 요금제 변경을 영업 활동과 연계
* **내부 분류**: 보고 및 분석을 위해 요금제 변경에 태그 지정
* **감사 추적**: 누가 요금제 변경을 시작했는지 기록 유지

<Info>
  메타데이터는 웹훅 이벤트에 포함되어 있어 맞춤 데이터를 사용한 요금제 변경 처리가 용이합니다.
</Info>

자세히 보기: [Metadata Guide](/api-reference/metadata) | [Change Plan API](/api-reference/subscriptions/change-plan)

### 5. **결제 응답 및 결제 링크 응답의 `invoice_url` 필드**

결제 응답과 결제 링크 응답에 `invoice_url` 필드가 추가되어 각 결제와 연결된 송장에 직접 액세스할 수 있습니다.

```json theme={null}
{
  "payment_id": "pay_2IjeQm4hqU6RA4Z4kwDee",
  "status": "succeeded",
  "invoice_url": "https://dodopayments.com/invoices/inv_2IsUnWGtRKFLxk7xAQeyt",
  "total_amount": 9900,
  "currency": "USD",
  // ... other fields
}
```

**사용 사례**

* **고객 커뮤니케이션**: 고객에게 송장 링크 직접 전송
* **회계 통합**: 결제를 회계 소프트웨어의 송장과 연결
* **셀프서비스 포털**: 고객이 송장에 쉽게 접근할 수 있도록 허용
* **기록 보관**: 송장 문서에 대한 직접 참조 유지

<Card title="Get Payment API" icon="code" href="/api-reference/payments/get-payments-1">
  결제 응답 스키마 보기.
</Card>

### 6. **할인 코드 이름으로 할인 유효성 검사 엔드포인트**

내부 할인 ID 대신 코드 이름(예: "SAVE20")으로 할인 코드를 검증하고 검색할 수 있는 새로운 API 엔드포인트. 결제 시 적용하기 전에 할인 적합성을 확인하세요.

```javascript theme={null}
// Validate a discount code before checkout
const discount = await client.discounts.retrieveByCode('SAVE20');

console.log('Discount type:', discount.type);
console.log('Discount value:', discount.amount);
console.log('Valid until:', discount.expires_at);
```

**이점**

* **결제 전 유효성 검사**: 결제 세션을 만들기 전에 할인 코드 확인
* **실시간 피드백**: 고객에게 코드 유효 여부 표시
* **오류 처리**: 유효하지 않거나 만료된 코드를 조기 차단
* **맞춤 할인 UI**: 즉각적인 유효성 검사를 제공하는 할인 코드 입력 필드 구축

<Card title="Get Discount by Code API" icon="code" href="/api-reference/discounts/get-discount-by-code">
  전체 엔드포인트 설명서를 확인하세요.
</Card>

### 7. **고객, 할인, 라이선스 키에 대한 향상된 필터링 기능**

고객, 할인 및 라이선스 키를 나열하기 위한 새로운 API 필터로 데이터를 프로그래밍 방식으로 더 쉽게 검색하고 관리할 수 있습니다.

**고객 API 필터**

| 필터               | 설명                             |
| ---------------- | ------------------------------ |
| `email`          | 고객 이메일로 필터링                    |
| `name`           | 고객 이름으로 필터링(부분 일치, 대소문자 구분 없음) |
| `created_at_gte` | 이 타임스탬프 이후에 생성된 고객 필터링         |
| `created_at_lte` | 이 타임스탬프 이전에 생성된 고객 필터링         |

```javascript theme={null}
// Find customers by name created in the last 30 days
const customers = await client.customers.list({
  name: 'John',
  created_at_gte: '2026-01-01T00:00:00Z'
});
```

**할인 API 필터**

| 필터              | 설명                                      |
| --------------- | --------------------------------------- |
| `code`          | 할인 코드로 필터링(부분 일치, 대소문자 구분 없음)           |
| `discount_type` | 할인 유형(퍼센트)으로 필터링                        |
| `active`        | 활성 상태로 필터링(true = 만료되지 않음, false = 만료됨) |
| `product_id`    | 제품 제한으로 필터링(해당 제품에만 적용되는 할인만)           |

```javascript theme={null}
// Find active percentage discounts for a specific product
const discounts = await client.discounts.list({
  active: true,
  discount_type: 'percentage',
  product_id: 'pdt_123'
});
```

**라이선스 키 API 필터**

| 필터               | 설명                                              |
| ---------------- | ----------------------------------------------- |
| `customer_id`    | 고객 ID로 필터링                                      |
| `status`         | 라이선스 키 상태로 필터링(`active`, `expired`, `disabled`) |
| `product_id`     | 제품 ID로 필터링                                      |
| `created_at_gte` | 이 타임스탬프 이후에 생성된 라이선스 키 필터링                      |
| `created_at_lte` | 이 타임스탬프 이전에 생성된 라이선스 키 필터링                      |

```javascript theme={null}
// Find active license keys for a specific product
const licenseKeys = await client.licenseKeys.list({
  status: 'active',
  product_id: 'pdt_123'
});
```

<CardGroup cols={3}>
  <Card title="List Customers API" icon="users" href="/api-reference/customers/get-customers">
    전체 고객 API 설명서를 확인하세요.
  </Card>

  <Card title="List Discounts API" icon="percent" href="/api-reference/discounts/list-discounts">
    전체 할인 API 설명서를 확인하세요.
  </Card>

  <Card title="List License Keys API" icon="key" href="/api-reference/licenses/list-license-keys">
    전체 라이선스 키 API 설명서를 확인하세요.
  </Card>
</CardGroup>

### 8. **대시보드의 UI/UX 개선**

이번 릴리스에는 보다 직관적이고 세련된 경험을 위한 대시보드 전반의 다양한 UI/UX 개선 사항이 포함되어 있습니다.

**주요 내용**

* 향상된 탐색 및 레이아웃 일관성
* 향상된 데이터 테이블 상호작용
* 더 나은 로딩 상태 및 피드백
* 정교한 시각적 디자인 요소
* 향상된 모바일 반응성
