Skip to content
Create account or Sign in
The Stripe Docs logo
/
Ask AI
Create accountSign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
APIs & SDKsHelp
Overview
About Stripe payments
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseUse Managed Payments
Use Payment Links
Use a pre-built checkout page
Build a custom integration with Elements
Build an in-app integration
In-person payments
Terminal
    Overview
    Accept in-person payments
    Global availability
    Integration design
    Select your reader
    Design an integration
    Quickstart
    Example applications
    Testing
    Terminal setup
    Set up your integration
    Multi-party payments with Connect
    Connect to a reader
    Accepting a payment
    Collect card payments
    Additional payment methods
    Accept offline payments
    Mail order and telephone order payments
      Process MOTO payments
      Save a card with MOTO for future payments
    Regional considerations
    During checkout
    Collect tips
    Collect and save payment details for future use
    Flexible authorisations
    After checkout
    Refund transactions
    Provide receipts
    Customize checkout
    Cart display
    Collect on-screen inputs
    Collect swiped data
    Collect tapped data for NFC instruments
    Apps on devices
    Manage readers
    Order, return, replace readers
    Register readers
    Manage locations and zones
    Configure readers
    Monitor Readers
    References
    API references
    Mobile readers
    Smart readers
    Tap to Pay readers
    SDK migration guide
    Deployment checklist
    Stripe Terminal reader product sheets
Payment Methods
Add payment methods
Manage payment methods
Faster checkout with Link
Payment scenarios
Handle multiple currencies
Custom payment flows
Flexible acquiring
Orchestration
Beyond payments
Incorporate your company
Crypto
Agentic commerce
Financial Connections
Climate
Understand fraud
Radar fraud protection
Manage disputes
Verify identities
United States
English (United Kingdom)
HomePaymentsTerminalMail order and telephone order payments

Process MOTO payments

Process mail order and telephone order (MOTO) payments using Stripe Terminal.

Requesting access

To begin processing MOTO payments, contact Stripe support for access.

To process MOTO payments with a server-driven integration, you must:

  1. Create a PaymentIntent.
  2. Process the payment.
  3. Verify the reader state.
  4. Capture the payment.

Create a PaymentIntent

To begin collecting a MOTO payment, you must create a PaymentIntent with payment_method_types that includes card.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/payment_intents \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d "payment_method_types[]"=card \ -d capture_method=automatic \ -d amount=1000

Process the payment

Private preview

CVC is mandatory for MOTO transactions. Skipping CVC is in private preview and you can request it for mail orders. Contact Stripe support for access.

After you create a PaymentIntent, use process_payment_intent to process the payment, setting process_config[moto] to true.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/terminal/readers/
{{READER_ID}}
/process_payment_intent
\ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d payment_intent=
"{{PAYMENT_INTENT_ID}}"
\ -d "process_config[moto]"=true

The process_payment_intent request is asynchronous. After the request, the reader prompts you for the cardholder’s card number, CVC, expiration date, and postal code.

Note

If you’re displaying cart details using the setReaderDisplay method, you must reset the reader’s display from a line item interface to the splash screen before collecting a MOTO payment.

Verify the reader state

Your application must follow the instructions for verifying the reader state to confirm a successful (approved) payment.

Capture the payment

You must call capture to complete the payment if the PaymentIntent has a status of requires_capture.

Testing

Use the simulated reader and simulated test card numbers to test your integration.

Was this page helpful?
YesNo
  • Need help? Contact Support.
  • Check out our changelog.
  • Questions? Contact Sales.
  • LLM? Read llms.txt.
  • Powered by Markdoc