NAV Navbar
Money
python php javascript java shell

Introduction

Welcome to the Moneywave API! You can use our API to process payments seamlessly around the world.

We have language bindings in PHP, Node.js and Python! You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right.

Payments in test environment

Please note that that when working in TEST environment and you need to do an account based transaction, you will need to use one of our Test Account numbers. However, because Moneywave uses 3DSecure for authentications, you have to use a live card while you are in TEST environment so you can have an idea of how it will work when you go LIVE. For those of you that will be testing on an API level, we suggest that you do your tests with a small amount of money because you will not be able send the money to a real bank account number.

Test account details:

Key Note

The LIVE URL : https://live.moneywaveapi.co/

Moneywave uses 3DSecure for authenticating Mastercards and Visa Cards. We return a response code 02 and a response html as well as an auth url parameter when the charge call is initiated. For validation, you are supposed to either load the response html in an iFrame / Browser or Redirect your users to the auth url to validate the transaction. When this has been done, we will redirect to the response url you supplied in the first call and then pass our response as a query parameter.

It is important to note that when you switch to LIVE, you will be provided with the LIVE credentials (i.e API key and Secret) which you will find under Account Settings on the dashboard.

Moneywave uses PIN for authenticating Verve Cards. You need to include the pin parameter to your request payload and then validate the transaction using a One Time password that will be sent to the cardholders phone.

Authentication

Make sure to replace eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA with your API key.

Moneywave uses api key and Secret to allow access to the API. You can register to get your api key and secret at our Moneywave Portal. The api key and secret would provide an authorization token which would now grant you access to all our Moneywave endpoints.

Moneywave expects for the authorization token to be included in all API requests to the server in a header that looks like the following:

Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA

Get Access Token

Access token

