> ## 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.

# Selling Digital Goods on iOS

> Sell subscriptions, courses, downloads, and SaaS plans in your iOS app with Dodo Payments hosted checkout, in the App Store regions that allow it.

## Introduction

Dodo Payments lets you sell digital goods and services in your iOS app, and handles tax compliance, currency conversion, and payouts for you. This page covers how the integration works for SaaS tools, content subscriptions, and digital utilities, and in which App Store regions you can use it.

## Overview

Dodo Payments is your **Merchant of Record (MoR)** and takes on these parts of your digital business:

<Tabs>
  <Tab title="What We Handle">
    * Tax collection and remittance (VAT, GST, and other regional taxes)
    * Global payments, including local payment methods, subject to Dodo Payments policies
    * Currency conversion and foreign exchange
    * Fraud prevention and dispute tools
    * End-customer invoicing and receipts
    * Compliance with regional regulations
  </Tab>

  <Tab title="What You Get">
    * One API for web and mobile platforms
    * Checkout opened from your app, with UPI, cards, wallets, and BNPL
    * Global payouts by local bank transfer or SWIFT wire, including to Payoneer receiving accounts
    * Analytics and reporting dashboard
    * Secure payment processing
  </Tab>
</Tabs>

## Use Cases

<CardGroup cols={2}>
  <Card title="Subscriptions" icon="repeat">
    * Premium content or feature access
    * Recurring billing with free trials, proration, and upgrades or downgrades
  </Card>

  <Card title="Courses and Learning" icon="graduation-cap">
    * Pay-per-course access
    * Bundled content packages
    * Lifetime or renewable licenses
    * Progress tracking in your app
  </Card>

  <Card title="Digital Downloads" icon="download">
    * One-time purchases (PDFs, music, tools)
    * Digital asset delivery
    * License key management
  </Card>

  <Card title="SaaS Tools" icon="screwdriver-wrench">
    * Software-as-a-Service subscriptions
    * Usage-based billing
    * Team and enterprise plans
  </Card>
</CardGroup>

## Integration Flow

Your app opens Dodo Payments hosted checkout with the
[iOS checkout SDK](/developer-resources/sdks/ios). The SDK presents checkout in
`SFSafariViewController` and returns a typed result.

<Warning>
  Use the SDK rather than embedding checkout in a `WebView`. Apple documents
  Apple Pay support in `SFSafariViewController`, while an embedded `WebView` can
  suppress Apple Pay and Google Pay, which costs you wallet conversions. For example, `WKWebView` disables Apple Pay when your app injects scripts into the page. App Review applies the same purchase rules
  (guideline 3.1.1) to a `WebView` checkout as to a native one.
</Warning>

```mermaid theme={null}
flowchart LR
  A[Mobile App] -->|Request checkout| B(Your Server)
  B -->|Create checkout session| C(Dodo API)
  C -->|checkout_url| B
  B -->|checkout_url| A
  A -->|SDK opens SFSafariViewController| D[Hosted Checkout]
  D -->|Webhook| B
  B -->|Grant access| A
```

### Integration Steps

<Steps>
  <Step title="Mobile App to Your Server">
    Your app asks your backend for a checkout URL. Authenticate the request with
    the signed-in user's session token.
  </Step>

  <Step title="Your Server to Dodo API">
    Your backend creates a [checkout session](/developer-resources/checkout-session)
    with your API key and returns the `checkout_url` to the app.

    <Warning>
      Create checkout sessions on your server, never in the app. Anyone can extract
      an API key from an app binary.
    </Warning>
  </Step>

  <Step title="Mobile App Opens Checkout">
    Pass the `checkout_url` to `DodoCheckout.start(...)`. The SDK presents it in
    `SFSafariViewController` and returns a typed result when the customer
    completes or dismisses checkout.
  </Step>

  <Step title="Dodo Payments to Your Server">
    Dodo Payments sends the `payment.succeeded` or `subscription.active` webhook
    to your endpoint when the payment succeeds or the subscription activates.
  </Step>

  <Step title="Your Server Grants Access">
    Unlock the purchased content from that webhook, not from the result the app
    received. The SDK result is a UI hint, not proof of payment.
  </Step>
</Steps>

<CardGroup cols={2}>
  <Card title="iOS Checkout SDK" icon="apple" href="/developer-resources/sdks/ios">
    Install steps and the full `start(...)` contract for Swift.
  </Card>

  <Card title="Mobile Integration Guide" icon="mobile" href="/developer-resources/mobile-integration">
    The end-to-end flow, plus the same contract for Android, React Native, and Flutter.
  </Card>
</CardGroup>

## Regional Availability

Dodo Payments supports alternative purchase flows only in App Store regions where Apple explicitly allows external payments, or where a regulator or court order requires it.

### Supported Regions

<AccordionGroup>
  <Accordion title="United States">
    Supported to the extent that current court orders and Apple's App Store Review Guidelines allow.

    * Guideline 3.1.1(a) lets apps on the U.S. storefront include buttons and links to other purchase methods without an entitlement
    * Subject to the outcome of the Epic v. Apple court proceedings
    * You must follow Apple's implementation guidelines
  </Accordion>

  <Accordion title="European Union (EU) App Store">
    Supported through Apple's EU terms and Apple's external purchase entitlement for the EU.

    * Enabled through Apple's EU Alternative Terms. From October 1, 2026, Apple replaces these terms with a single set of EU terms
    * Requires the [StoreKit External Purchases or Offers Entitlement](https://developer.apple.com/support/payment-options-on-the-app-store-in-the-eu/) under the terms that take effect on October 1, 2026. Under the earlier terms, the entitlement is the StoreKit External Purchase Link Entitlement
    * You must comply with EU Digital Markets Act requirements
  </Accordion>

  <Accordion title="Japan">
    Supported under Japan's Mobile Software Competition Act (MSCA), in force since December 18, 2025.

    * Apple allows alternative payment methods and links to external purchases on the Japan storefront
    * You must follow Apple's Japan-specific entitlement and App Store Connect requirements
    * Commission terms differ from other regions; check Apple's current terms for Japan
  </Accordion>
</AccordionGroup>

<Note>
  South Korea isn't a supported region. Apple's [StoreKit External Purchase Entitlement for South Korea](https://developer.apple.com/support/storekit-external-entitlement-kr/) requires a native in-app payment flow that "may not be within a web view", processed by an Apple-approved Korean payment service provider (such as KCP, Inicis, Toss, or NICE), with prices in South Korean Won. Dodo Payments checkout opens as a web page, so it doesn't meet these requirements.
</Note>

<Warning>
  Before you enable Dodo Payments for any storefront, review and follow Apple's region-specific entitlements and App Store Connect requirements. Alternative payment flows in unsupported regions can get your app rejected or removed.
</Warning>

<Note>
  Some business models don't require in-app purchase (IAP). Under guideline 3.1.3(e), apps that sell physical goods or services consumed outside the app must use a payment method other than IAP. Dodo Payments supports these models too. Check your app's category against Apple's current guidelines to confirm whether IAP is required for your use case.
</Note>

### Learn More

For global policies, legal history, and strategies to reduce App Store fees, see:

<Card title="Bypassing App Store & Play Store Fees: A Strategic and Legal Playbook" icon="shield-check" href="/features/bypassing-app-store-fees">
  Learn where and how you can legally implement alternative payment flows, with up-to-date regional guidance and compliance tips.
</Card>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.