Overview

MasterpassKit — the Scan to Pay iOS in-app payment SDK. What it is, what you'll need, and how the pieces fit together.

Scan to PayKit is the iOS in-app payment SDK from EFT Corporation. Distributed as an .xcframework, it embeds the full Scan to Pay checkout experience inside your view controller — your app calls one Swift method, the SDK handles the rest, and a delegate callback returns the result.

For the cross-platform context, see In-App Payments overview.


Try the iOS demo

Start with the MasterPassKit iOS demo application to see a complete version 1.0 Swift/UIKit reference integration using MasterPassKit 1.44 build 131. It includes Test and Live environment selection, input validation, safe diagnostic logging, and delegate result handling.

Download the demo applications as a ZIP. The ZIP contains both the iOS and Android demos.

Use a transaction code and Lib Lite token created for the same selected environment. Credentials are not included in the demo.


What the SDK gives you

ComponentPurpose
MPScanToPayThe main entry point. Calls like checkout(...), preRegister(...), walletManagement(...).
MPScanToPayDelegateProtocol your view controller adopts to receive results.
MPSystemEnum: .live or .test — switches between sandbox and production.
MPErrorEnum of error types.
MPPayByAppDrop-in UIView subclass that lets the customer hand off to a supported bank app.
MPPayByCardDrop-in UIView subclass that triggers the in-SDK checkout.
Loading dialogPre-built progress UI you can show while creating a code server-side.

Prerequisites

RequirementWhy
Active merchant accountYou can't accept payments without one. See Merchant Onboarding.
Lib Lite API tokenGenerated in the Portal: log in → email dropdown → Lib Lite TokensGenerate.
A backend that can create codesThe SDK consumes codes; it doesn't create them. See Managing QR codes.
A webhook receiver or polling integrationThe SDK's success callback isn't authoritative. Confirm server-side via Webhooks or Querying transactions.
⚠️

Codes must be fixed-amount. Variable-amount codes are rejected. Set the amount when you create the code.


How the SDK is wired

   ┌─────────────────────────────────┐
   │   Your app                      │
   │                                 │
   │   ┌──────────────────────────┐  │
   │   │ UIViewController         │  │
   │   │   ↓ calls .checkout(...) │  │
   │   └──────────────────────────┘  │
   │                ↓                │
   │   ┌──────────────────────────┐  │
   │   │ ScanToPayKit             │  │
   │   │   • MPScanToPay          │  │
   │   │   • MPPayByApp           │  │
   │   │   • MPPayByCard          │  │
   │   │   • Loading dialog        │  │
   │   └──────────────────────────┘  │
   │                ↓                │
   └────────────────│────────────────┘
                    │
                    ↓ HTTPS
   ┌─────────────────────────────────┐
   │   Scan to Pay platform          │
   │   (QA: qa.scantopay.io/pluto)   │
   │   (Live: scantopay.live/pluto)  │
   └─────────────────────────────────┘

The SDK presents its UI as a modal-style view stack on your supplied controller — no separate windows or off-process work.


A complete payment

import ScanToPayKit

let code   = "6799782555"
let apiKey = "YOUR_API_KEY"
let system = MPSystem.test

let scanToPay = MPScanToPay()
scanToPay.checkout(withCode: code,
                   apiKey:   apiKey,
                   system:   system,
                   controller: self,
                   delegate:   self)

Step-by-step in Payments.


What the SDK does NOT do

Create codesYour backend does this via /code
Verify final payment statusYou confirm via webhook or /transactionState
ReconcileSettlement and reconciliation are merchant-side
RefundUse the Refunds and reversals API server-side

What's next


Did this page help you?