McTaba Labs logo
Software EngineeringThe WhiteboardProjectsEventsMasterclassesWebinarsLearn
Book Call

500+ developers already in the community

Get answers, find accountability partners, and stay ahead

Join Discord →
McTaba Labs logo

Educating 1 million students in tech by 2030.

Programs

  • HighSchool Graduates Launchpad
  • AI & Business Automation
  • Corporate Training
  • McTaba Story & Mission
  • Full-Stack Curriculum
  • Course Pricing & Plans
  • Frequently Asked Questions

Resources

  • Join Discord Community
  • Tech Events in Nairobi
  • Masterclasses
  • Free Resources
  • Learn
  • Campus
  • Africa Tech Talent Report
  • Partner With Us
  • Start a Project
  • Our Work

Contact Us

  • 124 Manyani East Road, Lavington, Nairobi
  • +254727795603
  • Book a Discovery Call

Office Hours:

Mon-Fri: 9am - 2pm EAT

Sat: 10am - 12pm EAT

© 2027 McTaba Labs - A product of Edtech Industries. All rights reserved.

Privacy PolicyTerms of ServiceRefund Policy
  1. Learn
  2. Paystack for African Developers
  3. Percentage vs Flat Split Configuration on Paystack
Bonaventure OgetoBy Bonaventure Ogeto|Updated July 22, 2026

Percentage vs Flat Split Configuration on Paystack

Percentage splits give the subaccount a percentage of each transaction (set via percentage_charge). Flat splits give your main account a fixed amount per transaction (set via transaction_charge), with the subaccount receiving the rest. Percentage scales with transaction size and is best for revenue-share marketplaces. Flat is best when your platform charges a fixed service fee regardless of order value.

In this article

  1. 1. How Percentage Splits Work
  2. 2. How Flat Splits Work
  3. 3. Worked Margin Calculations
  4. 4. Per-Transaction Overrides
  5. 5. Building Hybrid Models
  6. 6. Choosing the Right Model for Your Platform
  7. 7. Get the Business Model Right

How Percentage Splits Work

A percentage split divides the transaction amount by ratio. You set percentage_charge on the subaccount to the percentage the subaccount should receive. Your main account gets whatever is left after the subaccount's share and the Paystack processing fee (depending on bearer configuration).

// Create a subaccount with an 80% share (platform keeps 20%)
var response = await fetch('https://api.paystack.co/subaccount', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    business_name: 'Mama Njeri Kitchen',
    settlement_bank: '058',
    account_number: '0123456789',
    percentage_charge: 80,
  }),
});

With this subaccount, every transaction that references it will give 80% to the subaccount and 20% to your platform. The split adjusts automatically with transaction size:

  • Customer pays 2,000 NGN: subaccount gets 1,600, platform gets 400
  • Customer pays 10,000 NGN: subaccount gets 8,000, platform gets 2,000
  • Customer pays 50,000 NGN: subaccount gets 40,000, platform gets 10,000

This proportional scaling is why percentage splits are the default choice for most marketplaces. Your commission grows as your vendors sell more expensive items. You do not need to adjust anything as the price range on your platform expands.

The percentage is always from the vendor's perspective. If you set percentage_charge: 80, the vendor gets 80% and you keep 20%. If you want to express it as "the platform takes 15%", set the subaccount's percentage_charge to 85.

How Flat Splits Work

A flat split takes a fixed amount from each transaction for your main account. You set it by passing transaction_charge (in the smallest currency unit) when initializing the transaction. The subaccount gets the transaction amount minus your flat charge.

// Initialize a transaction with a flat charge of 500 NGN
var response = await fetch('https://api.paystack.co/transaction/initialize', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    email: 'buyer@example.com',
    amount: 1000000, // 10,000 NGN in kobo
    subaccount: 'ACCT_abc123xyz',
    transaction_charge: 50000, // Platform keeps 500 NGN (50,000 kobo)
    bearer: 'account',
  }),
});

With a flat charge of 500 NGN, your commission stays the same regardless of order value:

  • Customer pays 2,000 NGN: platform gets 500, subaccount gets 1,500
  • Customer pays 10,000 NGN: platform gets 500, subaccount gets 9,500
  • Customer pays 50,000 NGN: platform gets 500, subaccount gets 49,500

