paystack-splits

Paystack Transaction Splits API — create, update, and manage multi-party payment splits across subaccounts. Configure percentage or flat-amount splits with flexible bearer types (subaccount, account, all-proportional, all). Add or remove subaccounts from split groups. Use this skill whenever implementing revenue sharing between multiple parties, marketplace commission structures, multi-vendor payment distribution, or any flow that divides a single payment among multiple recipients. Also use when you see references to split_code, SPL_ prefixed codes, bearer_type, or the /split endpoint.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "paystack-splits" with this command: npx skills add rexedge/paystack/rexedge-paystack-paystack-splits

Paystack Transaction Splits

The Transaction Splits API lets you split payment settlements across your main account and one or more subaccounts. More flexible than simple subaccount splits.

Depends on: paystack-setup for the paystackRequest helper.
Related: paystack-subaccounts for creating subaccounts used in splits.

Endpoints

MethodEndpointDescription
POST/splitCreate a split
GET/splitList splits
GET/split/:idFetch a split
PUT/split/:idUpdate a split
POST/split/:id/subaccount/addAdd/update subaccount in split
POST/split/:id/subaccount/removeRemove subaccount from split

Create Split

POST /split

ParamTypeRequiredDescription
namestringYesName of the split
typestringYespercentage or flat
currencystringYesCurrency code (e.g. NGN)
subaccountsarrayYesArray of { subaccount, share } objects
bearer_typestringYesWho bears Paystack fees (see table below)
bearer_subaccountstringNoSubaccount code (required if bearer_type is subaccount)

Bearer Types

TypeDescription
subaccountA specific subaccount bears fees
accountThe main account bears all fees
all-proportionalFees are split proportionally among all parties
allEach party bears fees on their share

Percentage Split

const split = await paystackRequest<{
  split_code: string;
  name: string;
  type: string;
}>("/split", {
  method: "POST",
  body: JSON.stringify({
    name: "Marketplace 70-30",
    type: "percentage",
    currency: "NGN",
    subaccounts: [
      { subaccount: "ACCT_6uujpqtzmnufzkw", share: 70 },
    ],
    bearer_type: "all-proportional",
    // Main account gets remaining 30%
  }),
});
// split.data.split_code → "SPL_RcScyW5jp2"

Flat Split

await paystackRequest("/split", {
  method: "POST",
  body: JSON.stringify({
    name: "Fixed Distribution",
    type: "flat",
    currency: "NGN",
    subaccounts: [
      { subaccount: "ACCT_6uujpqtzmnufzkw", share: 50000 },  // ₦500 flat
      { subaccount: "ACCT_eg4sob4590pq9vb", share: 30000 },  // ₦300 flat
    ],
    bearer_type: "account",
  }),
});

List Splits

GET /split

ParamTypeRequiredDescription
namestringNoFilter by split name
activebooleanNoFilter active/inactive
sort_bystringNoSort field (default: createdAt)
perPageintegerNoRecords per page (default: 50)
pageintegerNoPage number (default: 1)
fromdatetimeNoStart date
todatetimeNoEnd date
const splits = await paystackRequest("/split?active=true");

Fetch Split

GET /split/:id

const split = await paystackRequest(`/split/${splitId}`);

Update Split

PUT /split/:id

ParamTypeRequiredDescription
namestringYesUpdated split name
activebooleanYesEnable or disable
bearer_typestringNoUpdated bearer type
bearer_subaccountstringNoUpdated bearer subaccount
await paystackRequest(`/split/${splitId}`, {
  method: "PUT",
  body: JSON.stringify({
    name: "Updated Marketplace Split",
    active: true,
    bearer_type: "all-proportional",
  }),
});

Add/Update Subaccount in Split

POST /split/:id/subaccount/add

Add a new subaccount or update the share of an existing one.

ParamTypeRequiredDescription
subaccountstringYesSubaccount code
shareintegerYesShare amount (percentage or flat depending on split type)
await paystackRequest(`/split/${splitId}/subaccount/add`, {
  method: "POST",
  body: JSON.stringify({
    subaccount: "ACCT_eg4sob4590pq9vb",
    share: 20,
  }),
});

Remove Subaccount from Split

POST /split/:id/subaccount/remove

await paystackRequest(`/split/${splitId}/subaccount/remove`, {
  method: "POST",
  body: JSON.stringify({
    subaccount: "ACCT_eg4sob4590pq9vb",
  }),
});

Using Splits in Transactions

Pass the split_code when initializing a transaction:

await paystackRequest("/transaction/initialize", {
  method: "POST",
  body: JSON.stringify({
    email: "customer@email.com",
    amount: 500000,
    split_code: "SPL_RcScyW5jp2",
  }),
});

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

paystack-webhooks

No summary provided by upstream source.

Repository SourceNeeds Review
General

paystack-setup

No summary provided by upstream source.

Repository SourceNeeds Review
General

paystack-charges

No summary provided by upstream source.

Repository SourceNeeds Review
General

paystack-transactions

No summary provided by upstream source.

Repository SourceNeeds Review