Skip to main content

Overview

Ionic enables financial institutions and software platforms to offer payment processing as part of their service offering. Whether you’re a community bank, credit union, financial services provider, or a SaaS/ISV platform, you can embed seamless payment acceptance for your customers.
Skip the build time and compliance burden. Ionic provides white-label infrastructure with custom integrations all managed for you.

Use Cases

Vertical SaaS

Industry-specific software platforms (dental, legal, automotive) that want to offer integrated payments to their customers

Marketplaces

Multi-vendor marketplaces that need to process payments and route funds to sellers while taking platform fees

Franchise Management

Systems managing multiple franchise locations under a single brand with centralized reporting

E-commerce Platforms

Shopping cart or website builder platforms offering payment processing to merchants

Partner Models

Platforms & ISVs

Embed payments and turn transactions into recurring revenue. Ideal for SaaS companies, marketplaces, and vertical software platforms. What you get:
  • Flexible API with competitive revenue share
  • Skip the build time and compliance burden
  • Seamless integration with your platform
  • White-label payment processing
Benefits:
  • Faster time to market
  • No PCI compliance burden
  • Monetize transactions from your customers
  • Focus on your core product

Platform Integration

Architecture Overview

┌─────────────────────────────────────────┐
│         Your Platform/SaaS              │
│  ┌────────────┐      ┌────────────┐    │
│  │ Merchant A │      │ Merchant B │    │
│  │  Dashboard │      │  Dashboard │    │
│  └────────────┘      └────────────┘    │
│         │                   │           │
│         └───────────┬───────┘           │
│                     │                   │
│          ┌──────────▼──────────┐        │
│          │  Your API Backend   │        │
│          │  (Master Merchant)  │        │
│          └──────────┬──────────┘        │
└─────────────────────┼───────────────────┘

                      │ HTTPS/API

           ┌──────────▼──────────┐
           │   Ionic Gateway     │
           │   (Payment Service) │
           └─────────────────────┘

Step 1: Merchant Onboarding

When a new merchant signs up for your platform:
  1. Collect merchant information (business details, banking info, ownership)
  2. Submit to Ionic for underwriting and approval
  3. Receive sub-merchant ID from Ionic
  4. Store mapping between your platform user and their sub-merchant ID
Contact your Ionic account manager to enable platform capabilities and discuss underwriting requirements.

Step 2: Processing Payments

Use the sub-merchant variables to identify each merchant with their transactions:
curl -X POST https://api.ionicfi.com/api/transact.php \
  -d "security_key=YOUR_MASTER_SECURITY_KEY" \
  -d "type=sale" \
  -d "amount=100.00" \
  -d "ccnumber=4111111111111111" \
  -d "ccexp=1225" \
  -d "cvv=999" \
  -d "submerchant_id=SUB_MERCHANT_001" \
  -d "submerchant_name=Acme Coffee Shop" \
  -d "submerchant_mcc=5814" \
  -d "submerchant_address=123 Main St" \
  -d "submerchant_city=Portland" \
  -d "submerchant_state=OR" \
  -d "submerchant_zip=97201" \
  -d "submerchant_country=US"

Step 3: Reporting & Settlement

1

Transaction Reporting

Use the Query API to retrieve transaction details for specific sub-merchants:
curl -X POST https://api.ionicfi.com/api/query.php \
  -d "security_key=YOUR_MASTER_SECURITY_KEY" \
  -d "submerchant_id=SUB_MERCHANT_001" \
  -d "start_date=20240101" \
  -d "end_date=20240131"
2

Settlement

Configure settlement options with your Ionic account manager:
  • Master Settlement: All funds settle to your master account, you pay out sub-merchants
  • Split Settlement: Funds automatically split between platform fees and sub-merchant payouts
  • Direct Settlement: Sub-merchants receive direct deposits
3

Reconciliation

Use webhooks to receive real-time transaction notifications and update your platform’s records:
// Webhook endpoint in your platform
app.post('/webhooks/ionic', (req, res) => {
  const event = req.body;

  if (event.transaction_type === 'sale' && event.response === '1') {
    // Find merchant by submerchant_id
    const merchant = await db.merchants.findBySubMerchantId(
      event.submerchant_id
    );

    // Update merchant's transaction records
    await db.transactions.create({
      merchantId: merchant.id,
      amount: event.amount,
      transactionId: event.transactionid,
      timestamp: event.time
    });
  }

  res.sendStatus(200);
});