Notice how the vendor's take-home percentage increases with order value. At 2,000 NGN, the vendor keeps 75%. At 50,000 NGN, the vendor keeps 99%. This is the opposite of percentage splits, where the ratio stays constant.

Flat splits make vendors happy on expensive items because your fee feels small relative to the price. But they make your unit economics harder on cheap items because the same 500 NGN fee represents 25% of a 2,000 NGN order.

Get weekly developer tips

Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.

No spam. Unsubscribe anytime.

Worked Margin Calculations

Let us compare both models across a realistic range of transaction sizes. This is the analysis you should do before choosing your split model.

Scenario: Percentage split at 85/15 (vendor gets 85%, platform keeps 15%)

Order ValueVendor GetsPlatform GetsPlatform %
1,000 NGN85015015%
5,000 NGN4,25075015%
10,000 NGN8,5001,50015%
50,000 NGN42,5007,50015%
200,000 NGN170,00030,00015%

Scenario: Flat split at 750 NGN per transaction

Order ValueVendor GetsPlatform GetsPlatform %
1,000 NGN25075075%
5,000 NGN4,25075015%
10,000 NGN9,2507507.5%
50,000 NGN49,2507501.5%
200,000 NGN199,2507500.375%

The flat model produces identical revenue at the 5,000 NGN price point, but diverges sharply above and below it. At 1,000 NGN, the flat charge takes 75% of the transaction, which no vendor would accept. At 200,000 NGN, the platform earns less than half a percent, which might not cover operating costs.

These numbers are before Paystack processing fees. The fee further reduces whichever party is the bearer. Factor the fee into your analysis using realistic estimates for your market and transaction channel (card vs mobile money vs bank transfer).

The takeaway: percentage works when your value proposition scales with transaction size. Flat works when your value proposition is constant per transaction, and your transaction sizes fall in a narrow range where the flat fee feels fair to both parties.

Per-Transaction Overrides

The percentage_charge on a subaccount is the default. You can override it on any individual transaction by passing transaction_charge when initializing. This gives you flexibility to use percentage as the baseline but switch to flat for specific cases.

// Override the default percentage with a flat charge for this transaction
async function initializeWithOverride(order, seller) {
  var chargeParams = {
    email: order.buyerEmail,
    amount: order.totalInKobo,
    subaccount: seller.paystackSubaccountCode,
    bearer: 'account',
    reference: 'order_' + order.id + '_' + Date.now(),
  };

  // Apply promotional pricing: flat 200 NGN fee for VIP sellers
  if (seller.tier === 'vip') {
    chargeParams.transaction_charge = 20000; // 200 NGN in kobo
  }
  // Otherwise, the subaccount's default percentage_charge applies

  var response = await fetch('https://api.paystack.co/transaction/initialize', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(chargeParams),
  });

  return await response.json();
}

Common reasons to override per transaction:

  • Promotional pricing: Offer new vendors a lower commission rate for their first month. Override with a smaller flat charge or create a separate subaccount with a higher percentage_charge.
  • High-value order caps: Your standard 15% feels excessive on a 500,000 NGN order. Cap your commission at 20,000 NGN by switching to a flat charge on orders above a threshold.
  • Category-specific pricing: Electronics (low margin for the vendor) get a 10% platform fee, while services (high margin) get 20%. Calculate the right parameter per transaction based on the product category.
  • Negotiated rates: Enterprise vendors negotiate custom commission rates. Store their rate in your database and apply it per transaction.

When you pass transaction_charge, it replaces the percentage split with a flat split for that transaction only. The subaccount's default percentage_charge is not permanently changed.

Building Hybrid Models

The most common hybrid is "percentage with a minimum." You want 15% of every transaction, but never less than 200 NGN. Paystack does not support this with a single parameter. You build it on your server.

// Hybrid model: 15% commission with a 200 NGN floor
function calculateSplitParams(orderAmountKobo) {
  var percentageCommission = Math.floor(orderAmountKobo * 0.15);
  var minimumCommission = 20000; // 200 NGN in kobo

  if (percentageCommission >= minimumCommission) {
    // 15% exceeds the minimum, use percentage split (let subaccount default handle it)
    return { useDefault: true };
  } else {
    // 15% is below the minimum, override with flat charge
    return {
      useDefault: false,
      transaction_charge: minimumCommission,
    };
  }
}

