Skip to content

Fees, balance and payouts

You pay a fee per successful payment. Stack never charges your customers anything. You can choose to pass the fees on in your price.

How the customer paid Stack’s fee Plus
Stack balance 1.5%, capped at ₦2,000 Nothing else
Card 0.5%, capped at ₦500 Paystack’s fee for the card charge
Bank (saved bank / direct debit) 0.5%, capped at ₦500 Paystack’s fee for the debit
Bank transfer 0.5%, capped at ₦500 Paystack’s fee for the transfer
  • No setup fees and no monthly fees. You only pay when a payment succeeds.
  • Paystack’s fee is what Paystack charges for that charge, at its standard rates. See Paystack’s pricing. Each payment in the dashboard shows Stack’s fee and the amount credited to your balance.
  • Payouts to your bank are free. Stack pays the transfer fee.
  • Refunds: the fees on the original payment aren’t returned.
Payment ₦10,000.00
Stack’s fee (0.5%) −₦50.00
Paystack’s fee (1.5% + ₦100) −₦250.00
Credited to your balance ₦9,700.00

Example: ₦10,000 paid from the customer’s Stack balance

Section titled “Example: ₦10,000 paid from the customer’s Stack balance”
Payment ₦10,000.00
Stack’s fee (1.5%) −₦150.00
Credited to your balance ₦9,850.00

If you’d rather receive the full price, charge a little more so the fees come out of that. Stack doesn’t add anything itself: you set the amount when you create the payment.

@usestack/node works out the amount for you. It knows Stack’s fees exactly and estimates Paystack’s from its published rates:

server.ts
import Stack from '@usestack/node';
const stack = new Stack(process.env.STACK_SECRET_KEY!);
// The order is ₦10,000 and you want all of it: charge enough to cover the fees.
const order = 1_000_000; // kobo
const price = stack.fees.grossUp(order, 'card');
// price.amount 1030613 → ₦10,306.13 to charge
// price.totalFees 30613 → ₦306.13 of fees (Stack's ₦51.53 + Paystack's ₦254.60)
// price.youReceive 1000000 → ₦10,000 credited to your balance
const intent = await stack.paymentIntents.create(
{ amount: price.amount, currency: 'NGN', description: 'Order 123 (incl. ₦306.13 fees)', metadata: { orderId: '123', subtotal: order } },
{ idempotencyKey: 'order_123' },
);
// What a payment of a given size costs you, without passing anything on:
const cost = stack.fees.of(1_000_000, 'card');
// cost.stackFee 5000 (₦50), cost.paystackFee 25000 (₦250), cost.youReceive 970000 (₦9,700)
export { intent, cost };
To receive Charge by card Fees Charge from a Stack balance
₦2,400 ₦2,448.98 ₦48.98 ₦2,436.54
₦2,500 ₦2,653.06 ₦153.06 ₦2,538.07
₦10,000 ₦10,306.13 ₦306.13 ₦10,152.28
₦50,000 ₦51,122.45 ₦1,122.45 ₦50,761.42
₦200,000 ₦202,500.00 ₦2,500.00 (both caps) ₦202,000.00

Things to know:

  • Use 'card'. Your customer chooses how to pay in the sheet, after you’ve set the amount. Card is the dearest local way to pay, so pricing for it means you receive at least your amount whichever they choose. If they pay from their Stack balance, you receive a little more.
  • Paystack’s fee is an estimate. It’s 1.5% + ₦100 (the ₦100 is waived under ₦2,500), capped at ₦2,000. If Paystack charges you a different rate, the difference is yours.
  • Foreign cards cost more. Paystack charges 3.9% + ₦100 on cards issued outside Nigeria. grossUp(order, 'card', { international: true }) prices for that. You only know a card is foreign once the customer has entered it, so on a local price you receive a little less on a foreign card.
  • The fee is on the fee. Paystack’s percentage applies to the whole amount it collects, including what you added for fees. That’s why ₦10,000 needs ₦306.13, not ₦300.
  • Say so at checkout. Show the fee as its own line before the customer pays, for example “Order ₦10,000 · Fees ₦306.13”.
  • Refunds cover the whole amount charged, including what you added for fees, and come from your balance. Refund only part of it (amount) if you want to keep the fees.

Every successful payment is credited to your Stack balance, net of fees, whatever the customer paid with.

  • Refunds come out of it. A refund your balance can’t cover is refused.
  • Payouts come out of it, when you ask. See Payouts.

In the dashboard, Balance is what’s there now, and Total earnings is everything you’ve been credited for payments after fees and refunds.

Customer pays ──▶ Stack ──▶ your Stack balance (net of fees) ──▶ Pay out now ──▶ your bank

The webhook tells you a payment succeeded as soon as it does. The money is in your balance from that moment, and a payout sends it to your bank, usually within minutes.