> ## 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.70.0 (2025년 12월 24일)

> 인라인 체크아웃 지원, 기존 결제 수단을 사용한 즉시 체크아웃, 대시보드에서 구독 계획 관리, 짧은 결제 링크 생성, 성공 페이지를 건너뛰고 즉시 리디렉션, 모든 비즈니스를 위한 주문형 구독 활성화

## 새로운 기능 🚀

1. **인라인 체크아웃 - 완전 통합된 체크아웃 경험 (베타)**

   Dodo Payments 체크아웃을 웹사이트에 직접 임베드하여 매끄럽고 브랜드화된 결제 경험을 제공합니다. 모달로 열리는 오버레이 체크아웃과 달리, 인라인 체크아웃은 결제 양식을 페이지 레이아웃에 직접 임베드합니다.

   <Frame>
     <img src="https://mintcdn.com/dodopayments/HpxJAc8zNlxzewa_/images/inline-checkout/cover.png?fit=max&auto=format&n=HpxJAc8zNlxzewa_&q=85&s=99c1a92ef01680248a421d3f057b02cd" alt="인라인 결제 커버 이미지" style={{ maxHeight: '500px', width: 'auto' }} width="839" height="565" data-path="images/inline-checkout/cover.png" />
   </Frame>

   ### 이점

   * **완전 통합**: 웹사이트와 매끄럽게 어우러지는 체크아웃 경험 생성
   * **맞춤형 주문 요약**: 체크아웃과 실시간으로 동기화되는 맞춤형 UI 구축
   * **최대 제어**: 체크아웃 레이아웃 및 디자인에 대한 완전한 제어
   * **PCI 준수**: Dodo Payments는 모든 민감한 결제 정보를 안전하게 처리
   * **실시간 동기화**: SDK 이벤트를 사용하여 UI를 체크아웃 상태와 동기화

   ### 작동 방식

   SDK를 `displayType: 'inline'`로 초기화하고 체크아웃을 컨테이너 요소에 포함하세요:

   ```typescript theme={null}
   import { DodoPayments } from "dodopayments-checkout";

   // Initialize the SDK for inline mode
   DodoPayments.Initialize({
     mode: "test",
     displayType: "inline",
     onEvent: (event) => {
       if (event.event_type === "checkout.breakdown") {
         // Update your UI with real-time tax and total calculations
         const breakdown = event.data?.message;
       }
     },
   });

   // Open checkout in a specific container
   DodoPayments.Checkout.open({
     checkoutUrl: "https://test.checkout.dodopayments.com/session/cks_123",
     elementId: "dodo-inline-checkout" // ID of the container element
   });
   ```

   ### 주요 기능

   * **실시간 세부 내역 이벤트**: 고객이 정보를 입력할 때 `checkout.breakdown` 이벤트를 수신합니다
   * **맞춤 주문 요약**: 실시간으로 업데이트되는 자체 가격 표시를 구축하세요
   * **무결점 통합**: 체크아웃 프레임이 결제 수집을 처리하는 동안 레이아웃은 직접 제어합니다
   * **SDK 메서드**: `open()`, `close()`, `isOpen()`을 사용하여 체크아웃을 프로그래밍 방식으로 제어하세요

   <Check>
     결과: 브랜드에 맞는 완전 통합된 체크아웃 경험으로 결제 흐름을 최대한 제어할 수 있습니다.
   </Check>

   <Tip>
     체크아웃 디자인을 최대한 제어하려면 인라인 체크아웃을 사용하세요. 기존 페이지를 거의 변경하지 않고 빠르게 통합하려면 [오버레이 체크아웃](/developer-resources/overlay-checkout)을 사용하세요.
   </Tip>

   자세히 알아보기: [인라인 체크아웃 가이드](/developer-resources/inline-checkout)

