Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.ionicfi.com/llms.txt

Use this file to discover all available pages before exploring further.

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

Payment Variables

Complete reference for sub-merchant variables

Query API

Retrieve transaction details by sub-merchant

Webhooks

Real-time transaction notifications

Customer Vault

Store payment methods securely

Support

Questions about platform integration or partnership opportunities?