# Process MOTO payments Process mail order and telephone order (MOTO) payments using Stripe Terminal. > #### Requesting access > > To begin processing MOTO payments, contact [Stripe support](https://support.stripe.com/) for access. # iOS To process MOTO payments, you must: 1. [Create a PaymentIntent](https://docs.stripe.com/terminal/features/mail-telephone-orders/payments.md#create-payment-intent). 1. [Collect a PaymentMethod](https://docs.stripe.com/terminal/features/mail-telephone-orders/payments.md#collect-payment-method). 1. [Confirm and capture the payment](https://docs.stripe.com/terminal/features/mail-telephone-orders/payments.md#confirm-capture-payment). ## Create a PaymentIntent To begin collecting a MOTO payment, you must create a [PaymentIntent](https://docs.stripe.com/payments/payment-intents.md) with [payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) that includes `card`. #### Swift ```swift let params = try PaymentIntentParametersBuilder(amount: 1000, currency: "usd") .setPaymentMethodTypes([.card]) .build() Terminal.shared.createPaymentIntent(params) { createResult, createError in if let error = createError { print("createPaymentIntent failed: \(error)") } else if let paymentIntent = createResult { print("createPaymentIntent succeeded") // ... } } ``` ## Collect a payment method > CVC is mandatory for MOTO transactions. Skipping CVC is in private preview and you can request it for mail orders. Contact [Stripe support](https://support.stripe.com/) for access. After you’ve created a PaymentIntent, you can collect a PaymentMethod with the SDK. To collect a MOTO payment, your app must connect to a reader. To enable MOTO, set a non-nil `MotoConfiguration` on the `CollectPaymentIntentConfiguration`. After the request, the connected reader prompts you for the cardholder’s number, CVC, expiration date, and postal code. > If you’re displaying cart details using the [setReaderDisplay](https://docs.stripe.com/terminal/features/display.md) method, you must reset the reader’s display from a line item interface to the splash screen before collecting a MOTO payment. #### Swift ```swift let motoConfig = try MotoConfigurationBuilder().build() let config = try CollectPaymentIntentConfigurationBuilder().setMotoConfiguration(motoConfig).build() Terminal.shared.collectPaymentMethod(paymentIntent, config) { intentWithPaymentMethod, attachError in if let error = attachError { print("collectPaymentMethod failed: \(error)") } else if let paymentIntent = intentWithPaymentMethod { print("collectPaymentMethod succeeded") // ... } } ``` ## Confirm and capture payment You can follow the usual procedure to [confirm](https://docs.stripe.com/terminal/payments/collect-card-payment.md#confirm-payment) and [capture](https://docs.stripe.com/terminal/payments/collect-card-payment.md#capture-payment) the PaymentIntent. ## Testing Use the [simulated reader](https://docs.stripe.com/terminal/references/testing.md#simulated-reader) and [simulated test card numbers](https://docs.stripe.com/terminal/references/testing.md#simulated-test-cards) to test your integration.