> ## Documentation Index
> Fetch the complete documentation index at: https://paystack-sdk.efobi.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Split

> Transaction Split API methods for managing payment splits across subaccounts

The Split class provides methods for creating and managing transaction splits on your integration. Splits allow you to automatically distribute payments across multiple subaccounts.

## Overview

The Split class allows you to:

* Create transaction splits with multiple subaccounts
* List and retrieve split configurations
* Update split settings
* Add or remove subaccounts from splits

## Methods

### create

Creates a split on your integration.

```typescript theme={null}
async create(input: SplitCreateInput): Promise<SplitCreateResponse>
```

<ParamField body="name" type="string" required>
  Name of the split
</ParamField>

<ParamField body="type" type="'flat' | 'percentage'" required>
  Type of split (flat amount or percentage)
</ParamField>

<ParamField body="currency" type="'NGN' | 'USD' | 'GHS' | 'ZAR' | 'KES' | 'XOF'" required>
  Currency for the split (defaults to NGN)
</ParamField>

<ParamField body="subaccounts" type="array" required>
  Array of subaccount objects

  * `subaccount` (string): Subaccount code starting with ACCT\_
  * `share` (number): Share amount or percentage
</ParamField>

<ParamField body="bearer_type" type="'subaccount' | 'account' | 'all-proportional' | 'all'" required>
  Who bears transaction charges
</ParamField>

<ParamField body="bearer_subaccount" type="string" required>
  Subaccount code of the bearer (when bearer\_type is "subaccount")
</ParamField>

<ResponseField name="data" type="object">
  <ResponseField name="id" type="number">
    The split ID
  </ResponseField>

  <ResponseField name="name" type="string">
    The split name
  </ResponseField>

  <ResponseField name="split_code" type="string">
    The unique split code
  </ResponseField>

  <ResponseField name="type" type="string">
    The split type (flat or percentage)
  </ResponseField>

  <ResponseField name="currency" type="string">
    The currency
  </ResponseField>

  <ResponseField name="active" type="boolean">
    Whether the split is active
  </ResponseField>

  <ResponseField name="bearer_type" type="string">
    The bearer type
  </ResponseField>

  <ResponseField name="subaccounts" type="array">
    Array of subaccount configurations with their shares
  </ResponseField>
</ResponseField>

**Example:**

```typescript theme={null}
const { data, error } = await paystack.split.create({
  name: "50/50 Split",
  type: "percentage",
  currency: "NGN",
  subaccounts: [
    { subaccount: "ACCT_abc123", share: 50 },
    { subaccount: "ACCT_def456", share: 50 }
  ],
  bearer_type: "all-proportional",
  bearer_subaccount: "ACCT_abc123"
});

if (data) {
  console.log(data.data.split_code);
}
```

***

### list

Lists transaction splits available on your integration.

```typescript theme={null}
async list(input: SplitListInput): Promise<SplitListResponse>
```

<ParamField body="name" type="string" required>
  Filter by split name
</ParamField>

<ParamField body="active" type="boolean" required>
  Filter by active status
</ParamField>

<ParamField body="sort_by" type="string">
  Field to sort by
</ParamField>

<ParamField body="perPage" type="number">
  Number of records per page (1-100, defaults to 50)
</ParamField>

<ParamField body="page" type="number">
  Page number (defaults to 1)
</ParamField>

<ParamField body="from" type="string">
  ISO datetime to filter from
</ParamField>

<ParamField body="to" type="string">
  ISO datetime to filter to
</ParamField>

<ResponseField name="data" type="array">
  Array of split objects

  <ResponseField name="id" type="number">
    The split ID
  </ResponseField>

  <ResponseField name="name" type="string">
    The split name
  </ResponseField>

  <ResponseField name="split_code" type="string">
    The unique split code
  </ResponseField>

  <ResponseField name="type" type="string">
    The split type
  </ResponseField>

  <ResponseField name="active" type="boolean">
    Whether the split is active
  </ResponseField>

  <ResponseField name="total_subaccounts" type="number">
    Total number of subaccounts in the split
  </ResponseField>
</ResponseField>

