fx()   Split Payment


The Payant's Inline API can be extended to allow split payments. This allows you to invoice your customers and split the payment between several wallets.


Rules
  1. Split type must either be flat or percentage.
  2. When spliting by flat amount, the total values in the receivers array must equal the total invoice amount.
  3. When spliting by percentage, the total values in the receivers array must equal 100%.
  4. Split transactions must have atleast 2 receivers and at most 6 receivers.
  5. One of the receivers must always be marked primary.

Fee Bearer

Fees are applied to split transactions the same way fees are applied to normal transactions on Payant. The only difference is that when the fee_bearer of the invoice is account, you can specify who bearers the fees in the split transaction. You can either spread the transaction fees across the receivers or choose a single receiver to bear the fees. When the selected receivers settlement value is less than the fees, we would automatically spread fees across all receivers.


Client Pays

The following illustration shows how fees are paid when client bears the fees.


Account Pays

The following illustration shows how fees are paid when account bears the fees. The first illustration shows fees distributed across all receivers and the second illustration shows fees paid by a single receiver.

Parameters

key
required
String
API public key
reference_code
required
String
Invoice reference code if already exist
client
required
Object
Client Data
company_name String
Client's company name
first_name
required
String
Client's first name
last_name
required
String
Client's last name
email
required
String
Client's email address
phone
required
String
Client's phone number
address String
Client's address
type String
Client's type Customer, Staff or Vendor
settlement_bank String
Client's settlement bank
account_number String
Client's account number
client_id
required
String
Client ID
due_date
required
String
Invoice due date MM/DD/YYYY
fee_bearer
required
String
Invoice fee bearer account or client
items
required
Array
Invoice items
item
required
String
Item's name
description
required
String
Item's description
unit_cost
required
String
Item's unit cost
quantity
required
String
Item's quantity
split_details
required
Object
Split Details
type
required
String
Split type percentage or flat
fee_bearer
required
String
Fee bearer client, each_receiver or primary_receiver
receivers
required
Array
Split Receivers
wallet_reference_code
required
String
Wallet Reference Code
value
required
String
Value
primary
required
String
Primary true or false

Heads up!

Only one of client or client_id is required per invoice object. The client parameter will allow you to add a new customer while invoicing on the fly in case you don't have a client_id. Client will not be added if already exist. All fields are not required if reference_code is available.

Example

<form>
  <script src="https://api.payant.ng/assets/js/inline.min.js"></script>
  <button type="button" onclick="payWithPayant()"> Pay </button> 
</form>
 
<script>
  function payWithPayant() {
    var handler = Payant.invoice({
      "key": "e47aa44e4a320ae2a2b6b8804a4d2fa1b74437ab",
      "client": {
            "first_name": "Albert",
            "last_name": "Jane",
            "email": "jane@alberthospital.com",
            "phone": "+2348012345678"
        },
      "due_date": "12/30/2016",
      "fee_bearer": "account",
      "items": [
        {
          "item": ".Com Domain Name Registration",
          "description": "alberthostpital.com",
          "unit_cost": "2500.00",
          "quantity": "1"
        }
      ],
      "split_details": {
        "type": "percentage",
        "fee_bearer": "each_receiver",
        "receivers": [
        {
          "wallet_reference_code": "xVKsW9vnpI",
          "value": "30",
          "primary": "true"
        },
        {
          "wallet_reference_code": "9vnpIxVKsW",
          "value": "70",
          "primary": "false"
        }
      ]
    },
      callback: function(response) {
        console.log(response);
      },
      onClose: function() {
        console.log('Window Closed.');
      }
    });

    handler.openIframe();
  }
</script>