Required Sub-Merchant Variables

submerchant_id
string
required
Unique identifier for the sub-merchant. Use your internal merchant ID or Ionic-provided ID.
submerchant_name
string
required
Legal business name or DBA of the sub-merchant. Appears on cardholder statements.
submerchant_mcc
string
required
Merchant Category Code (MCC) that describes the sub-merchant’s business type.Common MCC Codes:
  • 5814 - Fast Food Restaurants
  • 5812 - Eating Places, Restaurants
  • 5399 - Miscellaneous General Merchandise
  • 5734 - Computer Software Stores
  • 7372 - Computer Programming Services
  • 7299 - Miscellaneous Personal Services
submerchant_address
string
required
Street address of the sub-merchant’s business location.
submerchant_city
string
required
City of the sub-merchant’s business location.
submerchant_state
string
required
Two-letter state/province code.
submerchant_zip
string
required
Postal code of the sub-merchant’s business location.
submerchant_country
string
required
Two-letter ISO country code (e.g., US, CA, GB).

White-Label Options

Hosted Payment Pages

Customize Collect Checkout with your branding:
  • Custom Domain: payments.yourplatform.com
  • Logo & Colors: Match your platform’s brand identity
  • Custom Fields: Add platform-specific data collection
  • Receipt Templates: Branded confirmation pages and emails
Contact your account manager to configure white-label checkout pages.

Embedded Payment Forms

Use Collect.js to embed tokenized payment forms directly in your platform:
<script src="https://secure.ionicfi.com/token/Collect.js"
        data-tokenization-key="YOUR_TOKENIZATION_KEY"
        data-custom-css='{"border-color": "#yourcolor", "font-family": "Your Font"}'></script>

<form action="/process-payment" method="POST" id="payment-form">
  <input type="hidden" name="merchant_id" value="123" />

  <div id="ccnumber"></div>
  <div id="ccexp"></div>
  <div id="cvv"></div>

  <button type="submit">Process Payment</button>
</form>

Custom Merchant Dashboard

Build your own merchant portal using Ionic APIs:
  • Transaction history via Query API
  • Settlement reports
  • Refund/void management
  • Customer vault management
  • Custom analytics and reporting

Common Integration Patterns

Marketplace Split Payments

Process a transaction and track platform fees vs. merchant earnings:
async function processMarketplaceOrder(order) {
  const seller = await db.merchants.findById(order.sellerId);
  const platformFee = order.amount * 0.05; // 5% platform fee
  const sellerAmount = order.amount - platformFee;

  // Process full amount through Ionic
  const transaction = await ionic.charge({
    amount: order.amount,
    submerchant_id: seller.ionicSubMerchantId,
    submerchant_name: seller.businessName,
    // ... other submerchant fields
    orderid: order.id,
    orderdescription: `Order ${order.id} - ${seller.businessName}`
  });

  if (transaction.response === '1') {
    // Record split in your database
    await db.transactions.create({
      orderId: order.id,
      totalAmount: order.amount,
      sellerAmount: sellerAmount,
      platformFee: platformFee,
      sellerId: seller.id,
      ionicTransactionId: transaction.transactionid
    });

    // Update seller balance for future payout
    await db.merchants.incrementBalance(seller.id, sellerAmount);
  }

  return transaction;
}

Multi-Tenant SaaS

Route payments to the correct sub-merchant based on the current user/tenant:
// Middleware to identify current merchant context
function identifyMerchant(req, res, next) {
  // Extract from subdomain, JWT token, or session
  const subdomain = req.hostname.split('.')[0];
  const merchant = await db.merchants.findBySubdomain(subdomain);

  req.merchant = merchant;
  next();
}

// Payment processing route
app.post('/api/charge', identifyMerchant, async (req, res) => {
  const response = await ionic.charge({
    amount: req.body.amount,
    payment_token: req.body.token,

    // Automatically include merchant from context
    submerchant_id: req.merchant.ionicSubMerchantId,
    submerchant_name: req.merchant.businessName,
    submerchant_mcc: req.merchant.mcc,
    submerchant_address: req.merchant.address,
    submerchant_city: req.merchant.city,
    submerchant_state: req.merchant.state,
    submerchant_zip: req.merchant.zip,
    submerchant_country: req.merchant.country
  });

  res.json(response);
});