// Use it during transaction initialization
async function initializeHybridSplit(order, seller) {
  var splitParams = calculateSplitParams(order.totalInKobo);

  var body = {
    email: order.buyerEmail,
    amount: order.totalInKobo,
    subaccount: seller.paystackSubaccountCode,
    bearer: 'account',
    reference: 'order_' + order.id + '_' + Date.now(),
  };

  if (!splitParams.useDefault) {
    body.transaction_charge = splitParams.transaction_charge;
  }

  var response = await fetch('https://api.paystack.co/transaction/initialize', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer ' + process.env.PAYSTACK_SECRET_KEY,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(body),
  });

  return await response.json();
}

Other hybrid patterns:

Percentage with a cap. You take 15% but never more than 5,000 NGN. Same logic, reversed: if the percentage exceeds the cap, override with a flat charge of 5,000 NGN.

Tiered percentage. Different commission rates at different price brackets. Orders under 5,000 NGN get charged 20%, orders between 5,000 and 50,000 get 15%, orders above 50,000 get 10%. Calculate the appropriate transaction_charge (flat amount) on your server and pass it per transaction.

Flat plus percentage. A fixed platform fee of 100 NGN plus 10% of the order. Calculate the total commission on your server and pass it as transaction_charge.

All of these hybrids require server-side logic. The trade-off is complexity: your code now makes a business decision on every transaction. But the flexibility lets you build pricing models that match your market rather than forcing your business into Paystack's two built-in options.

Choosing the Right Model for Your Platform

Here is a decision framework based on what your platform actually does.

Use percentage when:

  • Your platform's value to the vendor scales with transaction size (bigger orders require more logistics, support, or marketing from you)
  • Your transaction sizes vary widely (1,000 to 200,000 NGN on the same platform)
  • You want a simple model that requires no per-transaction logic on your server
  • Your vendors are accustomed to revenue-share models (common in e-commerce, food delivery, freelancing)

Use flat when:

  • Your platform provides the same service regardless of transaction size (listing a 2,000 NGN item costs you the same as listing a 200,000 NGN item)
  • Your transaction sizes cluster in a narrow range (most orders are between 3,000 and 8,000 NGN)
  • You charge a service fee (booking fee, processing fee, listing fee) rather than taking a revenue share
  • Your vendors sell high-value items and would resist a percentage commission on large orders

Use a hybrid when:

  • You need a percentage model but cannot afford to earn below a minimum per transaction
  • You want percentage for most orders but a cap on expensive items to keep vendors happy
  • Different product categories or vendor tiers need different pricing

Whatever you choose, model it with your actual transaction data. Pull your last 1,000 orders, apply both percentage and flat models, and see which one produces sustainable revenue across your real transaction distribution. Theoretical analysis with made-up numbers misses the skew in your actual data.

For the broader context of how split configuration fits into marketplace architecture, see the Paystack split payments and marketplaces complete guide.

Get the Business Model Right

The split configuration is not just a technical decision. It is a business model decision that affects vendor acquisition, vendor retention, and your unit economics. Getting it right requires understanding both the API mechanics and the market dynamics.

The McTaba bootcamp teaches payment integration alongside business thinking. You do not just learn to call the API. You learn to design payment flows that sustain a real business.

Create a free McTaba account

Key Takeaways

  • ✓Percentage split: the subaccount gets X% of the transaction amount. Set percentage_charge on the subaccount. Your main account gets the residual. Commission scales with transaction size.
  • ✓Flat split: your main account takes a fixed amount per transaction. Set transaction_charge when initializing. The subaccount gets the rest. Commission stays constant regardless of order size.
  • ✓Percentage is the default for most marketplaces because it scales naturally. A 15% commission on a 2,000 NGN order and a 50,000 NGN order feels proportional to both parties.
  • ✓Flat makes sense when your platform provides the same service regardless of transaction value. Booking fees, listing fees, and processing fees are natural flat-fee use cases.
  • ✓You can override the subaccount default on any transaction by passing transaction_charge. This lets you use percentage as the default but switch to flat for specific situations.
  • ✓Paystack does not support "percentage with minimum" natively. To enforce a floor on your commission, calculate the split on your server and pass the right parameter per transaction.
  • ✓Model your unit economics at your actual transaction size distribution. A split model that looks good at 10,000 NGN might not work at 1,000 NGN or 100,000 NGN.

