{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition","cards","card"]},"type":"markdown"},"seo":{"title":"Tap to Pay on iPhone Quickstart","description":"Accept contactless in-person payments on iPhone with no extra hardware using the Finix Tap to Pay on iPhone SDK.","siteUrl":"https://docs.finix.com/","llmstxt":{"hide":false,"sections":[{"title":"Getting Started","includeFiles":["guides/getting-started/**/*.md"],"excludeFiles":[]},{"title":"Online Payments","includeFiles":["guides/online-payments/**/*.md"],"excludeFiles":["guides/online-payments/payment-features/fsa-hsa-non-healthcare-mcc.md"]},{"title":"In-Person Payments","includeFiles":["guides/in-person-payments/**/*.md"],"excludeFiles":[]},{"title":"Subscriptions","includeFiles":["guides/subscriptions/**/*.md"],"excludeFiles":[]},{"title":"After the Payment","includeFiles":["guides/after-the-payment/**/*.md"],"excludeFiles":[]},{"title":"Managing Operations","includeFiles":["guides/managing-operations/**/*.md"],"excludeFiles":[]},{"title":"Platform Payments","includeFiles":["guides/platform-payments/**/*.md"],"excludeFiles":[]},{"title":"Payouts","includeFiles":["guides/payouts/**/*.md"],"excludeFiles":[]},{"title":"Low-Code / No-Code","includeFiles":["low-code-no-code/**/*.md"],"excludeFiles":[]},{"title":"Developers","includeFiles":["additional-resources/developers/**/*.md"],"excludeFiles":[]},{"title":"Plugins","includeFiles":["additional-resources/plugins/**/*.md"],"excludeFiles":[]},{"title":"Industry Considerations","includeFiles":["guides/industry-considerations/**/*.md"],"excludeFiles":[]},{"title":"Regional Considerations","includeFiles":["guides/regional-considerations/**/*.md"],"excludeFiles":[]},{"title":"Release Notes","includeFiles":["release-notes/**/*.md"],"excludeFiles":[]}],"excludeFiles":[]},"image":"/assets/finix-tap-to-pay-on-iphone-banner.f74c4efac5d7c4b25a594a0dd0fc93c1a6c11d9bd138dc1a311e0e57050ed487.08ff7529.jpeg"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"tap-to-pay-on-iphone-quickstart","__idx":0},"children":["Tap to Pay on iPhone Quickstart"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Accept in-person contactless payments on iPhone with no extra hardware. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FinixTapToPaySDK"]}," uses Apple's Tap to Pay on iPhone technology and processes payments through Finix from start to finish. Your app starts a transaction, the Buyer taps a card or digital wallet on the merchant's iPhone, and the SDK returns a completed Finix ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Transfer"]},"."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Using the Finix Checkout app?"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide is for developers integrating ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FinixTapToPaySDK"]}," into their own iOS app. To accept Tap to Pay on iPhone payments without writing code, see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/low-code-no-code/mobile-apps/finix-checkout/tap-to-pay-on-iphone"},"children":["Accept Payments with Tap to Pay on iPhone"]}," in the Finix Checkout app."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-it-works","__idx":1},"children":["How it works"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Your app starts a transaction with an amount and a transaction type."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The SDK presents Apple's secure card-reading sheet and the Buyer taps a card or device. The card read happens inside Apple's Tap to Pay on iPhone technology, and neither your app nor the SDK ever sees raw card data."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The SDK submits the payment to Finix and waits for the outcome. You do not make a separate API call to create the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Transfer"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The SDK returns a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TapToPayTransactionResult"]}," with the Finix ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Transfer"]}," ID, its state, and masked card details."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK also publishes progress events during the transaction (card reading, processing, success or failure) that you can use to drive your UI."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"system-requirements","__idx":2},"children":["System requirements"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"device-and-os","__idx":3},"children":["Device and OS"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Requirement"},"children":["Requirement"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Value"},"children":["Value"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Device"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["iPhone XS or later."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["iOS version"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["18.1 or later."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Testing"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Physical iPhone required. The simulator cannot accept taps."]}]}]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"iPad is not supported"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Tap to Pay on iPhone is not available on iPad."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"development-environment","__idx":4},"children":["Development environment"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Requirement"},"children":["Requirement"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Value"},"children":["Value"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Xcode"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["16.0 or later."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Swift"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["5.9 or later."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"apple-requirements","__idx":5},"children":["Apple requirements"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Membership in the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://developer.apple.com/support/enrollment/"},"children":["Apple Developer Program"]}," with an organization account."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The Tap to Pay on iPhone entitlement, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["com.apple.developer.proximity-reader.payment.acceptance"]},", granted by Apple. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/apple-entitlement"},"children":["Apple entitlement setup"]}," in the iOS SDK reference."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"finix-requirements","__idx":6},"children":["Finix requirements"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Finix account with access to the Finix Dashboard."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["API credentials (username and password) for the environment you are targeting."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An approved merchant (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MUxxxxxxxxxxxxx"]},"), its processing MID, and its display name."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An activated Finix ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Device"]}," resource representing the iPhone. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/device-setup"},"children":["Set up a Device"]}," in the iOS SDK reference."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"environments","__idx":7},"children":["Environments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Finix Sandbox and Production are separate environments, and credentials and merchants in one don't exist in the other. The environment is explicit in the SDK configuration (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".sandbox"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".production"]},"), and a configuration's credentials, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Merchant"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Device"]}," must all belong to the same environment."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All examples in this guide run against Sandbox. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/credentials"},"children":["Credentials and environments"]}," for details."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"integration-steps","__idx":8},"children":["Integration steps"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Work through the steps below in order. Each links to the detailed section in the iOS SDK reference that covers it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1-confirm-system-requirements","__idx":9},"children":["Step 1: Confirm system requirements"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Verify you have an iPhone XS or later running iOS 18.1 or later, and a physical device for testing."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2-set-up-your-apple-entitlement","__idx":10},"children":["Step 2: Set up your Apple entitlement"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Request the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["com.apple.developer.proximity-reader.payment.acceptance"]}," entitlement from Apple and configure your Xcode project."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/apple-entitlement"},"children":["Apple entitlement setup"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-3-gather-your-finix-credentials","__idx":11},"children":["Step 3: Gather your Finix credentials"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Collect your Finix Sandbox API credentials and merchant details (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Merchant"]}," ID, MID, and display name)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/credentials"},"children":["Credentials and environments"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-4-create-a-device-resource","__idx":12},"children":["Step 4: Create a Device resource"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Provision a Finix ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Device"]}," resource for the iPhone from your backend. Create it once and cache the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Device"]}," ID."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/device-setup"},"children":["Set up a Device"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-5-install-and-initialize-the-sdk","__idx":13},"children":["Step 5: Install and initialize the SDK"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add the Swift package and build a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TapToPayConfiguration"]}," with your credentials, merchant details, and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Device"]}," ID, then create the SDK entry point with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FinixTapToPay(configuration:)"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The SDK is hosted on ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://github.com/finix-payments/finix-taptopay-ios-sdk"},"children":["GitHub"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/installation"},"children":["Installation and initialization"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-6-link-the-merchants-apple-account","__idx":14},"children":["Step 6: Link the merchant's Apple Account"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Present Apple's account-linking flow so the merchant accepts Apple's Terms and Conditions. This must complete before the first transaction."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/account-linking"},"children":["Account linking"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-7-warm-up-the-reader","__idx":15},"children":["Step 7: Warm up the reader"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["prepareReader()"]}," at app launch and enable ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["autoPrepareOnForeground"]}," so the session stays warm. This keeps the first tap fast."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/transactions#prepare-the-reader"},"children":["Prepare the reader"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-8-run-a-transaction","__idx":16},"children":["Step 8: Run a transaction"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Start a transaction with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["startTransaction(amount:currency:type:identityId:)"]},", subscribe to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transactionEvents"]}," to drive your UI, and handle the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TapToPayTransactionResult"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/transactions"},"children":["Transactions"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-9-test-and-submit-for-app-review","__idx":17},"children":["Step 9: Test and submit for App Review"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Test end to end on a physical iPhone, review privacy disclosures, and prepare your App Review submission."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/testing"},"children":["Test your integration"]},", ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/privacy"},"children":["Privacy and data collection"]},", and ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/ios/tap-to-pay/app-review"},"children":["Prepare for App Review"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"demo-app","__idx":18},"children":["Demo App"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Finix provides a ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://github.com/finix-payments/finix-taptopay-ios-sdk-demo-app"},"children":["demo app"]}," you can use as a reference for your integration."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"learn-more","__idx":19},"children":["Learn more"]},{"$$mdtype":"Tag","name":"Cards","attributes":{"columns":3,"cardMinWidth":180},"children":[{"$$mdtype":"Tag","name":"Card","attributes":{"title":"iOS SDK Reference","imagePosition":"start","iconPosition":"auto","layout":"vertical","align":"start","variant":"outlined","to":"/ios/tap-to-pay"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Full SDK reference for Tap to Pay on iPhone, including installation, transactions, errors, and App Review guidance."]}]},{"$$mdtype":"Tag","name":"Card","attributes":{"title":"Apple entitlement setup","imagePosition":"start","iconPosition":"auto","layout":"vertical","align":"start","variant":"outlined","to":"/ios/tap-to-pay/apple-entitlement"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Request the entitlement and configure your Xcode project."]}]},{"$$mdtype":"Tag","name":"Card","attributes":{"title":"Set up a Device","imagePosition":"start","iconPosition":"auto","layout":"vertical","align":"start","variant":"outlined","to":"/ios/tap-to-pay/device-setup"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Provision and activate a Finix Device resource for the iPhone."]}]},{"$$mdtype":"Tag","name":"Card","attributes":{"title":"Transactions","imagePosition":"start","iconPosition":"auto","layout":"vertical","align":"start","variant":"outlined","to":"/ios/tap-to-pay/transactions"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Run payments, handle results, and issue refunds."]}]}]}]},"headings":[{"value":"Tap to Pay on iPhone Quickstart","id":"tap-to-pay-on-iphone-quickstart","depth":1},{"value":"How it works","id":"how-it-works","depth":2},{"value":"System requirements","id":"system-requirements","depth":2},{"value":"Device and OS","id":"device-and-os","depth":3},{"value":"Development environment","id":"development-environment","depth":3},{"value":"Apple requirements","id":"apple-requirements","depth":3},{"value":"Finix requirements","id":"finix-requirements","depth":3},{"value":"Environments","id":"environments","depth":2},{"value":"Integration steps","id":"integration-steps","depth":2},{"value":"Step 1: Confirm system requirements","id":"step-1-confirm-system-requirements","depth":3},{"value":"Step 2: Set up your Apple entitlement","id":"step-2-set-up-your-apple-entitlement","depth":3},{"value":"Step 3: Gather your Finix credentials","id":"step-3-gather-your-finix-credentials","depth":3},{"value":"Step 4: Create a Device resource","id":"step-4-create-a-device-resource","depth":3},{"value":"Step 5: Install and initialize the SDK","id":"step-5-install-and-initialize-the-sdk","depth":3},{"value":"Step 6: Link the merchant's Apple Account","id":"step-6-link-the-merchants-apple-account","depth":3},{"value":"Step 7: Warm up the reader","id":"step-7-warm-up-the-reader","depth":3},{"value":"Step 8: Run a transaction","id":"step-8-run-a-transaction","depth":3},{"value":"Step 9: Test and submit for App Review","id":"step-9-test-and-submit-for-app-review","depth":3},{"value":"Demo App","id":"demo-app","depth":2},{"value":"Learn more","id":"learn-more","depth":2}],"frontmatter":{"seo":{"title":"Tap to Pay on iPhone Quickstart","description":"Accept contactless in-person payments on iPhone with no extra hardware using the Finix Tap to Pay on iPhone SDK.","image":"/assets/finix-tap-to-pay-on-iphone-banner.f74c4efac5d7c4b25a594a0dd0fc93c1a6c11d9bd138dc1a311e0e57050ed487.08ff7529.jpeg"},"keywords":{"includes":["Tap to Pay on iPhone","iOS contactless payments","Tap to Pay SDK","in-person iPhone payments"],"excludes":["PAX D135","Android","card reader"]}},"lastModified":"2026-08-11T19:49:07.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/in-person-payments/building-your-integration/mobile-integration/tap_to_pay_iphone_quickstart","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}