response = unirest.post("https://moneywave.herokuapp.com/v1/merchant/verify", 
headers={ "Accept": "application/json" }, 
params={ "apiKey": "your_api_key, "secret": "your_secret" });
$headers = array('content-type' => 'application/json');
$query = array('apiKey' => 'your_api_key', 'secret' => 'your_secret');
$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/merchant/verify', $headers, $query);
var unirest = require('unirest');

unirest.post('https://moneywave.herokuapp.com/v1/merchant/verify')
.headers({'Content-Type': 'application/json'})
.send({ "apiKey": "your_api_key", "secret": "your_secret" })
.end(function (response) {
  console.log(response.body);
});
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/merchant/verify")
     .header("content-type", "application/json")
     .field("apiKey", "your_api_key")
     .field("secret", "your_secret")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
    "apiKey":"your_api_key",
    "secret":"your_secret"
   }' "https://moneywave.herokuapp.com/v1/merchant/verify"

The above command returns JSON structured like this:

 {
   "status": "success",
   "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA", // a valid merchant token
   "config":{}
 }

This endpoint provides you with your authorization token

HTTP Request

POST https://moneywave.herokuapp.com/v1/merchant/verify

Query Parameters

Parameter Type Description
apiKey String The api key of the merchant
secret String The secret key of the merchant

Account Transfers

Card to Account

Sample request for VERVE card transaction

params = {
              "firstname": "John",
              "lastname": "Doe",
              "email":"google@gmail.com",
              "phonenumber":"+2348200990020",
              "recipient_bank": "044",
              "recipient_account_number": "0690000008",
              "amount": 5000,
              "narration":"Gucchi shirt payment", //Optional
              "card_no": "5289899898983388",
              "cvv": "788",
              "pin":"8989", //optional required when using VERVE card
              "expiry_year":"2022",
              "charge_auth":"PIN", //optional required where card is a local Mastercard
              "expiry_month": "09",
              "apiKey" :"tk90iifjkjddjkjkjfnf",
              "fee":"45",
              "medium": "web",
              "redirecturl": "https://google.com"
}; 
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer", 
headers={ "content-type": "application/json", "Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
            "firstname"=> "John",
               "lastname"=> "Doe",
               "email"=>"google@gmail.com",
               "phonenumber"=>"+2348200990020",
               "recipient_bank"=>"044",
               "recipient_account_number"=> "0690000008",
               "card_no"=> "5289899898983388",
               "cvv"=> "788",
               "pin"=>"8989", //optional required when using VERVE card
               "expiry_year"=>"2022",
               "expiry_month"=>"09",
               "charge_auth"=>"PIN", //optional required where card is a local Mastercard
               "apiKey" =>"tk90iifjkjddjkjkjfnf",
               "amount" =>5000,
               "narration":"Gucchi shirt payment", //Optional
               "fee"=>45,
               "medium": "web",
               "redirecturl": "https://google.com"
    ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer', $headers, $query);
 var unirest = require('unirest');
 var  params = {

          "firstname": "John",
          "lastname": "Doe",
          "email":"google@gmail.com",
          "phonenumber":"+2348200990020",
          "recipient_bank": "044",
          "recipient_account_number": "0690000008",
          "card_no": "5289899898983388",
          "cvv": "788",
          "pin":"8989", //optional required when using VERVE card
          "expiry_year":"2022",
          "expiry_month": "09",
           "charge_auth":"PIN", //optional required where card is a local Mastercard
          "apiKey" :"tk90iifjkjddjkjkjfnf",
          "amount" :5000,
          "narration":"Gucchi shirt payment", //Optional
          "fee":45,
          "medium": "web",
          "redirecturl": "https://google.com"
 };
 unirest.post('https://moneywave.herokuapp.com/v1/transfer')
 .headers({'Content-Type': 'application/json', 'Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("firstname", "John")
     .field("lastname", "Doe")
     .field("email", "google@gmail.com")
     .field("phonenumber", "08200990020")
     .field("recipient_bank", "044")
     .field("recipient_account_number", "0690000008")
     .field("card_no", "5289899898983388")
     .field("cvv", "788")
     .field("pin", "8989") //optional, required when using VERVE card
     .field("expiry_year", "2022")
     .field("expiry_month", "09")
     .field("charge_auth","PIN") //optional, required where card is a local Mastercard
     .field("apiKey", "tk90iifjkjddjkjkjfnf")
     .field("amount", 5000)
     .field("narration":"Gucchi shirt payment"), //Optional
     .field("fee", 45)
     .field("medium", "web")
     .field("redirecturl", "https://google.com") 
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
      "firstname": "John",
      "lastname": "Doe",
      "email":"google@gmail.com",
      "phonenumber":"+2348200990020",
      "recipient_bank": "044",
      "recipient_account_number": "0690000008",
      "card_no": "5289899898983388",
      "cvv": "788",
      "pin":"8989", //optional required when using VERVE card
      "expiry_year":"2022",
      "expiry_month": "09",
      "charge_auth":"PIN", //optional required where card is a local Mastercard
      "apiKey" :"tk90iifjkjddjkjkjfnf",
      "amount" :5000,
      "narration":"Gucchi shirt payment", //Optional
      "fee":45,
      "medium": "web",
      "redirecturl": "https://google.com"
   }' "https://moneywave.herokuapp.com/v1/transfer"

The above command returns JSON structured like this:

{

       "status":"success",
       "data":{  
          "transfer":{  
             "id":4997,
             "type":"transfer",
             "firstName":"John",
             "lastName":"Doe",
             "phoneNumber":"+23481012345678",
             "recipientPhone":null,
             "isCardValidationSuccessful":false,
             "isDeliverySuccessful":false,
             "status":"started",
             "medium":"web",
             "ip":"54.196.45.207",
             "exchangeRate":null,
             "amountToSend":500,
             "amountToCharge":608,
             "disburseCurrency":"NGN",
             "chargeCurrency":"NGN",
             "flutterChargeResponseCode":"02",
             "flutterChargeResponseMessage":"Pending, Validation",
             "flutterDisburseResponseMessage":null,
             "flutterChargeReference":"FLWT00530261",
             "flutterDisburseReference":null,
             "flutterDisburseResponseCode":null,
             "merchantCommission":45,
             "moneywaveCommission":18,
             "netDebitAmount":608,
             "chargedFee":108,
             "receiptNumber":null,
             "redirecturl":"http://your_redirect_url/?rc=00&transactionStatus=success&responseMessage=Successfully%20sent%20to%20recipient.&id=580&ref=FLWT26773736",
             "meta":"{\"chargeMethod\":\"VBVSECURECODE\"}",
             "createdAt":"2017-03-14T09:33:14.000Z",
             "updatedAt":"2017-03-14T09:33:16.000Z",
             "deletedAt":null,
             "userId":205,
             "merchantId":140,
             "beneficiaryId":6,
             "accountId":null,
             "cardId":292,
             "account":null,
             "beneficiary":{  
                "id":6,
                "accountNumber":"0690000004",
                "accountName":"SHAWN MICHAELS",
                "bankCode":"044",
                "bankName":"",
                "userId":7,
                "currency":"NGN",
                "createdAt":"2016-10-17T15:55:15.000Z",
                "updatedAt":"2016-10-17T15:55:15.000Z",
                "deletedAt":null
             }
          },
          "authurl":"http://staging1flutterwave.co:8080/pwc/7R6ixyYshGPo6vl.html",
          "responsehtml":"<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><meta http-equiv=\"cache-control\" content=\"no-cache\" /><meta http-equiv=\"expires\" content=\"31 Dec 1997\" /><meta http-equiv=\"Pragma\" content=\"no-cache\" /><meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\" /><title>Flutterwave Payment Gateway</title><meta content=\"yes\" name=\"apple-mobile-web-app-capable\" /><meta content=\"black\" name=\"apple-mobile-web-app-status-bar-style\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0\"/></head><body><div class=\"waitmsg\" id=\"WaitMessage\" style=\"display:none\"><WaitMessage>Transaction Processing, Please Wait...</WaitMessage></div><form id=\"mpiRun\" action=\"https://migs.mastercard.com.au/vpcpay\" method=\"post\"><input type=\"hidden\" name=\"vpc_AccessCode\" value=\"3E7DB883\" /> <input type=\"hidden\" name=\"vpc_Amount\" value=\"60800\" /> <input type=\"hidden\" name=\"vpc_CardExp\" value=\"1908\" /> <input type=\"hidden\" name=\"vpc_CardNum\" value=\"5377283645077450\" /> <input type=\"hidden\" name=\"vpc_CardSecurityCode\" value=\"812\" /> <input type=\"hidden\" name=\"vpc_Command\" value=\"pay\" /> <input type=\"hidden\" name=\"vpc_Currency\" value=\"NGN\" /> <input type=\"hidden\" name=\"vpc_Locale\" value=\"en\" /> <input type=\"hidden\" name=\"vpc_MerchTxnRef\" value=\"FLWT00530261\" /> <input type=\"hidden\" name=\"vpc_Merchant\" value=\"FLVM01\" /> <input type=\"hidden\" name=\"vpc_OrderInfo\" value=\"ODRFLWT00530261\" /> <input type=\"hidden\" name=\"vpc_ReturnAuthResponseData\" value=\"Y\" /> <input type=\"hidden\" name=\"vpc_ReturnURL\" value=\"https://flutterwavestaging.com:9443/FlutterMigs/threepartytransaction\" /> <input type=\"hidden\" name=\"vpc_Version\" value=\"1\" /> <input type=\"hidden\" name=\"vpc_card\" value=\"Mastercard\" /> <input type=\"hidden\" name=\"vpc_gateway\" value=\"threeDSecure\" /> <input type=\"hidden\" name=\"vpc_SecureHash\" value=\"261D32C5F3B279F93774AE07E526A57F038580879A9D6720768DC4A719A587FF\" /> <input type=\"hidden\" name=\"vpc_SecureHashType\" value=\"SHA256\" />       <br>      <br><noscript>      <center>      <h1>Processing your 3-D Secure Transaction</h1>      <h2>      JavaScript is currently disabled or is not supported            by your browser.<br></h2>      <h3>Please click <b>< Submit ></b> to continue            the processing of your 3-D Secure            transaction.</h3>  <input type=\"submit\" />      </center></noscript></form><script>  window.onload=function(){    document.getElementById('WaitMessage').style.display='';    document.getElementById('mpiRun').submit()    } </script></body></html>",
          "pendingValidation":true
       }
    }

Response for a failed transaction

{
  "status": "error",
  "code": "INVALID_FIRSTNAME | INVALID_CARD | INVALID_LASTNAME",
  "message": ""
}

     OR

  HTTPS/1.1 401 Unauthorized
{
  "status": "error"
}

With this endpoint, you can charge any card or account and disburse into any provided bank account instantly.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer

URL Parameters

The following below shows the breakdown of the request payload for the v1/transfer endpoint.

sender’s details

Parameter Field Type Required Description
firstname String true the firstname of the sender
lastname String true the lastname of the sender
phonenumber String true the phone number of the sender, must be international format starting with +
email String true the email of the sender

Recipient’s details

Parameter Field Type Required Description
recipient String optional recipient type: account, wallet, beneficiary, bulk-account
recipient_id String optional recipient type id
recipient_bank String true bank to send money to
recipient_account_number String true account number of the recipient in the recipient bank
recipients String optional array of recipients

card details

Parameter Field Type Required Description
card_no String true card number to charge
cvv String true cvv of the card to charge
expiry_year String true expiry year of the card to charge
expiry_month String true expiry month of the card to charge

If VERVE CARDS

Parameter Field Type Required Description
pin String true Card PIN required when charging Verve Cards

Auth Model

Parameter Field Type Required Description
charge_with String optional should be set to card
charge_auth String optional should be set to PIN if local Mastercards

Other required transfer details

Parameter Field Type Required Description
apiKey String true your merchant apiKey displayed to you after registering as a merchant.
amount Number true this is the amount to send to the beneficiary
narration String optional Narration is a key for disbursements as it gives more details to your transactions.
fee Number true the amount the merchant wants to add as his commission
redirect_url String true the url to redirect to after transaction has been successfully validated
medium String true this can either be web or mobile or depending on request medium

Key Note

Kindly note there are two ways to identify and differentiate VERVE cards:

  1. VERVE card numbers are usually 19 digits while other cards are 16 digits.

  2. You can use the Card Enquiry endpoint to determine the card type and brand.

Also, note that the PIN auth model works for VERVE cards and local Mastercards, you can use the Card Enquiry endpoint to determine if a mastercard is local. For such transactions, you need to validate using Card to account/wallet validation endpoint supplying the transaction reference and OTP.

The above validation solely depends on the value of the chargeMethod from the response in the first leg, that is, when you have initiated the transaction.
If the chargeMethod response is VBVSECURECODE, the transaction validation will be achieved via authurl or responseHtml.
Always look out for such response as this
"meta": {"chargeMethod":"VBVSECURECODE"}
in your response body when you initiate the transaction before validation. In this case, it is showing that the authentication model is VBVSECURECODE, which means the validation will be carried out over authurl or responsehtml. If the chargeMethod value is PIN, you have to use the Card to account/wallet validation endpoint to validate the transaction.

Cards to Account/Wallet Validation

params = {transactionRef: "tkRowio", otp: "12345"};
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/auth/card", 
headers={ "content-type": "application/json" }, 
params= params);
$headers = array('content-type' => 'application/json');
$query = array('transactionRef'=> 'tkRowio','otp' => '12345'}) // array contains all the required parameters;

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer/charge/auth/card', $headers, $query);
 var unirest = require('unirest');
 var  params = {transactionRef:"tkRowio",otp: "12345"}; // contains all the required parameters
 unirest.post('https://moneywave.herokuapp.com/v1/transfer/charge/auth/card')
 .headers({ 'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/auth/card")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("transactionRef", "tkRowio")
     .field("otp", "12345") 
     .asJson();

   curl -X POST -H "Content-Type: application/json" -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" -H "Cache-Control: no-cache" -d '{
    "transactionRef":"tkRowio",
    "otp":"12345"
   }' "https://moneywave.herokuapp.com/v1/transfer/charge/auth/card"

The above command returns JSON structured like this:

{
    "status": "success",
     "data": 
      { "transfer": 
         { "id": 5032,
           "type": "transfer",
           "firstName": "John",
           "lastName": "Doe",
           "phoneNumber": "+2348105667440",
           "recipientPhone": null,
           "isCardValidationSuccessful": false,
           "isDeliverySuccessful": false,
           "status": "started",
           "medium": "web",
           "ip": "129.56.0.165",
           "exchangeRate": null,
           "amountToSend": 500,
           "amountToCharge": 590,
           "disburseCurrency": "NGN",
           "chargeCurrency": "NGN",
           "flutterChargeResponseCode": "02",
           "flutterChargeResponseMessage": "Pending OTP validation",
           "flutterDisburseResponseMessage": null,
           "flutterChargeReference": "MWV-1489523230971",
           "flutterDisburseReference": null,
           "flutterDisburseResponseCode": null,
           "merchantCommission": 45,
           "moneywaveCommission": 0,
           "netDebitAmount": 590,
           "chargedFee": 90,
           "receiptNumber": null,
           "redirecturl": "your_redirect_url",
           "meta": {"chargeMethod":"VBVSECURECODE"},
           "createdAt": "2017-03-14T20:27:10.000Z",
           "updatedAt": "2017-03-14T20:27:14.000Z",
           "deletedAt": null,
           "userId": 205,
           "merchantId": 140,
           "beneficiaryId": 19,
           "accountId": 6,
           "cardId": null,
           "account": {
           "accountName": "SHAWN MICHAELS",
           "accountNumber":"0690000004",
           "bankCode":"044",
           "bankName":"",
           "createdAt": "2016-10-17T15:55:15.000Z",
           "currency" : "NGN",
           "deletedAt":null
           },
           "beneficiary":{
              "accountName":"ANGUS BROWN",
              "accountNumber" :"0690000005",
              "bankCode":"044",
              "bankName":"",
              "createdAt" : "2016-11-27T14:51:42.000Z",
              "currency":"NGN",
              "deletedAt":null,
              "id":19,
              "updatedAt":"2016-11-27T14:51:42.000Z",
              "userId": 0
              },
        "authparams":
            {"description":"Please validate with the OTP sent to your mobile or email",
              "validateparameter":"OTP"
             },
        "pendingValidation": true 
        } 
    }

 }

Verve Cards will be charged using PIN, the bank determines if they want an extra level of validation, if they do, response code will be 02, and that means you have to validate the transation.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer/charge/auth/card

URL Parameters

Parameter Field Type Required Description
transactionRef String true Flutterwave reference from /v1/transfer call
otp String true a One-time Password sent to the user to validate the transaction

Account to Account(Access Bank Only)

params = {
      "firstname": "John",
      "lastname": "Doe",
      "email":"google@gmail.com",
      "phonenumber":"+2348200990020",
      "recipient_bank": "044",
      "recipient_account_number": "0690000008",
      "charge_with":"account",
      "recipient":"account",
      "sender_account_number":"0690000022",
      "sender_bank":"044",
      "apiKey" :"tk90iifjkjddjkjkjfnf",
      "amount" :5000,
      "narration":"Gucchi shirt payment",
      "fee":45,
      "medium": "web",
      "redirecturl": "https://google.com"
}; 
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
     "firstname"=> "John",
     "lastname"=>"Doe",
     "email"=>"google@gmail.com",
     "phonenumber"=>"+2348200990020",
     "recipient_bank"=>"044",
     "recipient_account_number"=>"0690000008",
     "charge_with"=>"account",
     "recipient"=>"account",
     "sender_account_number"=>"0690000022",
     "sender_bank"=>"044",
     "narration" =>"Gucchi shirt payment",
     "apiKey"=>"tk90iifjkjddjkjkjfnf",
     "amount" =>5000,
     "fee"=>45,
     "medium"=> "web",
     "redirecturl"=>"https://google.com"
   ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer', $headers, $query);
 var unirest = require('unirest');
 var  params = {
   "firstname": "John",
   "lastname": "Doe",
   "email":"google@gmail.com",
   "phonenumber":"+2348200990020",
   "recipient_bank": "044",
   "recipient_account_number": "0690000008",
   "charge_with":"account",
   "recipient":"account",
   "sender_account_number":"0690000022",
   "sender_bank":"044",
   "apiKey" :"tk90iifjkjddjkjkjfnf",
   "amount" :5000,
   "narration":"Gucchi shirt payment",
   "fee":45,
   "medium": "web",
   "redirecturl": "https://google.com"
 }; 
 unirest.post('https://moneywave.herokuapp.com/v1/transfer')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("firstname", "John")
     .field("lastname", "Doe")
     .field("email", "google@gmail.com")
     .field("phonenumber", "+2348200990020")
     .field("recipient_bank", "044")
     .field("recipient_account_number", "0690000008")
     .field("charge_with", "account")
     .field("recipient", "account")
     .field("sender_account_number", "0690000022")
     .field("sender_bank", "044")
     .field("apiKey", "tk90iifjkjddjkjkjfnf")
     .field("amount", 5000)
     .field("narration","Gucchi shirt payment")
     .field("fee", 45)
     .field("medium", "web")
     .field("redirecturl", "https://google.com") 
     .asJson();

   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
       "firstname": "John",
       "lastname": "Doe",
       "email":"google@gmail.com",
       "phonenumber":"+2348200990020",
       "recipient_bank": "044",
       "recipient_account_number": "0690000008",
       "charge_with":"account",
       "recipient":"account",
       "sender_account_number":"0690000022",
       "sender_bank":"044",
       "apiKey" :"tk90iifjkjddjkjkjfnf",
       "amount" :5000,
       "narration" "Gucchi shirt payment",
       "fee":45,
       "medium": "web",
       "redirecturl": "https://google.com"
   }' "https://moneywave.herokuapp.com/v1/transfer"

The above command returns JSON structured like this for a successful transaction after valiation:

{
     "status": "success",
      "data": 
       { 
         "id": 5030,
         "type": "transfer",
         "firstName": "John",
         "lastName": "Doe",
         "phoneNumber": "+2348105667440",
         "recipientPhone": null,
         "isCardValidationSuccessful": false,
         "isDeliverySuccessful": true,
         "status": "completed",
         "medium": "web",
         "ip": "129.56.0.165",
         "exchangeRate": null,
         "amountToSend": 500,
         "amountToCharge": 590,
         "disburseCurrency": "NGN",
         "chargeCurrency": "NGN",
         "flutterChargeResponseCode": "00",
         "flutterChargeResponseMessage": "Approved Or Completed Successfully",
         "flutterDisburseResponseMessage": "Approved Or Completed Successfully",
         "flutterChargeReference": "MWV-1489516350660",
         "flutterDisburseReference": "MWV-1489516350660",
         "flutterDisburseResponseCode": "00",
         "merchantCommission": 45,
         "moneywaveCommission": 0,
         "netDebitAmount": 590,
         "chargedFee": 90,
         "receiptNumber": null,
         "redirecturl": "your_redirect_url",
         "meta": {"chargeMethod":"VBVSECURECODE"},
         "createdAt": "2017-03-14T18:32:30.000Z",
         "updatedAt": "2017-03-14T18:32:46.000Z",
         "deletedAt": null,
         "userId": 205,
         "merchantId": 140,
         "beneficiaryId": 19,
         "accountId": 6,
         "cardId": null,
         "user": 
          { "id": 205,
            "email": "michaelonyeforo112@gmail.com",
            "saveCard": true,
            "createdAt": "2017-01-20T15:17:01.000Z",
            "updatedAt": "2017-01-20T15:17:01.000Z",
            "deletedAt": null },
         "account": 
          { "id": 6,
            "accountNumber": "0690000004",
            "accountName": "SHAWN MICHAELS",
            "bankCode": "044",
            "bankName": "",
            "userId": 7,
            "currency": "NGN",
            "createdAt": "2016-10-17T15:55:15.000Z",
            "updatedAt": "2016-10-17T15:55:15.000Z",
            "deletedAt": null },
         "beneficiary": 
          { "id": 19,
            "accountNumber": "0690000005",
            "accountName": "ANGUS BROWN",
            "bankCode": "044",
            "bankName": "",
            "userId": 0,
            "currency": "NGN",
            "createdAt": "2016-11-27T14:51:42.000Z",
            "updatedAt": "2016-11-27T14:51:42.000Z",
            "deletedAt": null },
          "card": null,
         "is_completed": true
           } 
     }


Response for a failed transaction

{
  "status": "error",
  "code": "INVALID_FIRSTNAME | INVALID_CARD | INVALID_LASTNAME",
  "message": ""
}

     OR

  HTTPS/1.1 401 Unauthorized
{
  "status": "error"
}

With this endpoint, you can charge any card or account in the world and pay into bank account in supporting countries.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer

URL Parameters

Parameter Field Type Required Description
firstname String true the firstname of the sender
lastname String true the lastname of the sender
phonenumber String true the phone number of the sender, must be international format starting with +
email String true the email of the sender
recipient String true recipient type “account”
charge_with String true charge method : account
recipient_bank String true bank to send money to
recipient_account_number String true account number of the recipient in the recipient bank
sender_account_number String true charge source, required in charge with account
sender_bank String true - charge source bank, required in charge with account
apiKey String true your merchant apiKey displayed to you after registering as a merchant.
amount Number true this is the amount to send to the beneficiary
narration String optional Narration is a key for disbursements as it gives more details to your transactions.
medium String true this can either be web or mobile or depending on request medium
redirect_url String true the url to redirect to after transaction has been successfully validated

Account to Account Validation

params = {
    transactionRef: "tkRef",
    authType: OTP/ACCOUNT_CREDIT,
    authValue:''//could be the  OTP value,  this is applicable based on the response from charge request
};
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/auth/account", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array('transactionRef'=> 'tkRef',
'authType' => OTP/ACCOUNT_CREDIT, 
'authValue' =>''//could be the  OTP value,  this is applicable based on the response from charge request
}) ;

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer/charge/auth/account', $headers, $query);
 var unirest = require('unirest');
 var  params = {
     transactionRef:"tkRef",
     authType: OTP/ACCOUNT_CREDIT,
      authValue:''//could be the  OTP value,  this is applicable based on the response from charge request
 }; 
 unirest.post('https://moneywave.herokuapp.com/v1/transfer/charge/auth/account')
 .headers({ 'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/auth/account")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("transactionRef", "tkRef")
     .field("authType", "OTP")// OTP or ACCOUNT_CREDIT
     .field("authValue", "") //could be the  OTP value,  this is applicable based on the response from charge request
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
       "transactionRef": "tkRef",
       "authType": "OTP",// OTP or ACCOUNT_CREDIT
       "authValue":"" //could be the  OTP value,  this is applicable based on the response from charge request
   }' "https://moneywave.herokuapp.com/v1/transfer/charge/auth/account"

The above command returns JSON structured like this:

{
  "status": "success",
  "data": { } // transfer object
 }

Our Live bank accounts require validation to be charged, this could come as a OTP or ACCOUNT_CREDIT. Response code will be 02 will mean you have to validate the transation.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer/charge/auth/account

URL Parameters

Parameter Field Type Required Description
transactionRef String true Flutterwave reference from /v1/transfer call
authType String true Could either be OTP or ACCOUNT_CREDIT
authValue String true The OTP value or the ACCOUNT_CREDIT’s

Wallet Funding

Pay With Internet Banking

params = {
             "amount":10,
             "apiKey":"your_api_key",
             "charge_with":"ext_account",
             "charge_auth":"INTERNETBANKING",
             "firstname": "Okoi",
             "lastname": "Ibiang",
             "phonenumber": "+2348067415830",
             "email":"aaa@bbb.com",
             "medium":"desktop",
             "sender_bank": "058",
             "recipient": "wallet",
             "redirecturl":"http:/localhost:1111/callback"
         }; 
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer", 
headers={ "content-type": "application/json", "Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
             "amount"=>10,
             "apiKey"=>"your_api_key",
             "charge_with"=>"ext_account",
             "charge_auth"=>"INTERNETBANKING",
             "firstname"=>"Okoi",
             "lastname"=>"Ibiang",
             "phonenumber" => "+2348067415830",
             "email"=>"aaa@bbb.com",
             "medium"=>"desktop",
             "sender_bank"=> "058",
             "recipient"=>"wallet",
             "redirecturl"=>"http:/localhost:1111/callback"
    ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer', $headers, $query);
 var unirest = require('unirest');
 var  params = {
     "amount":10,
     "apiKey":"your_api_key",
     "charge_with":"ext_account",
     "charge_auth":"INTERNETBANKING",
     "firstname": "Okoi",
     "lastname": "Ibiang",
     "phonenumber": "+2348067415830",
     "email":"aaa@bbb.com",
     "medium":"desktop",
     "sender_bank": "058",
     "recipient": "wallet",
     "redirecturl":"http:/localhost:1111/callback"

 };
 unirest.post('https://moneywave.herokuapp.com/v1/transfer')
 .headers({'Content-Type': 'application/json', 'Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
      .field("amount",500)
      .field("apiKey","your_Api_key")
      .field("charge_with","ext_account")
      .field("charge_auth","INTERNETBANKING")
      .field("firstame","Okoi")
      .field("lastname","Ibiang")
      .field("phonenumber","+2348067415830")
      .field("email","ibiang_o@bts.com.ng")
      .field("medium","desktop")
      .field("sender_bank","058")
      .field("recipient","wallet")
      .field("redirecturl","http:/your_site.com/validate")
      .asJson();

   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
      "amount":500,
      "apiKey":"your_api_key",
      "charge_with":"ext_account",
      "charge_auth":"INTERNETBANKING",
      "firstname": "Okoi",
      "lastname": "Ibiang",
      "phonenumber": "+2348067415830",
      "email":"ibiang_o@bts.com.ng",
      "medium":"desktop",
      "sender_bank": "058",
      "recipient":"wallet",
      "redirecturl":"http:/your_site.com/validate"
   }' "https://moneywave.herokuapp.com/v1/transfer"

The above command returns JSON structured like this:

{  "status": "success",
  "data": {
    "transfer": {
      "id": 203,
      "type": "transfer",
      "firstName": "Okoi",
      "lastName": "Ibiang",
      "phoneNumber": "+2348067415830",
      "recipientPhone": null,
      "isCardValidationSuccessful": false,
      "isDeliverySuccessful": false,
      "status": "started",
      "medium": "desktop",
      "ip": "::ffff:127.0.0.1",
      "exchangeRate": null,
      "amountToSend": 10,
      "amountToCharge": 51,
      "disburseCurrency": "NGN",
      "chargeCurrency": "NGN",
      "flutterChargeResponseCode": "02",
      "flutterChargeResponseMessage": "Pending transaction redirect",
      "flutterDisburseResponseMessage": null,
      "flutterChargeReference": "MWV-1493112708042",
      "flutterDisburseReference": null,
      "flutterDisburseResponseCode": null,
      "merchantCommission": 1,
      "moneywaveCommission": 0,
      "netDebitAmount": 51,
      "chargedFee": 41,
      "receiptNumber": null,
      "redirecturl": "http:/thrivesend.com/validate",
      "linkingReference": null,
      "source": "account",
      "source_id": "18",
      "meta": "{\"chargeMethod\":\"INTERNET_BANKING\"}",
      "additionalFields": null,
      "createdAt": "2017-04-25T09:31:47.000Z",
      "updatedAt": "2017-04-25T09:31:51.000Z",
      "deletedAt": null,
      "userId": 42,
      "merchantId": 1,
      "beneficiaryId": 1,
      "accountId": 18,
      "cardId": null,
      "account": {
        "id": 18,
        "accountNumber": "0000000000",
        "accountName": "Test",
        "bankCode": "058",
        "bankName": "",
        "userId": "0",
        "currency": "NGN",
        "createdAt": "2017-04-11T10:37:23.000Z",
        "updatedAt": "2017-04-11T10:37:23.000Z",
        "deletedAt": null
      },
      "beneficiary": {
        "id": 1,
        "accountNumber": "0000000000",
        "accountName": "Test",
        "bankCode": "323",
        "bankName": "",
        "userId": "0",
        "currency": "NGN",
        "createdAt": "2017-01-22T14:16:28.000Z",
        "updatedAt": "2017-01-22T14:16:28.000Z",
        "deletedAt": null
      }
    },
    "authurl": "https://flutterwavestaging.com:9443/flwib/trxauth?hid=FLW7d27ae660bad49c5914a915e5e16cd5b",
    "authparams": [],
    "pendingValidation": true,
    "chargeMethod": "INTERNET_BANKING"
  }
}

Response for a failed transaction

{
  "status": "error",
  "code": "INVALID_FIRSTNAME | INVALID_CARD | INVALID_LASTNAME",
  "message": ""
}

     OR

  HTTPS/1.1 401 Unauthorized
{
  "status": "error"
}

You can now carry out seamless transactions with Internet banking on Moneywave.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer

URL Parameters

Parameter Field Type Required Description
firstname String true the firstname of the sender
lastname String true the lastname of the sender
phonenumber String true the phone number of the sender, must be international format starting with +
email String true the email of the sender
recipient String true set to beneficiary
recipient_id String true recipient type id
sender_bank String true bank code of the sender
charge_auth String true should be set to INTERNETBANKING
charge_with String true should be set to ext_account
apiKey String true your merchant apiKey displayed to you after registering as a merchant.
amount Number true this is the amount to send to the beneficiary
redirect_url String true the url to redirect to after transaction has been successfully validated
medium String true this can either be web or mobile or depending on request medium

Account to Wallet(Access Bank Only)

params = {
      "firstname": "John",
     "lastname": "Doe",
     "email":"google@gmail.com",
     "phonenumber":"+2348200990020",
     "charge_with":"account",
     "recipient":"wallet",
     "sender_account_number":"0690000022",
     "sender_bank":"044",
     "apiKey" :"tk90iifjkjddjkjkjfnf",
     "amount" :5000,
     "fee":45,
     "medium": "web",
     "redirecturl": "https://google.com"
}; 
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
     "firstname"=> "John",
     "lastname"=>"Doe",
     "email"=>"google@gmail.com",
     "phonenumber"=>"+2348200990020",
     "charge_with"=>"account",
     "recipient"=>"wallet",
     "sender_account_number":"0690000022",
     "sender_bank":"044",
     "apiKey"=>"tk90iifjkjddjkjkjfnf",
     "amount" =>5000,
     "fee"=>45,
     "medium"=> "web",
     "redirecturl": "https://google.com"

   ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer', $headers, $query);
 var unirest = require('unirest');
 var  params = {
   "firstname": "John",
   "lastname": "Doe",
   "email":"google@gmail.com",
   "phonenumber":"+2348200990020",
   "charge_with":"account",
   "recipient":"wallet",
   "sender_account_number":"0690000022",
   "sender_bank":"044",
   "apiKey" :"tk90iifjkjddjkjkjfnf",
   "amount" :5000,
   "fee":45,
   "medium": "web",
   "redirecturl": "https://google.com"

 }; 
 unirest.post('https://moneywave.herokuapp.com/v1/transfer')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("firstname", "John")
     .field("lastname", "Doe")
     .field("email", "google@gmail.com")
     .field("phonenumber", "+2348200990020")
     .field("charge_with", "account")
     .field("recipient", "wallet")
     .field("sender_account_number", "0690000022")
     .field("sender_bank", "044")
     .field("apiKey", "tk90iifjkjddjkjkjfnf")
     .field("amount", 5000)
     .field("fee", 45)
     .field("medium", "web")
     .field("redirecturl", "https://google.com") 
     .asJson();

   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
       "firstname": "John",
      "lastname": "Doe",
      "email":"google@gmail.com",
      "phonenumber":"+2348200990020",
      "charge_with":"account",
      "recipient":"wallet",
      "sender_account_number":"0690000022",
      "sender_bank":"044",
      "apiKey" :"tk90iifjkjddjkjkjfnf",
      "amount" :5000,
      "fee":45,
      "medium": "web",
      "redirecturl": "https://google.com"
   }' "https://moneywave.herokuapp.com/v1/transfer"

The above command returns JSON structured like this for a successful transaction after valiation:

{
  "status": "success",
  "data": {
    "transfer": {
      "id": 5588,
      "type": "fund-wallet",
      "firstName": "John",
      "lastName": "Doe",
      "phoneNumber": "+2348100078901",
      "recipientPhone": null,
      "isCardValidationSuccessful": false,
      "isDeliverySuccessful": false,
      "status": "started",
      "medium": "desktop",
      "ip": "41.58.61.207",
      "exchangeRate": null,
      "amountToSend": 500,
      "amountToCharge": 500,
      "disburseCurrency": "NGN",
      "chargeCurrency": "NGN",
      "flutterChargeResponseCode": "02",
      "flutterChargeResponseMessage": "Pending OTP validation",
      "flutterDisburseResponseMessage": null,
      "flutterChargeReference": "MWV-1490701539004",
      "flutterDisburseReference": null,
      "flutterDisburseResponseCode": null,
      "merchantCommission": 0,
      "moneywaveCommission": 0,
      "netDebitAmount": 500,
      "chargedFee": 0,
      "receiptNumber": null,
      "redirecturl": "http://localhost:3000/confirm",
      "linkingReference": null,
      "meta": "{\"walletURef\":0,\"chargeMethod\":\"VBVSECURECODE\"}",
      "createdAt": "2017-03-28T11:45:38.000Z",
      "updatedAt": "2017-03-28T11:45:42.000Z",
      "deletedAt": null,
      "userId": 277,
      "merchantId": 141,
      "beneficiaryId": 13,
      "accountId": 20,
      "cardId": null,
      "account": {
        "id": 20,
        "accountNumber": "0690000031",
        "accountName": "Forrest Green",
        "bankCode": "044",
        "bankName": "",
        "userId": 0,
        "currency": "NGN",
        "createdAt": "2016-11-28T16:05:28.000Z",
        "updatedAt": "2016-11-28T16:05:28.000Z",
        "deletedAt": null
      },
      "beneficiary": {
        "id": 13,
        "accountNumber": "0000000000",
        "accountName": "Test",
        "bankCode": "323",
        "bankName": "",
        "userId": 26,
        "currency": "NGN",
        "createdAt": "2016-10-28T20:25:30.000Z",
        "updatedAt": "2016-10-28T20:25:30.000Z",
        "deletedAt": null
      }
    },
    "authparams": [
      {
        "validateparameter": "OTP",
        "description": "Please validate with the OTP sent to your mobile or email"
      }
    ],
    "pendingValidation": true
  }
}


Response for a failed transaction

{
  "status": "error",
  "code": "INVALID_FIRSTNAME | INVALID_CARD | INVALID_LASTNAME",
  "message": ""
}

     OR

  HTTPS/1.1 401 Unauthorized
{
  "status": "error"
}

With this endpoint, you can charge any account in the world and pay into wallet in supporting countries.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer

URL Parameters

Parameter Field Type Required Description
firstname String true the firstname of the sender
lastname String true the lastname of the sender
phonenumber String true the phone number of the sender, must be international format starting with +
email String true the email of the sender
recipient String true recipient type “wallet”
charge_with String true charge method : account
sender_account_number String true charge source, required in charge with account
sender_bank String true - charge source bank, required in charge with account
apiKey String true your merchant apiKey displayed to you after registering as a merchant.
amount Number true this is the amount to send to the beneficiary
medium String true this can either be web or mobile or depending on request medium
redirect_url String true the url to redirect to after transaction has been successfully carried out

Account to Wallet Validation

params = {
    transactionRef: "tkRef",
    authType: OTP/ACCOUNT_CREDIT,
    authValue:''//could be the  OTP value,  this is applicable based on the response from charge request
};
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/auth/account", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array('transactionRef'=> 'tkRef',
'authType' => OTP/ACCOUNT_CREDIT, 
'authValue' =>''//could be the  OTP value,  this is applicable based on the response from charge request
}) ;

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer/charge/auth/account', $headers, $query);
 var unirest = require('unirest');
 var  params = {
     transactionRef:"tkRef",
     authType: OTP/ACCOUNT_CREDIT,
      authValue:''//could be the  OTP value,  this is applicable based on the response from charge request
 }; 
 unirest.post('https://moneywave.herokuapp.com/v1/transfer/charge/auth/account')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/auth/account")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("transactionRef", "tkRef")
     .field("authType", "OTP")// OTP or ACCOUNT_CREDIT
     .field("authValue", "") //could be the  OTP value,  this is applicable based on the response from charge request
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
       "transactionRef": "tkRef",
       "authType": "OTP",// OTP or ACCOUNT_CREDIT
       "authValue":"" //could be the  OTP value,  this is applicable based on the response from charge request
   }' "https://moneywave.herokuapp.com/v1/transfer/charge/auth/account"