Franchise Management

Process payments for multiple franchise locations under a single brand:
async function processFranchisePayment(locationId, paymentData) {
  const location = await db.locations.findById(locationId);
  const franchise = await db.franchises.findById(location.franchiseId);

  const transaction = await ionic.charge({
    amount: paymentData.amount,
    payment_token: paymentData.token,

    // Location-specific sub-merchant details
    submerchant_id: location.ionicSubMerchantId,
    submerchant_name: `${franchise.brandName} - ${location.name}`,
    submerchant_mcc: franchise.mcc,
    submerchant_address: location.address,
    submerchant_city: location.city,
    submerchant_state: location.state,
    submerchant_zip: location.zip,
    submerchant_country: location.country,

    // Custom tracking fields
    orderid: `${locationId}-${Date.now()}`,
    customer_receipt: true
  });

  // Update franchise-level and location-level analytics
  await analytics.recordSale({
    franchiseId: franchise.id,
    locationId: location.id,
    amount: paymentData.amount,
    transactionId: transaction.transactionid
  });

  return transaction;
}

Security Best Practices

Never expose your master merchant security_key to client-side code or share it with sub-merchants.

Key Management

  • Master Key: Your platform’s primary API key - keep this secure on your backend
  • Tokenization Key: Public key for Collect.js - safe to use client-side
  • Sub-Merchant Isolation: Each sub-merchant should only access their own data

PCI Compliance

As a platform, you have several options:
  1. Tokenization (Recommended): Use Collect.js to tokenize cards client-side
  2. Hosted Pages: Use Collect Checkout for fully hosted payment pages
  3. Direct API: Requires PCI SAQ D compliance if handling raw card data

Data Storage

Use the Customer Vault to securely store payment methods with Ionic instead of in your own database.

Testing Platform Integrations

Test Sub-Merchants

Create test sub-merchant entries in your platform during development:
const testMerchants = [
  {
    id: "test_merchant_1",
    ionicSubMerchantId: "TEST_SUB_001",
    businessName: "Test Coffee Shop",
    mcc: "5814",
    address: "123 Test St",
    city: "Portland",
    state: "OR",
    zip: "97201",
    country: "US"
  },
  {
    id: "test_merchant_2",
    ionicSubMerchantId: "TEST_SUB_002",
    businessName: "Test Retail Store",
    mcc: "5399",
    address: "456 Demo Ave",
    city: "Seattle",
    state: "WA",
    zip: "98101",
    country: "US"
  }
];

Test Transaction Scenarios

Use Ionic’s test card numbers with sub-merchant data:
# Approved transaction
curl -X POST https://api.ionicfi.com/api/transact.php \
  -d "security_key=YOUR_TEST_KEY" \
  -d "type=sale" \
  -d "amount=10.00" \
  -d "ccnumber=4111111111111111" \
  -d "ccexp=1225" \
  -d "cvv=999" \
  -d "submerchant_id=TEST_SUB_001" \
  -d "submerchant_name=Test Coffee Shop" \
  -d "submerchant_mcc=5814" \
  -d "submerchant_city=Portland" \
  -d "submerchant_state=OR" \
  -d "submerchant_country=US"

# Declined transaction (amount triggers decline)
curl -X POST https://api.ionicfi.com/api/transact.php \
  -d "security_key=YOUR_TEST_KEY" \
  -d "type=sale" \
  -d "amount=50.00" \
  -d "ccnumber=4111111111111111" \
  # ... same submerchant fields
See the full Testing Guide for test card numbers and scenarios.

Getting Started

1

Contact Ionic

Reach out to your account manager or [email protected] to discuss platform requirements and partnership options.
2

Complete Underwriting

Provide business documentation and complete underwriting process for your master merchant account.
3

Receive Credentials

Obtain your master merchant security_key and tokenization keys for testing and production.
4

Build Integration

Implement sub-merchant onboarding flow and payment processing with sub-merchant variables in your platform.
5

Test Thoroughly

Test with multiple sub-merchants, various transaction types, and error scenarios.
6

Launch

Go live and start processing payments for your platform customers!

Additional Resources

Support

Questions about platform integration or partnership opportunities?