<ResponseField name="meta" type="object">
  Pagination metadata including total, page, perPage, and pageCount
</ResponseField>

**Example:**

```typescript theme={null}
const { data, error } = await paystack.split.list({
  name: "Commission",
  active: true,
  perPage: 20,
  page: 1
});

if (data) {
  console.log(`Found ${data.meta.total} splits`);
}
```

***

### getSplitById

Gets details of a split on your integration.

```typescript theme={null}
async getSplitById(id: string): Promise<SplitSingleResponse>
```

<ParamField path="id" type="string" required>
  The ID of the split
</ParamField>

<ResponseField name="data" type="object">
  <ResponseField name="id" type="number">
    The split ID
  </ResponseField>

  <ResponseField name="name" type="string">
    The split name
  </ResponseField>

  <ResponseField name="split_code" type="string">
    The unique split code
  </ResponseField>

  <ResponseField name="type" type="string">
    The split type
  </ResponseField>

  <ResponseField name="currency" type="string">
    The currency
  </ResponseField>

  <ResponseField name="active" type="boolean">
    Whether the split is active
  </ResponseField>

  <ResponseField name="bearer_type" type="string">
    The bearer type
  </ResponseField>

  <ResponseField name="subaccounts" type="array">
    Array of subaccount configurations with details
  </ResponseField>

  <ResponseField name="total_subaccounts" type="number">
    Total number of subaccounts
  </ResponseField>
</ResponseField>

**Example:**

```typescript theme={null}
const { data, error } = await paystack.split.getSplitById("123");

if (data) {
  console.log(data.data.name);
}
```

***

### update

Updates a split details on your integration.

```typescript theme={null}
async update(input: SplitUpdateInput): Promise<SplitSingleResponse>
```

<ParamField body="id" type="string" required>
  The ID of the split to update
</ParamField>

<ParamField body="name" type="string" required>
  The new name for the split
</ParamField>

<ParamField body="active" type="boolean" required>
  Whether the split should be active
</ParamField>

<ParamField body="bearer_type" type="'subaccount' | 'account' | 'all-proportional' | 'all'">
  The new bearer type
</ParamField>

<ParamField body="bearer_subaccount" type="string">
  The new bearer subaccount code
</ParamField>

**Example:**

```typescript theme={null}
const { data, error } = await paystack.split.update({
  id: "123",
  name: "Updated Split Name",
  active: true,
  bearer_type: "account"
});

if (data) {
  console.log(data.message);
}
```

***

### addOrUpdateSubaccount

Adds a subaccount to a split or updates an existing subaccount's share.

```typescript theme={null}
async addOrUpdateSubaccount(input: SplitSubaccountInput): Promise<SplitSubaccountUpdateResponse>
```

<ParamField body="id" type="string" required>
  The ID of the split
</ParamField>

<ParamField body="subaccount" type="string" required>
  The subaccount code (starting with ACCT\_)
</ParamField>

<ParamField body="share" type="number" required>
  The share amount or percentage for the subaccount
</ParamField>

<ResponseField name="data" type="object">
  Updated split object with the new subaccount configuration
</ResponseField>

**Example:**

```typescript theme={null}
const { data, error } = await paystack.split.addOrUpdateSubaccount({
  id: "123",
  subaccount: "ACCT_xyz789",
  share: 25
});

if (data) {
  console.log(`Split now has ${data.data.total_subaccounts} subaccounts`);
}
```

***

### removeSubaccount

Removes a subaccount from a split.

```typescript theme={null}
async removeSubaccount(input: SplitSubaccountRemoveInput): Promise<GenericResponse>
```

<ParamField body="id" type="string" required>
  The ID of the split
</ParamField>

<ParamField body="subaccount" type="string" required>
  The subaccount code to remove
</ParamField>

**Example:**

```typescript theme={null}
const { data, error } = await paystack.split.removeSubaccount({
  id: "123",
  subaccount: "ACCT_xyz789"
});

if (data) {
  console.log(data.message);
}
```

## Related Resources

* [Transaction Guide](/guides/transactions)
* [Virtual Account API Reference](/api-reference/virtual-account)