The above command returns JSON structured like this:

{
  "status": "success",
  "data": {
    "id": 5588,
    "type": "fund-wallet",
    "firstName": "John",
    "lastName": "Doe",
    "phoneNumber": "+2348100078901",
    "recipientPhone": null,
    "isCardValidationSuccessful": false,
    "isDeliverySuccessful": false,
    "status": "completed",
    "medium": "desktop",
    "ip": "41.58.61.207",
    "exchangeRate": null,
    "amountToSend": 500,
    "amountToCharge": 500,
    "disburseCurrency": "NGN",
    "chargeCurrency": "NGN",
    "flutterChargeResponseCode": "00",
    "flutterChargeResponseMessage": "Approved Or Completed Successfully",
    "flutterDisburseResponseMessage": null,
    "flutterChargeReference": "MWV-1490701539004",
    "flutterDisburseReference": null,
    "flutterDisburseResponseCode": null,
    "merchantCommission": 0,
    "moneywaveCommission": 0,
    "netDebitAmount": 500,
    "chargedFee": 0,
    "receiptNumber": null,
    "redirecturl": "http://localhost:3000/confirm",
    "linkingReference": null,
    "meta": "{\"walletURef\":0,\"chargeMethod\":\"VBVSECURECODE\",\"processor\":{\"responsecode\":\"00\",\"redirecturl\":null,\"responsemessage\":\"Approved Or Completed Successfully\",\"transactionreference\":\"MWV-1490701539004\",\"authparams\":[],\"accounttoken\":null}}",
    "createdAt": "2017-03-28T11:45:38.000Z",
    "updatedAt": "2017-03-28T11:48:56.000Z",
    "deletedAt": null,
    "userId": 277,
    "merchantId": 141,
    "beneficiaryId": 13,
    "accountId": 20,
    "cardId": null,
    "user": {
      "id": 277,
      "email": "tester@flutter.com",
      "saveCard": true,
      "createdAt": "2017-02-19T09:55:22.000Z",
      "updatedAt": "2017-02-19T09:55:22.000Z",
      "deletedAt": null
    },
    "account": {
      "id": 20,
      "accountNumber": "0690000031",
      "accountName": "Forrest Green",
      "bankCode": "044",
      "bankName": "",
      "userId": 0,
      "currency": "NGN",
      "createdAt": "2016-11-28T16:05:28.000Z",
      "updatedAt": "2016-11-28T16:05:28.000Z",
      "deletedAt": null
    },
    "beneficiary": {
      "id": 13,
      "accountNumber": "0000000000",
      "accountName": "Test",
      "bankCode": "323",
      "bankName": "",
      "userId": 26,
      "currency": "NGN",
      "createdAt": "2016-10-28T20:25:30.000Z",
      "updatedAt": "2016-10-28T20:25:30.000Z",
      "deletedAt": null
    },
    "card": null,
    "is_completed": true
  }
}