2. **기존 결제 수단을 사용하여 결제, 구독, 체크아웃 생성하기**\
   저장된 결제 수단을 활용해 체크아웃 흐름을 간소화하세요. 새로운 `payment_method_id` 매개변수를 통해 고객이 이전에 저장한 결제 수단을 사용하여 결제, 구독 또는 체크아웃 세션을 만들 수 있습니다.

   ### 이점

   * **더 빠른 체크아웃**: 재방문 고객의 결제 수단 수집 생략
   * **원클릭 구매**: 저장된 결제 수단으로 즉시 구매 가능
   * **구독 관리**: 기존 결제 수단을 사용하여 쉽게 구독 생성
   * **개선된 전환율**: 재방문 고객의 체크아웃 마찰 감소

   ### 작동 방식

   체크아웃 세션, 결제 또는 구독을 생성할 때 `payment_method_id`를 사용하세요:

   <Tabs>
     <Tab title="Checkout Sessions">
       ```javascript theme={null}
       const session = await client.checkoutSessions.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         customer: {
           customer_id: 'cus_123'
         },
         payment_method_id: 'pm_abc123',
         confirm: true
       });
       ```
     </Tab>

     <Tab title="One-Time Payments">
       ```javascript theme={null}
       const payment = await client.payments.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         customer: { customer_id: 'cus_123' },
         billing: { country: 'US' },
         payment_method_id: 'pm_abc123'
       });
       ```
     </Tab>

     <Tab title="Subscriptions">
       ```javascript theme={null}
       const subscription = await client.subscriptions.create({
         customer: { customer_id: 'cus_123' },
         billing: { country: 'US' },
         product_id: 'pdt_subscription',
         quantity: 1,
         payment_method_id: 'pm_abc123'
       });
       ```
     </Tab>
   </Tabs>

   <Warning>
     체크아웃 세션에서 `payment_method_id`를 사용할 때 `confirm`는 `true`로 설정되어야 하며, 기존 `customer_id`를 제공해야 합니다. 결제 방법은 결제 통화에 대한 적합성으로 검증됩니다.
   </Warning>

   <Info>
     결제 수단은 고객에게 속해야 하며 결제 통화와 호환되어야 합니다. 검증에 실패하면 요청은 오류를 반환합니다.
   </Info>

3. **대시보드에서 구독 계획 변경 및 다음 청구 날짜 업데이트**

   대시보드에서 직접 구독 계획을 관리하여 향상된 제어를 제공합니다. 이제 구독 계획을 변경하고 다음 청구 날짜를 단일 작업으로 업데이트할 수 있어 구독 관리에 대한 완전한 유연성을 제공합니다.

   <Frame>
     <img src="https://mintcdn.com/dodopayments/vqwKWj9TjLp0w5lS/images/changelog/subscription-plan-changes.png?fit=max&auto=format&n=vqwKWj9TjLp0w5lS&q=85&s=23d2cf888e9d70316e3a110c10bb77c6" alt="대시보드에서의 구독 플랜 변경" style={{ maxHeight: '500px', width: 'auto' }} width="1909" height="962" data-path="images/changelog/subscription-plan-changes.png" />
   </Frame>

   ### 대시보드 기능

   * **계획 변경**: 클릭 한 번으로 구독 업그레이드 또는 다운그레이드
   * **청구 날짜 제어**: 계획 변경 시 다음 청구 날짜 업데이트
   * **비례 배분 옵션**: 계획 변경 시 비례 배분 처리 방법 선택
   * **시각적 미리보기**: 확인하기 전에 계획 변경이 청구에 미치는 영향을 정확히 확인

   ### 사용 사례

   * **고객 지원**: 고객 요청에 따라 구독 계획을 신속하게 조정
   * **프로모션 업그레이드**: 특정 청구 날짜로 고객을 일시적으로 업그레이드
   * **계획 마이그레이션**: 고객을 구독 계층 간 원활하게 전환
   * **청구 정렬**: 여러 구독 간 청구 날짜 정렬

   <Check>
     결과: 대시보드에서 구독 관리를 완벽하게 제어하여 일반적인 구독 조정에 API 호출이 덜 필요합니다.
   </Check>

   <Tip>
     빠른 구독 플랜 변경은 대시보드를 사용하고, 애플리케이션에서는 프로그래밍 방식의 구독 관리를 위해 API를 사용하세요.
   </Tip>

4. **결제 URL을 위한 짧은 링크**\
   새로운 짧은 링크 기능으로 더 깔끔하고 공유하기 쉬운 결제 링크를 생성합니다. 짧은 링크는 사용자 정의 슬러그가 있는 짧은 체크아웃 URL을 제공하여 고객과 공유하거나 웹사이트에 임베드하기 쉽게 만듭니다.

   <Frame>
     <img src="https://mintcdn.com/dodopayments/vqwKWj9TjLp0w5lS/images/changelog/short-links.png?fit=max&auto=format&n=vqwKWj9TjLp0w5lS&q=85&s=c5361cb37520128513ed5e3b1111fbb1" alt="결제 URL을 위한 단축 링크 기능" style={{ maxHeight: '500px', width: 'auto' }} width="1915" height="962" data-path="images/changelog/short-links.png" />
   </Frame>

   ### 이점

   * **더 깔끔한 URL**: 긴 결제 URL을 짧고 브랜드화된 링크로 교체
   * **더 나은 신뢰**: 고객 신뢰를 구축하는 전문적인 링크
   * **더 쉬운 공유**: SMS, 이메일 또는 소셜 미디어에 적합한 간소화된 URL
   * **사용자 정의 슬러그**: 제품을 위한 기억에 남고 브랜드화된 짧은 링크 생성

   ### 작동 방식

   체크아웃 세션 또는 결제 링크를 생성할 때 짧은 링크를 활성화하세요:

   <Tabs>
     <Tab title="Checkout Sessions">
       ```javascript theme={null}
       const session = await client.checkoutSessions.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         short_link: true,
         return_url: 'https://yourapp.com/success'
       });
       ```
     </Tab>

     <Tab title="Payment Links">
       ```javascript theme={null}
       const payment = await client.payments.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         short_link: true,
         return_url: 'https://yourapp.com/success'
       });
       ```
     </Tab>
   </Tabs>

   <Check>
     결과: 공유하기 쉽고 보다 전문적으로 보이는 짧은 결제 링크는 전환율과 고객 신뢰도를 향상시킵니다.
   </Check>

   <Info>
     짧은 링크는 대시보드에서 관리되며 [List Short Links API](/api-reference/products/get-products-short-links)를 통해 확인할 수 있습니다.
   </Info>