Frequently Asked Questions

Can I change a subaccount from percentage to flat permanently?
The subaccount always has a percentage_charge as its default. You cannot set a permanent flat charge on the subaccount itself. To use flat pricing for all transactions with a vendor, pass transaction_charge on every transaction initialization. Alternatively, set the percentage_charge to a value that approximates your desired flat rate at your average transaction size, but this only works if transaction sizes are consistent.
What happens if my flat transaction_charge is larger than the transaction amount?
If your transaction_charge exceeds the transaction amount, the subaccount would receive nothing or a negative amount, which is not valid. Paystack will handle this as an error or unexpected behavior. Always validate on your server that the transaction_charge is less than the transaction amount before initializing.
Does the split type affect settlement timing?
No. Whether you use percentage or flat splits, settlement follows the same Paystack settlement cycle. The split type only affects how the money is divided, not when it is paid out.
Can I see which split type was used on a completed transaction?
The Verify Transaction response shows the amounts each party received but does not explicitly label the transaction as percentage or flat. You can infer the type from the amounts: if your share is a round percentage of the total, it was likely a percentage split. For definitive tracking, store the split type in your own database when you initialize each transaction.
How do I handle vendors who want both a monthly subscription fee and a per-transaction commission?
Paystack splits only handle per-transaction division. Monthly subscription fees are a separate billing relationship between your platform and the vendor. Charge the subscription separately using Paystack subscriptions or invoices, and use splits for the per-transaction commission. Do not try to bake subscription fees into the split configuration.

Learn Paystack Integration

KES 2,999

The definitive guide to building payment systems with Paystack — from your first transaction to production-grade payment infrastructure across Africa. 9 modules, 47 lessons. Free preview available.

Start Paystack Course

Not ready? Create Free Account

Keep reading

Paystack Split Payments and Marketplaces: Complete Guide

Everything you need to split payments on Paystack: creating subaccounts, choosing between percentage and flat splits, multi-split transactions, fee configuration, delayed settlement, escrow-style patterns, and building real marketplace products with working Node.js code.

Read more

Who Bears the Fee: Split Payment Fee Configuration

A detailed breakdown of how the Paystack processing fee is handled in split payments. Covers the three bearer options (account, subaccount, all), worked examples showing the exact settlement amounts under each option, unit economics analysis, and how to choose the right fee configuration for your marketplace.

Read more

Delayed Settlement Patterns for Marketplaces

Delayed settlement holds a vendor's funds until a condition is met — delivery confirmed, dispute window closed, or event completed. This guide covers how to implement delayed settlement using Paystack manual settlement, hold timers in your database, and conditional payout release.

Read more

Building an Events Ticketing Platform with Splits

An events ticketing platform collects ticket revenue and routes it to event organizers after the event. This guide covers using Paystack splits to route organizer revenue and platform booking fees, handling multi-ticket types, and managing pre-event holds and post-event payouts.

Read more

Building a Driver Payout System for a Ride Hailing App

Ride-hailing drivers need fast, reliable payouts. This guide covers building a driver payout system on Paystack: calculating trip-based earnings with commission deductions, daily settlement cycles, M-Pesa and bank payout options, handling cash-collected trips, real-time driver balance tracking, and instant withdrawal features.

Read more

Explore related topics

M-Pesa & African Stack

M-Pesa Daraja API tutorials, USSD development, and WhatsApp Business API guides. The African Stack that global bootcamps do not teach.

Learn to Code in Kenya

Everything a Kenyan needs to know before writing their first line of code. Career paths, real costs, hardware requirements, and honest answers about what it takes.

Learning to Code

Roadmaps, language guides, and practical advice for learning to code and launching a programming career.

Breaking Into Tech

Practical, no-nonsense guides for anyone looking to start or change their career in tech. From choosing your first language to acing interviews.

The African Stack: Skills for This Market

The skills that make Kenyan developers hard to replace: M-Pesa, USSD, WhatsApp, fintech, and building for the African market.

Bonaventure Ogeto

Bonaventure Ogeto

Founder, McTaba Labs

Bonaventure is the founder of McTaba Labs, a coding bootcamp in Nairobi, Kenya. He has spent years building products for the African market and mentoring the next generation of developers across the continent.