Our Live bank accounts require validation to be charged, this could come as a OTP or ACCOUNT_CREDIT. Response code will be 02 will mean you have to validate the transation.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer/charge/auth/account

URL Parameters

Parameter Field Type Required Description
transactionRef String true Flutterwave reference from /v1/transfer call
authType String true Could either be OTP or ACCOUNT_CREDIT
authValue String true The OTP value or the ACCOUNT_CREDIT’s

Card to Wallet

params = {
              "firstname": "John",
              "lastname": "Doe",
              "email":"google@gmail.com",
              "phonenumber":"+2348020099002",
              "recipient":"wallet",
              "card_no": "5289899898983388",
              "cvv": "788",
              "pin":"8989", //optional required when using VERVE card
              "expiry_year":"2022",
              "expiry_month": "09",
              "charge_auth":"PIN", //optional required where card is a local Mastercard
              "apiKey" :"tk90iifjkjddjkjkjfnf",
              "fee":"45",
              "medium": "web",
              "redirecturl": "https://google.com"
}; 
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer", 
headers={ "content-type": "application/json", "Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
           "firstname"=> "John",
           "lastname"=> "Doe",
           "email"=>"google@gmail.com",
           "phonenumber"=>"+2348020099002",
           "recipient"=>"wallet",
           "card_no"=> "5289899898983388",
           "cvv"=> "788",
           "pin"=>"8989", //optional required when using VERVE card
           "expiry_year"=>"2022",
           "expiry_month"=>"09",
           "charge_auth"=>"PIN", //optional required where card is a local Mastercard
           "apiKey" =>"tk90iifjkjddjkjkjfnf",
           "amount" =>5000,
           "fee"=>45,
           "medium"=> "web",
           "redirecturl"=> "https://google.com"
    ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer', $headers, $query);
 var unirest = require('unirest');
 var  params = {

          "firstname": "John",
          "lastname": "Doe",
          "email":"google@gmail.com",
          "phonenumber":"+2348020099002",
          "recipient":"wallet",
          "card_no": "5289899898983388",
          "cvv": "788",
          "pin":"8989", //optional required when using VERVE card
          "expiry_year":"2022",
          "expiry_month": "09",
          "charge_auth":"PIN", //optional required where card is a local Mastercard
          "apiKey" :"tk90iifjkjddjkjkjfnf",
          "amount" :5000,
          "fee":45,
          "medium": "web",
          "redirecturl": "https://google.com"
 };
 unirest.post('https://moneywave.herokuapp.com/v1/transfer')
 .headers({'Content-Type': 'application/json', 'Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("firstname", "John")
     .field("lastname", "Doe")
     .field("email", "google@gmail.com")
     .field("phonenumber", "+2348020099002")
     .field("recipient", "wallet")
     .field("card_no", "5289899898983388")
     .field("cvv", "788")
     .field("pin", "8989") //optional required when using VERVE card
     .field("expiry_year", "2022")
     .field("expiry_month", "09")
     .field("charge_auth","PIN") //optional required where card is a local Mastercard
     .field("apiKey", "tk90iifjkjddjkjkjfnf")
     .field("amount", 5000)
     .field("fee", 45)
     .field("medium", "web")
     .field("redirecturl", "https://google.com") 
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
      "firstname": "John",
      "lastname": "Doe",
      "email":"google@gmail.com",
      "phonenumber":"+2348020099002",
      "recipient":"wallet",
      "card_no": "5289899898983388",
      "cvv": "788",
      "pin":"8989", //optional required when using VERVE card
      "expiry_year":"2022",
      "expiry_month": "09",
      "charge_auth":"PIN", //optional required where card is a local Mastercard
      "apiKey" :"tk90iifjkjddjkjkjfnf",
      "amount" :5000,
      "fee":45,
      "medium": "web",
      "redirecturl": "https://google.com"
   }' "https://moneywave.herokuapp.com/v1/transfer"

The above command returns JSON structured like this:

  {
   "status":"success",
   "data":{
   "transfer":
         {"id":4998,
         "type":"fund-wallet",
         "firstName":"John",
         "lastName":"Doe",
         "phoneNumber":"+2348105667440",
         "recipientPhone":null,
         "isCardValidationSuccessful":false,
         "isDeliverySuccessful":false,
         "status":"started",
         "medium":"web",
         "ip":"54.196.45.207",
         "exchangeRate":null,
         "amountToSend":500,
         "amountToCharge":563,
         "disburseCurrency":"NGN",
         "chargeCurrency":"NGN",
         "flutterChargeResponseCode":"02",
         "flutterChargeResponseMessage":"Pending, Validation",
         "flutterDisburseResponseMessage":null,
         "flutterChargeReference":"FLWT00530305",
         "flutterDisburseReference":null,
         "flutterDisburseResponseCode":null,
         "merchantCommission":45,
         "moneywaveCommission":18,
         "netDebitAmount":563,
         "chargedFee":63,
         "receiptNumber":null,
         "redirecturl":"your_redirect_url",
         "meta":"{\"walletURef\":0,\"chargeMethod\":\"VBVSECURECODE\"}",
         "createdAt":"2017-03-14T09:56:05.000Z",
         "updatedAt":"2017-03-14T09:56:08.000Z",
         "deletedAt":null,
         "userId":205,
         "merchantId":140,
         "beneficiaryId":13,
         "accountId":null,
         "cardId":378,
         "account":null,
         "beneficiary":
              {"id":13,
              "accountNumber":"0000000000",
              "accountName":"Test",
              "bankCode":"323",
              "bankName":"",
              "userId":26,
              "currency":"NGN",
              "createdAt":"2016-10-28T20:25:30.000Z",
              "updatedAt":"2016-10-28T20:25:30.000Z",
              "deletedAt":null
              }
         },
         "authurl":"http://staging1flutterwave.co:8080/pwc/PxJEOevEj9Dgq6i.html","responsehtml":"<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><meta http-equiv=\"cache-control\" content=\"no-cache\" /><meta http-equiv=\"expires\" content=\"31 Dec 1997\" /><meta http-equiv=\"Pragma\" content=\"no-cache\" /><meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\" /><title>Flutterwave Payment Gateway</title><meta content=\"yes\" name=\"apple-mobile-web-app-capable\" /><meta content=\"black\" name=\"apple-mobile-web-app-status-bar-style\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0\"/></head><body><div class=\"waitmsg\" id=\"WaitMessage\" style=\"display:none\"><WaitMessage>Transaction Processing, Please Wait...</WaitMessage></div><form id=\"mpiRun\" action=\"https://migs.mastercard.com.au/vpcpay\" method=\"post\"><input type=\"hidden\" name=\"vpc_AccessCode\" value=\"3E7DB883\" /> <input type=\"hidden\" name=\"vpc_Amount\" value=\"56300\" /> <input type=\"hidden\" name=\"vpc_CardExp\" value=\"1808\" /> <input type=\"hidden\" name=\"vpc_CardNum\" value=\"5200828282828210\" /> <input type=\"hidden\" name=\"vpc_CardSecurityCode\" value=\"812\" /> <input type=\"hidden\" name=\"vpc_Command\" value=\"pay\" /> <input type=\"hidden\" name=\"vpc_Currency\" value=\"NGN\" /> <input type=\"hidden\" name=\"vpc_Locale\" value=\"en\" /> <input type=\"hidden\" name=\"vpc_MerchTxnRef\" value=\"FLWT00530305\" /> <input type=\"hidden\" name=\"vpc_Merchant\" value=\"FLVM01\" /> <input type=\"hidden\" name=\"vpc_OrderInfo\" value=\"ODRFLWT00530305\" /> <input type=\"hidden\" name=\"vpc_ReturnAuthResponseData\" value=\"Y\" /> <input type=\"hidden\" name=\"vpc_ReturnURL\" value=\"https://flutterwavestaging.com:9443/FlutterMigs/threepartytransaction\" /> <input type=\"hidden\" name=\"vpc_Version\" value=\"1\" /> <input type=\"hidden\" name=\"vpc_card\" value=\"Mastercard\" /> <input type=\"hidden\" name=\"vpc_gateway\" value=\"threeDSecure\" /> <input type=\"hidden\" name=\"vpc_SecureHash\" value=\"775EBA18D6AE8C781491C950381F248EE7506F3D48B6631E035A00B39A2D3063\" /> <input type=\"hidden\" name=\"vpc_SecureHashType\" value=\"SHA256\" />       <br>      <br><noscript>      <center>      <h1>Processing your 3-D Secure Transaction</h1>      <h2>      JavaScript is currently disabled or is not supported            by your browser.<br></h2>      <h3>Please click <b>< Submit ></b> to continue            the processing of your 3-D Secure            transaction.</h3>  <input type=\"submit\" />      </center></noscript></form><script>  window.onload=function(){    document.getElementById('WaitMessage').style.display='';    document.getElementById('mpiRun').submit()    } </script></body></html>","pendingValidation":true}
  }

Response for a failed transaction

  {
    "status": "error",
    "code": "INVALID_FIRSTNAME | INVALID_CARD | INVALID_LASTNAME",
    "message": ""
  }

       OR

    HTTPS/1.1 401 Unauthorized
  {
    "status": "error"
  }

The chief premise of this solution is that you can charge any card in the world and deposit the funds to your wallet in that currency. To successfully transfer money from a card to your wallet, you need to call v1/transfer and supply all the necessary parameters

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer

URL Parameters

The following below shows the breakdown of the request payload for the v1/transfer endpoint.

sender’s details

Parameter Field Type Required Description
firstname String true the firstname of the sender
lastname String true the lastname of the sender
phonenumber String true the phone number of the sender, must be international format starting with +
email String true the email of the sender

Recipient’s details

Parameter Field Type Required Description
recipient String true recipient type set to “wallet”
recipient_id String Optional this has to be a specific recipient id i.e sub-wallet reference

card details

Parameter Field Type Required Description
card_no String true card number to charge
cvv String true cvv of the card to charge
expiry_year String true expiry year of the card to charge
expiry_month String true expiry month of the card to charge

If VERVE CARDS

Parameter Field Type Required Description
pin String true Card PIN required when charging Verve Cards

Auth Model

Parameter Field Type Required Description
charge_with String optional should be set to card or token or card-token or tokenized_card
charge_auth String optional should be set to PIN if local Mastercards

Auth Model Parameter definitions

Parameter Field Type Required Description
hash String true Hashed card token is required; the card token is obtained from the card tokenization endpoint
card_last4 String true Card last 4 digits are required
card_first6 String true Card first 6 digits are required
Parameter Field Type Required Description
card_last4 String true Card last 4 digits are required
cvv String true Card cvv is required
card_id String true The Card ID is required.
Parameter Field Type Required Description
card_token String true the card token is required; this is obtained from the card tokenization endpoint

Other required transfer details

Parameter Field Type Required Description
apiKey String true your merchant apiKey displayed to you after registering as a merchant.
amount Number true this is the amount to send to the beneficiary
narration String optional Narration is a key for disbursements as it gives more details to your transactions.
fee Number true the amount the merchant wants to add as his commission
redirect_url String true the url to redirect to after transaction has been successfully validated
medium String true this can either be web or mobile or depending on request medium
charge_currency String Optional you have to specify the currency for card charge, it could be “NGN”,“KES” or “GHS” depending on the currency the wallet was created in.
disburse_currency String Optional you have to specify the disburse currency for recipient, it could be “NGN”, “KES” or “GHS” depending on the currency the wallet was created in..

Wallet Transfers

Wallet to Wallet

params = {
     "sourceWallet": 0,
      "recipientWallet": 1,
      "amount": "10",
      "currency": "NGN",
      "lock": "password"
}; 
response = unirest.post("https://moneywave.herokuapp.com/v1/wallet/transfer", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
      "sourceWallet"=> 0,
      "recipientWallet"=> 1,
      "amount"=> "10",
      "currency"=> "NGN",
      "lock"=>"password"

   ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/wallet/transfer', $headers, $query);
 var unirest = require('unirest');
 var  params = {
     "sourceWallet": 0,
     "recipientWallet": 1,
     "amount": "10",
     "currency": "NGN",
     "lock": "password"
 }; 
 unirest.post('https://moneywave.herokuapp.com/v1/wallet/transfer')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/wallet/transfer")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("sourceWallet", 0)
     .field("recipientWallet", 1)
     .field("amount", "10")
     .field("currency", "NGN")
     .field("lock", "password")
     .asJson();

   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{

         "sourceWallet": 0,
         "recipientWallet": 1,
         "amount": "10",
         "currency": "NGN",
         "lock": "password"

   }' "https://moneywave.herokuapp.com/v1/wallet/transfer"

The above command returns JSON structured like this for a successful transaction after valiation:

{
    "status": "success",
    "data": "Transfer Successful"
}

Response for a failed transaction

{
  "status": "error",
  "code":"",//error code
  "message": ""
}

     OR

  HTTPS/1.1 401 Unauthorized
{
  "status": "error"
}

With this endpoint, you can transfer funds from one wallet to another.

HTTP Request

POST https://moneywave.herokuapp.com/v1/wallet/transfer

URL Parameters

Parameter Field Type Required Description
sourceWallet String true the sender wallet number
recipientWallet String true the destination wallet number
amount String true the amount to transfer
currency String true the currency to charge the wallet in
lock String true the wallet password

Wallet to Account(Single)

params = {
    "lock":"888909",
    "amount":5000,
    "bankcode":"044",
    "accountNumber":"0690000005",
    "currency":"NGN",
    "senderName":"Prime Inc",
    "narration":"Gucchi shirt payment",//Optional 
    "ref":"KFKJ09090"
    };
response = unirest.post("https://moneywave.herokuapp.com/v1/disburse", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
     "lock"=>"888909",
     "amount"=>5000,
     "bankcode"=>"044",
     "accountNumber"=>"0690000005",
     "currency"=>"NGN",
     "senderName"=>"Prime Inc",
     "narration"=>"Gucchi shirt payment", //Optional
     "ref"=>"KFKJ09090"
   ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/disburse', $headers, $query);
 var unirest = require('unirest');
 var  params = {
    "lock":"888909",
    "amount":5000,
    "bankcode":"044",
    "accountNumber":"0690000005",
    "currency":"NGN",
    "senderName":"Prime Inc",
    "narration":"Gucchi shirt payment", //Optional
    "ref":"KFKJ09090"
 }; 
 unirest.post('https://moneywave.herokuapp.com/v1/disburse')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/disburse")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("lock", "888909")
     .field("amount", 5000)
     .field("bankcode", "044")
     .field("accountNumber", "0690000005")
     .field("currency", "NGN")
     .field("senderName", "Prime Inc")
     .field("narration","Gucchi shirt payment") // Optionall
     .field("ref", "KFKJ09090")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
      "lock":"888909",
      "amount":5000,
      "bankcode":"044",
      "accountNumber":"0690000005",
      "currency":"NGN",
      "senderName":"Prime Inc",
      "narration":"Gucchi shirt payment", // Optional
      "ref":"KFKJ09090"
   }' "https://moneywave.herokuapp.com/v1/disburse"

The above command returns JSON structured like this:

{
  "status": "success",
  "data": {
    "data": {
      "responsecode": "00",
      "responsemessage": "Approved Or Completed Successfully",
      "uniquereference": "TMW000000317"
    },
    "status": "success"
  } 
}

To successfully transfer money from a funded wallet to an account, you need to call v1/disburse and supply all the necessary parameters

HTTP Request

POST https://moneywave.herokuapp.com/v1/disburse

URL Parameters

Parameter Field Type Required Description
lock String true the password of your wallet
amount Number true the amount to send to the beneficiary
bankcode String true the bankcode of the bank to send money to
accountNumber String true the account number of the recipient
currency String optional the currency to send money in
senderName String true the name of the sender
narration String optional Narration is a key for disbursements as it gives more details to your transactions.
ref String true unique transaction reference

Wallet to Account(Bulk)

params = {
             "currency": "NGN",
             "lock": "password",
             "senderName": "Company",
             "ref": "TRT111",
             "name": Batch 1",
             "instantQueue": true,
             "recipients": [
                 {
                     "accountNumber": "0690000004",
                     "bankcode": "044",
                     "amount": "10"
                 }
             ]
         };
response = unirest.post("https://moneywave.herokuapp.com/v1/disburse/queue", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"}, 
params=params);
$headers = array('content-type' => 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(

    "currency"=>"NGN",
     "lock"=>"password",
     "senderName"=> "Company",
     "ref"=> "TRT111",
     "name"=> "Batch 1",
     "instantQueue"=>true,
     "recipients"=>array(
             "accountNumber": "0690000004",
             "bankcode": "044",
             "amount": "10"
     )
    ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/disburse/queue', $headers, $query);
 var unirest = require('unirest');
var  params = {
               "currency": "NGN",
               "lock": "password",
               "senderName": "Company",
               "ref": "TRT111",
               "name": "Batch 1",
               "instantQueue": true,
               "recipients": [
                   {
                       "accountNumber": "0690000004",
                       "bankcode": "044",
                       "amount": "10"
                   }
               ]
   };
 unirest.post('https://moneywave.herokuapp.com/v1/disburse/queue')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   List<Map<String,Object>> values = new ArrayList<>();

    Map<String,Object> map = new HashMap<>();
    map.put('amount',100);
    map.put('bankcode',"044");
    map.put('accountNumber',"0690000005");

    values.add(map);

    map = new HashMap<>();
        map.put('amount',200);
        map.put('bankcode',"044");
        map.put('accountNumber',"0690000005");


        values.add(map);


   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/disburse/queue")
        .header("content-type", "application/json")
        .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
        .field("lock", "888909")
        .field("recipients", values)
        .field("currency", "NGN")
        .field("name", "Batch 1")
        .field("instantQueue", true)
        .field("senderName", "THRIVE")
        .field("narration","Gucchi shirt payment")
        .field("ref", "TRT111")
        .asJson();

   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
       {
          "currency": "NGN",
          "lock": "password",
          "senderName": "Company",
          "ref": "TRT111",
          "name": "Batch 1",
          "instantQueue": true,
          "recipients": [
              {
                  "accountNumber": "0690000004",
                  "bankcode": "044",
                  "amount": "10"
              }
          ]
    };

   }' "https://moneywave.herokuapp.com/v1/disburse/queue"

The above command returns JSON structured like this:

{
  "status": "success",
  "failed": 0,
  "passed": 2,
  "data": [
    {
      "accountNumber": "0690000005",
      "data": {
        "responsecode": "00",
        "responsemessage": "Approved Or Completed Successfully",
        "uniquereference": "TMW000000311"
      }
    },
    {
      "accountNumber": "0690000006",
      "data": {
        "responsecode": "00",
        "responsemessage": "Approved Or Completed Successfully",
        "uniquereference": "TMW000000312"
      }
    }
  ]
}                        

To successfully transfer money from a funded wallet to an account, you need to call v1/disburse and supply all the necessary parameters

URL Parameters

Parameter Field Type Required Description
lock String true the password of your wallet
recipients(Array): amount(Number), bankcode(String), accountNumber(String) Array true the recipients object contains the amount(Number) to send, the recipient bankcode and the recipient account number,
currency String optional the currency to send money in
senderName String true the name of the sender
name String true a unique batch name for this disbursement
ref String true unique transaction reference
instantQueue String true this should be set to true

HTTP Request

POST https://moneywave.herokuapp.com/v1/disburse/queue

Wallet to Account(Bulk) - DEPRECATED

params = {
    "lock":"539935",
    "recipients": [
      {
        "amount":100,
        "bankcode":"044",
        "accountNumber":"0690000005",
        "ref":"7"
      },
      {
        "amount":200,
        "bankcode":"044",
        "accountNumber":"0690000006",
        "ref":"8"
      }
    ],
    "currency": "NGN",
    "senderName": "THRIVE",
    "narration":"Gucchi shirt payment", //Optional
    "ref":"46"
}; 
response = unirest.post("https://moneywave.herokuapp.com/v1/disburse/bulk", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"}, 
params=params);
$headers = array('content-type' => 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
    "lock"=>"539935",
    "recipients" =>array( 
        "amount"=>100,
        "bankcode"=>"044",
        "accountNumber"=>"0690000005",
        "ref"=>"7"
      ),
    "currency"=>"NGN",
    "senderName"=> "THRIVE",
    "narration"=>"Gucchi shirt payment", // Optional
    "ref"=>"46"
    ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/disburse/bulk', $headers, $query);
 var unirest = require('unirest');
var  params = {
    "lock":"539935",
    "recipients": [
      {
        "amount":100,
        "bankcode":"044",
        "accountNumber":"0690000005",
        "ref":"7"
      },
      {
        "amount":200,
        "bankcode":"044",
        "accountNumber":"0690000006",
        "ref":"8"
      }
    ],
    "currency": "NGN",
    "senderName": "THRIVE",
    "narration":"Gucchi shirt payment", //Optional
    "ref":"46"

}; 
 unirest.post('https://moneywave.herokuapp.com/v1/disburse/bulk')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   List<Map<String,Object>> values = new ArrayList<>();

    Map<String,Object> map = new HashMap<>();
    map.put('amount',100);
    map.put('bankcode',"044");
    map.put('accountNumber',"0690000005");
    map.put('ref',7);

    values.add(map);

    map = new HashMap<>();
        map.put('amount',200);
        map.put('bankcode',"044");
        map.put('accountNumber',"0690000005");
        map.put('ref',8);

        values.add(map);


   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/disburse")
        .header("content-type", "application/json")
        .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
        .field("lock", "888909")
        .field("recipients", values)
        .field("currency", "NGN")
        .field("senderName", "THRIVE")
        .field("narration","Gucchi shirt payment")
        .field("ref", "46")
        .asJson();

   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
       "lock":"539935",
           "recipients": [
             {
               "amount":100,
               "bankcode":"044",
               "accountNumber":"0690000005",
               "ref":"7"
             },
             {
               "amount":200,
               "bankcode":"044",
               "accountNumber":"0690000006",
               "ref":"8"
             }
           ],
           "currency": "NGN",
           "senderName": "THRIVE",
           "narration":"Gucchi shirt payment",
           "ref":"46"

   }' "https://moneywave.herokuapp.com/v1/disburse/bulk"

The above command returns JSON structured like this:

{
  "status": "success",
  "failed": 0,
  "passed": 2,
  "data": [
    {
      "accountNumber": "0690000005",
      "data": {
        "responsecode": "00",
        "responsemessage": "Approved Or Completed Successfully",
        "uniquereference": "TMW000000311"
      }
    },
    {
      "accountNumber": "0690000006",
      "data": {
        "responsecode": "00",
        "responsemessage": "Approved Or Completed Successfully",
        "uniquereference": "TMW000000312"
      }
    }
  ]
}                        

To successfully transfer money from a funded wallet to an account, you need to call v1/disburse and supply all the necessary parameters

HTTP Request

POST https://moneywave.herokuapp.com/v1/disburse/queue

Resources

Get list of banks

response = unirest.post("https://moneywave.herokuapp.com/banks", 
headers={ "content-type": "application/json" });
$headers = array('content-type' => 'application/json');

$response = Unirest\Request::post('https://moneywave.herokuapp.com/banks', $headers);
 var unirest = require('unirest');
 unirest.post('https://moneywave.herokuapp.com/banks')
 .headers({'content-type': 'application/json'})
 .end(function (response) {
   console.log(response);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/banks")
     .header("content-type", "application/json")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '' "https://moneywave.herokuapp.com/banks"

The above command returns JSON structured like this:


{ "status": "success",
  "message": "banks Fetched",
  "data": 
   { "214": "FIRST CITY MONUMENT BANK PLC",
     "215": "UNITY BANK PLC",
     "221": "STANBIC IBTC BANK PLC",
     "232": "STERLING BANK PLC",
     "304": "Stanbic Mobile",
     "305": "PAYCOM",
     "307": "Ecobank Mobile",
     "309": "FBN MOBILE",
     "311": "Parkway",
     "315": "GTBank Mobile Money",
     "322": "ZENITH Mobile",
     "323": "ACCESS MOBILE",
     "401": "Aso Savings and Loans",
     "044": "ACCESS BANK NIGERIA",
     "014": "AFRIBANK NIGERIA PLC",
     "063": "DIAMOND BANK PLC",
     "050": "ECOBANK NIGERIA PLC",
     "084": "ENTERPRISE BANK LIMITED",
     "070": "FIDELITY BANK PLC",
     "011": "FIRST BANK PLC",
     "058": "GTBANK PLC",
     "030": "HERITAGE BANK",
     "082": "KEYSTONE BANK PLC",
     "076": "SKYE BANK PLC",
     "068": "STANDARD CHARTERED BANK NIGERIA LIMITED",
     "032": "UNION BANK OF NIGERIA PLC",
     "033": "UNITED BANK FOR AFRICA PLC",
     "035": "WEMA BANK PLC",
     "057": "ZENITH BANK PLC" 
     }
 }

When using the moneywave API, you’ll be required to enter a 3 - character bank code used to identify a bank. You can get this list of banks by calling the /banks endpoint. We’ll really recommend that you send a post request to this end point and save the response in a variable before you call any other endpoint when using Moneywave.

Key Note

For Kenya banks, you need to pass a country query parameter set to KE
That is: http://moneywave.herokuapp.com/banks?country=KE

HTTP Request

POST https://moneywave.herokuapp.com/banks

URL Parameters

NO parameter is required

Account Number Validation

params = {account_number: "0690000005", bank_code: "044"};
response = unirest.post("https://moneywave.herokuapp.com/v1/resolve/account", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"}, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array('account_number'=> "0690000005",'bank_code' => "044"})

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/resolve/account', $headers, $query);
 var unirest = require('unirest');
 var  params = {account_number:"0690000005",bank_code: "044"};
 unirest.post('https://moneywave.herokuapp.com/v1/resolve/account')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/resolve/account")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("account_number", "0690000005")
     .field("bank_code", "044")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
       "account_number": "0690000005", 
       "bank_code": "044"
   }' "https://moneywave.herokuapp.com/v1/resolve/account"

The above command returns JSON structured like this:

{
    "status": "success",
    "data": {
          "account_name":"SHAWN MICHAELS"
    }
}

Before doing a transfer or disbursement to a bank account, it’s good practice to validate the details of the destination bank account. Our API allows you to do just that by verifying the account number and returning the account name. To do that, you need to send a POST request to /v1/resolve/account, with the account number and bank code in the body of the request.

HTTP Request

POST https://moneywave.herokuapp.com/v1/resolve/account

URL Parameters

Parameter Field Type Required Description
account_number String true the account number of the sender
bank_code String true the bank code of the account to resolve

Card Tokenization

params = {
 "card_no":"5289389888909918",
 "cvv":"655",
 "expiry_year":"2018",
 "expiry_month":"09"
 } 
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/tokenize/card", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
     "card_no"=>"5289389888909918",
    "cvv"=>"655",
    "expiry_year"=>"2018",
    "expiry_month"=>"09"
    ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer/charge/tokenize/card', $headers, $query);
 var unirest = require('unirest');
 var  params = {
     "card_no":"5289389888909918",
     "cvv":"655",
     "expiry_year":"2018",
     "expiry_month":"09"
 };
 unirest.post('https://moneywave.herokuapp.com/v1/transfer/charge/tokenize/card')
 .headers({'content-type': 'application/json', 'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/tokenize/card")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("card_no", "5289389888909918")
     .field("cvv", "655")
     .field("expiry_year", "2018")
     .field("expiry_month", "09")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
       "card_no":"5289389888909918",
       "cvv":"655",
       "expiry_year":"2018",
       "expiry_month":"09"
   }' "https://moneywave.herokuapp.com/v1/transfer/charge/tokenize/card"

The above command returns JSON structured like this:

{
  "status": "success",
  "data": {
          "cardToken": "be711fe2be4edb35cc554fc6428b1f64"
   }
}

You can tokenize a card and use the token for initiate a card to account transfer request.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer/charge/tokenize/card

URL Parameters

Parameter Field Type Required Description
card_no String true card number of debit card
expiry_year String true expiry year of debit card
expiry_month String true expiry month of debit card
cvv String true cvv of debit card

Card Enquiry

params = {
 "cardNumber":"5289389888909918"
 } 
response = unirest.post("https://moneywave.herokuapp.com/v1/user/card/check", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);

print response.body;
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
     "cardNumber"=>"5289389888909918"
    ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/user/card/check', $headers, $query);

echo $response.body;
 var unirest = require('unirest');
 var  params = {
     "cardNumber":"5289389888909918"
 };
 unirest.post('https://moneywave.herokuapp.com/v1/user/card/check')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/user/card/check")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("cardNumber", "5289389888909918")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
       "cardNumber":"5289389888909918"
   }' "https://moneywave.herokuapp.com/v1/user/card/check"

The above command returns JSON structured like this:

{
  "status": "success",
  "data": {
    "cardClass": "DEBIT",
    "countryOfIssue": "NIGERIA",
    "countryOfIssueISO": "NG",
    "issuer": "ACCESS BANK PLC",
    "cardType": "CLASSIC",
    "foreign": false,
    "cardBrand": "VISA"
  }
}


You can use this endpoint to get the details of any card.

HTTP Request

POST https://moneywave.herokuapp.com/v1/user/card/check

URL Parameters

Parameter Field Type Required Description
cardNumber String true card number of debit card you want to check

Reporting API

import requests

url = "https://moneywave.herokuapp.com/v1/report/transactions"

querystring = {"status":"failed","date":"2017-03-14","type":"credit","currency":"NGN","amount":"100"}

payload = "{\n\t\n}"
headers = {
    'content-type': "application/json",
    'authorization': "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA",
    }

response = requests.request("GET", url, data=payload, headers=headers, params=querystring)

print(response.text)
<?php

$request = new HttpRequest();
$request->setUrl('https://moneywave.herokuapp.com/v1/report/transactions');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'status' => 'failed',
  'date' => '2017-03-14',
  'type' => 'credit',
  'currency' => 'NGN',
  'amount' => '100'
));

$request->setHeaders(array(
  'authorization' => 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA',
  'content-type' => 'application/json'
));

$request->setBody('{

}');

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}
 var unirest = require("unirest");

 var req = unirest("GET", "https://moneywave.herokuapp.com/v1/report/transactions");

 req.query({
   "status": "failed",
   "date": "2017-03-14",
   "type": "credit",
   "currency": "NGN",
   "amount": "100"
 });

 req.headers({
   "authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA",
   "content-type": "application/json"
 });

 req.type("json");
 req.send({});

 req.end(function (res) {
   if (res.error) throw new Error(res.error);

   console.log(res.body);
 });


   HttpResponse<String> response = Unirest.get("https://moneywave.herokuapp.com/v1/report/transactions?status=failed&date=2017-03-14&type=credit&currency=NGN&amount=100")
     .header("content-type", "application/json")
     .header("authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .body("{\n\t\n}")
     .asString();
   curl -X GET -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" "https://moneywave.herokuapp.com/v1/report/transactions?status=failed&date=2017-03-14&type=credit&currency=NGN&amount=100"

The above command returns JSON structured like this:

{
    "status": "success",
    "data": [
        {
            "id": 320,
            "amount": 100,
            "fee": 25,
            "status": "failed",
            "system_type": "wallet-disburse",
            "source": "wallet",
            "source_id": 25,
            "dest": "beneficiary",
            "dest_id": 2,
            "ref": "a5",
            "flutterResponseMessage": "Sorry, you don't have a valid linked account. Please contact the administrator",
            "flutterResponseCode": "R3",
            "flutterReference": "TTMW000000320",
.
.
.
.
     }
}

This API endpoint is used to retrieve all fundings/disburse transactions on a wallet.

HTTP Request

POST https://moneywave.herokuapp.com/v1/report/transactions

URL Parameters

Query Strings Field Type Required Description
status String true the status could either be set to “completed”,“pending” or “failed”
amount Number true the transaction amount
flwref String true the Flutterwave reference of the transaction, you can be found in the response body of the initial transactioons
ref String true the transaction reference of that particular transaction.
date Date true the transaction date - you can either pass a date range or a specific date, format accepted is (yyyy-mm-dd – yyyy-mm-dd) for date range or yyyy-mm-dd for a specific date.
currency String true the currency the transaction was carried in (NGN,KES,GH,USD)
type String true type could either be set to “credit”(for wallet funding transactions) or “debit” (for wallet disburse transactions)

Transactions

Get Total Charge to Card

params = {"amount": 5000, "fee": 45};
response = unirest.post("https://moneywave.herokuapp.com/v1/get-charge", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"}, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array('amount'=> 5000,'fee' => 45})

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/get-charge', $headers, $query);
 var unirest = require('unirest');
 var  params = {"amount":5000,"fee": 45};
 unirest.post('https://moneywave.herokuapp.com/v1/get-charge')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });

   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/get-charge")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("amount", 5000)
     .field("fee", 45)
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
      "amount":5000,
      "fee":45
   }' "https://moneywave.herokuapp.com/v1/get-charge"

The above command returns JSON structured like this:

{  
   "status":"success",
   "data":{  
      "amountToSend":"5000",
      "amountChargeable":5090,
      "merchantCommission":45
   }
}

Every transfer from a card attracts certain fees for the service. As a merchant, you can also choose to add your own fee you want to charge your customer for the service. To get the total amount we’ll charge (all fees+transfer amount), you need to call the /v1/get-charge endpoint.

HTTP Request

POST https://moneywave.herokuapp.com/v1/get-charge

URL Parameters

Parameter Field Type Required Description
amount Number true the amount you want us to send to the recipient
fee Number true the fee you want to add ad your commission as a merchant

Failed Transaction Retrial

params = {
  "id":"tk94903fgt",
  "recipient_account_number":"0690000005",
  "recipient_bank":"044"
  } 
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer/disburse/retry", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array( 
   "id"=>"tk94903fgt",
   "recipient_account_number"=>"0690000005",
   "recipient_bank"=>"044"
 ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer/disburse/retry', $headers, $query);
 var unirest = require('unirest');
 var  params = {
        "id":"tk94903fgt",
        "recipient_account_number":"0690000005",
        "recipient_bank":"044"
 }; 
 unirest.post('https://moneywave.herokuapp.com/v1/transfer/disburse/retry')
 .headers({ 'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer/disburse/retry")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("id", "tk94903fgt")
     .field("recipient_account_number", "0690000005")
     .field("recipient_bank", "044")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
       "id":"tk94903fgt",
       "recipient_account_number":"0690000005",
       "recipient_bank":"044"
   }' "https://moneywave.herokuapp.com/v1/transfer/disburse/retry"

The above command returns JSON structured like this:

{
    "status": "success",
    "message": "Disburse Successful",
    "data": {}
}

It might happen that a transaction fails in a unique way where the card is charged but the disbursement leg to the account fails.To retry these types of transactions, you need to send a POST request to /v1/transfer/disburse/retry, with the id of the successful charge, recipient_account_number and recipient_bank (bankcode) in the body of the request.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer/disburse/retry

URL Parameters

Parameter Field Type Required Description
id String true id of a successfully charged transfer.
recipient_account_number String optional disburse destination account number
recipient_bank String optional disburse destination bank

Previous Transactions API(Card to Account)

response = unirest.post("https://moneywave.herokuapp.com/v1/transfer/tksjo900", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"});
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer/tksjo900', $headers);
 var unirest = require('unirest');
 unirest.post('https://moneywave.herokuapp.com/v1/transfer/tksjo900')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .end(function (response){
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer/tksjo900")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" ,"https://moneywave.herokuapp.com/v1/transfer/tksjo900"

The above command returns JSON structured like this:

{
    "status": "success",
    "data": { } //this is the transfer object
}

It’s inevitable that you’d eventually need to see your records of previous transactions whether successful or not. To gain access to this information, you need to send a POST request to /v1/transfer/:id, where the id placeholder is the ID of the transaction you’re trying to query.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer/:id

URL Parameters

Parameter Field Type Required Description
id String true id of the transaction you want to query

Transaction Status Check API(Card to Account)

params = {ref:"R/FLW12234025"}
response = unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/status", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json');
$query = array('ref' => "R/FLW12234025") 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/transfer/charge/status, $headers, $query);
 var unirest = require('unirest');
 var  params = {ref:"R/FLW12234025"};
 unirest.post('https://moneywave.herokuapp.com/v1/transfer/charge/status')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/transfer/charge/status")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("ref", "R/FLW12234025")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
       "ref":"R/FLW12234025"
   }' "https://moneywave.herokuapp.com/v1/transfer/charge/status"

The above command returns JSON structured like this:

{
  "status": "success",
  "data": {
    "ref": "R/FLW12234025",
    "status": "failed",
    "amount": 240,
    "date": "2017-06-08T17:43:02.000Z"
  }
}            

It’s inevitable that you’d eventually need to see your records of previous transactions whether successful or not. To gain access to this information, you need to send a POST request to /v1/transfer/charge/status.

HTTP Request

POST https://moneywave.herokuapp.com/v1/transfer/charge/status

URL Parameters

Parameter Field Type Required Description
ref String true the transaction reference you want to query

Previous Transactions API (Wallet to Account)

params = {ref:"tko9fjkjsjks"}
response = unirest.post("https://moneywave.herokuapp.com/v1/disburse/status", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json');
$query = array('ref' => "tko9fjkjsjks") // contains all  the required parameters

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/disburse/status', $headers, $query);
 var unirest = require('unirest');
 var  params = {ref:"tko9fjkjsjks"};
 unirest.post('https://moneywave.herokuapp.com/v1/disburse/status')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/disburse/status")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("ref", "tko9fjkjsjks")
     .asJson();
   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '{
       "ref":"tko9fjkjsjks"
   }' "https://moneywave.herokuapp.com/v1/disburse/status"

The above command returns JSON structured like this:

{
    "status": "success",
    "data": { } //this is the transfer object
}

It’s inevitable that you’d eventually need to see your records of previous transactions whether successful or not. To gain access to this information, you need to send a POST request to /v1/transfer/:id, where the id placeholder is the ID of the transaction you’re trying to query.

HTTP Request

POST https://moneywave.herokuapp.com/v1/disburse/status

URL Parameters

Parameter Field Type Required Description
ref String true reference number of the transaction you want to query

Wallet

Get Wallet Balance

response = unirest.post("https://moneywave.herokuapp.com/v1/wallet", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"});
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');

$response = Unirest\Request::get('https://moneywave.herokuapp.com/v1/wallet', $headers);
 var unirest = require('unirest');
 unirest.get('https://moneywave.herokuapp.com/v1/wallet')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .end(function (response) {
   console.log(response.body);
 });

   HttpResponse<JsonNode> jsonResponse = Unirest.get("https://moneywave.herokuapp.com/v1/wallet")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .asJson();
   curl -X GET -H "Content-Type: application/json" -H "Cache-Control: no-cache"  -H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA"  -d '' "https://moneywave.herokuapp.com/v1/wallet"

The above command returns JSON structured like this:

{
  "status": "success",
  "data": { 
      "id": 106,
      "name": "savana",
      "balance": 315,
      "enabled": true,
      "currency": "NGN",
      "createdAt": "2017-01-20T14:12:47.000Z",
      "updatedAt": "2017-03-14T18:32:47.000Z",
      "uref": "0"
     }
 } 

It’s inevitable that you’d want to know your wallet balance. To gain access to this information, you need to send a GET request to /v1/wallet.

HTTP Request

GET https://moneywave.herokuapp.com/v1/wallet

Create Sub-Wallet

params = {
      "name": "customer wallet 1",
      "lock_code": "password",
      "user_ref": "1",
      "currency": "NGN"
    }; 
response = unirest.post("https://moneywave.herokuapp.com/v1/wallet", 
headers={ "content-type": "application/json","Authorization":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA" }, 
params= params);
$headers = array('content-type' => 'application/json','Authorization'=>'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA');
$query = array(
      "name"=>"customer wallet 1",
      "lock_code"=> "password",
      "user_ref"=> "1",
      "currency"=> "NGN"
   ) 

$response = Unirest\Request::post('https://moneywave.herokuapp.com/v1/wallet', $headers, $query);
 var unirest = require('unirest');
 var  params = {
        "name": "customer wallet 1",
        "lock_code": "password",
        "user_ref": "1",
        "currency": "NGN"
 }; 
 unirest.post('https://moneywave.herokuapp.com/v1/wallet')
 .headers({'Content-Type': 'application/json','Authorization':'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA'})
 .send(params)
 .end(function (response) {
   console.log(response.body);
 });
   HttpResponse<JsonNode> jsonResponse = Unirest.post("https://moneywave.herokuapp.com/v1/wallet")
     .header("content-type", "application/json")
     .header("Authorization", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA")
     .field("name", "customer wallet 1")
     .field("lock_code", "password")
     .field("user_ref",1)
     .field("currency","NGN")
     .asJson();

   curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{

         "name": "customer wallet 1",
         "lock_code": "password",
         "user_ref": "1",
         "currency": "NGN"

   }' "https://moneywave.herokuapp.com/v1/wallet"

The above command returns JSON structured like this for a successful transaction after valiation:

{
    "status": "success",
    "data": {
        "balance_1": 0,
        "enabled": true,
        "id": 340,
        "name": "customer wallet 1",
        "uref": "1",
        "merchantId": 140,
        "currencyId": 1,
        "balance": 0,
        "updatedAt": "2017-04-25T10:45:30.000Z",
        "createdAt": "2017-04-25T10:45:30.000Z"
    }
}

Response for a failed transaction

{
  "status": "error",
  "code":"", //error  code 
  "message": ""
}

     OR

  HTTPS/1.1 401 Unauthorized
{
  "status": "error"
}

This endpoint allows you to create a sub-wallet.

HTTP Request

POST https://moneywave.herokuapp.com/v1/wallet

URL Parameters

Parameter Field Type Required Description
name String true the name of the wallet to created
lock_code String true the password of the parent wallet
user_ref String true a unique reference for wallet identification
currency String true the wallet currency

Response Codes

Charge Response Codes

The Moneywave API uses the following response codes for Charge Response:

Response Code Meaning
0 Successful
00 Successful
0-M Verification attempted
0-Y Verification Successful
RR-V Transaction already validated.
02 Needs card Validation
RR Transaction Failed. Detailed Message is included in response message
2 Declined
7 Card Declined due to invalid card data
RR-T2 Card not enrolled for safetoken, user should contact their bank
XS0 Authorization Failed due to connectivity issues with the bank
B01 Invalid BVN
RR-51 Insufficient Funds
RR-R3 CardToken is mandatory!
RR-14 Invalid Card Number
RR-55 Incorrect PIN
R0 Transaction Failed due to connectivity issues with the bank
RR-E42 Card Declined due to invalid card expiry
RR-56 No Card Record
RR-2 Card Declined
RR-X04 Transaction Amount too low
RR-15 Transaction error
RR-7 Card Declined due to invalid card security code
RR-57 Transaction not Permitted to Cardholder
RR-04 Pick-up card
RR-Z8 Payment Gateway currently does not accept your card type
RR-91 Bank or switch network error
EEE An unexpected error occurred!
RR-E18 The service provider is unreachable at the moment, please try again later.
RR-E19 An invalid response was received from remote host, see provider response code/message for details.
RR-E19 An invalid response was received from remote host, please contact system administrator.
RR-E32 JSON is badly formatted or it contains invalid character.
RR-E42 Expiry Date cannot be empty
RR-E57 The PIN contains an invalid character
RR-EE4 Card Details could not be Retrieved!
RR-R401 Card has been blocked due to too many failed retries.
N-E Card not enrolled for 3DSecure
BR0 Timeout on BVN check
RN0 Invalid Account

Disburse Response Code

The Moneywave API uses the following response code for wallet disburse.

Response Code Meaning
00 Successful

Errors

The Moneywave API uses the following error codes:

Error Code Meaning
400 Bad Request – Your request sucks
401 Unauthorized – Your API key is wrong
403 Forbidden – The endpoint requested is hidden for administrators only
404 Not Found – The specified endpoint could not be found
405 Method Not Allowed – You tried to access an endpoint with an invalid method
406 Not Acceptable – You requested a format that isn’t json
410 Gone – The endpoint requested has been removed from our servers
429 Too Many Requests!
500 Internal Server Error – We had a problem with our server. Try again later.
503 Service Unavailable – We’re temporarily offline for maintenance. Please try again later.