5. **`redirect_immediately` 플래그 - 결제 성공 페이지 건너뛰기**\
   새로운 `redirect_immediately` 플래그로 체크아웃 흐름을 제어하세요. 활성화 시 고객은 기본 성공 페이지를 건너뛰고 결제 완료 직후 즉시 리디렉션되어 더 빠르고 간소화된 경험을 제공합니다.

   ### 사용 사례

   * **더 빠른 체크아웃 흐름**: 중간 페이지를 건너뛰어 마찰 감소
   * **맞춤형 성공 페이지**: 브랜드화된 성공 페이지로 직접 리디렉션
   * **모바일 최적화**: 즉시 리디렉션으로 모바일 체크아웃 경험 개선
   * **임베디드 체크아웃**: 오버레이 또는 임베디드 체크아웃 흐름과 원활하게 통합

   ### 작동 방식

   체크아웃 세션, 결제 또는 구독에서 즉시 리디렉션을 활성화하세요:

<Tabs>
  <Tab title="Checkout Sessions">
    ```javascript theme={null}
    const session = await client.checkoutSessions.create({
      product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
      feature_flags: {
        redirect_immediately: true
      },
      return_url: 'https://yourapp.com/success'
    });
    ```
  </Tab>

  <Tab title="One-Time Payments">
    ```javascript theme={null}
    const payment = await client.payments.create({
      product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
      redirect_immediately: true,
      return_url: 'https://yourapp.com/success'
    });
    ```
  </Tab>

  <Tab title="Subscriptions">
    ```javascript theme={null}
    const subscription = await client.subscriptions.create({
      customer: { customer_id: 'cus_123' },
      billing: { country: 'US' },
      product_id: 'pdt_subscription',
      quantity: 1,
      redirect_immediately: true,
      return_url: 'https://yourapp.com/success'
    });
    ```
  </Tab>
</Tabs>

<Tip>
  `redirect_immediately: true`은 기본 결제 성공 페이지보다 더 나은 사용자 경험을 제공하는 맞춤 성공 페이지가 있을 때 사용하세요.
</Tip>

<Note>
  `redirect_immediately`이 활성화되면 고객은 결제 완료 후 즉시 `return_url`로 리디렉션되어 기본 성공 페이지를 완전히 건너뜁니다.
</Note>

6. **주문형 구독 - 모든 비즈니스에서 사용 가능**\
   주문형 구독이 이제 모든 비즈니스에서 활성화되어 사용 기반 및 계량 서비스에 대한 유연한 청구 제어를 제공합니다.

   ### 이 기능이 가능하게 하는 것

   * **사용 기반 청구**: 실제 사용량에 따라 구독 생성 및 고객 청구
   * **유연한 청구 주기**: 고정 간격이 아닌 주문형으로 고객 청구
   * **계량 서비스**: API 사용, 저장소, 컴퓨팅 시간 및 기타 계량 자원에 적합
   * **수동 청구 제어**: 필요할 때 수동으로 청구 생성, 청구 타이밍에 대한 완전한 제어 제공

   ### 작동 방식

   주문형 구독을 생성하고 필요에 따라 고객에게 청구하세요:

   ```javascript theme={null}
   // Create an on-demand subscription
   const subscription = await client.subscriptions.create({
     customer: { customer_id: 'cus_123' },
     billing: { country: 'US' },
     product_id: 'pdt_api_access',
     quantity: 1,
     on_demand: { mandate_only: true }
   });

   // Charge the customer when usage occurs
   await client.subscriptions.charge(subscription.subscription_id, {
     product_price: 4900,
     product_currency: 'USD',
     product_description: 'API usage for September: 1,000 requests'
   });
   ```

   <Check>
     결과: 언제, 얼마를 고객에게 청구할지 완벽하게 제어하여 사용량 기반 비즈니스 모델에 이상적입니다.
   </Check>

   자세히 알아보기: [주문형 구독](/developer-resources/ondemand-subscriptions)

7. **일반 버그 수정 및 개선 사항**\
   이 릴리스에는 성능 개선, UI 다듬기 및 더 신뢰할 수 있는 매끄러운 경험을 위한 경미한 버그 수정이 포함되어 있습니다.
