Skip to content

Instantly share code, notes, and snippets.

@Auwalms
Created February 18, 2025 15:57
Show Gist options
  • Save Auwalms/892cd8b7c4342b89a103ef50810c9057 to your computer and use it in GitHub Desktop.
Save Auwalms/892cd8b7c4342b89a103ef50810c9057 to your computer and use it in GitHub Desktop.
Testing Monnify New Doc
openapi: 3.0.0
info:
title: 'Monnify API '
description: "# Overview\nMonnify API Collection is a collection of all endpoints that merchants and developers can take advantage of to build financial solutions in Nigeria. \n\n# ENVIRONMENTS & CREDENTIALS\nTEST - https://sandbox.monnify.com\n\n\nLIVE - https://api.monnify.com\n\n\n\n\n\n# PUBLIC CREDENTIALS:\n\n\n\nAPIKEY: MK_TEST_GC3B8XG2XX\n\nSecret Key:\tA663NRZA544DDPEM7KDN7Z8HRV6YXD8S\n\nContract Code:\t5867418298"
version: 1.0.0
servers:
- url: undefined://{{monnify_base_url}}
- url: https://sandbox.monnify.com
tags:
- name: Authentication
- name: Transactions
- name: Transfers (Disbursement)
- name: Customer Reserved Account
- name: Invoice
- name: Recurring Payment
- name: Sub Accounts
- name: Limit Profile
- name: Refund
- name: Settlements
- name: Verification APIs
- name: Others
- name: Wallet
description: >-
This collection enables merchants create and manage subwallets for their
customers
paths:
/api/v1/auth/login:
post:
tags:
- Authentication
summary: Generate Access Token
requestBody:
content: {}
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/merchant/transactions/init-transaction:
post:
tags:
- Transactions
summary: Initialize Transaction
description: >-
This endpoint initialises the transaction that would be used for card
payments
and dynamic transfers.
#### **Request Payload**
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| amount | Float | This field is required | The amount(in Naira) to be
paid, minimum is N20 |
| customerName | String | This field is optional | The name of the
customer |
| customerEmail | String | This field is optional | The customer email |
| paymentReference | String | This field is required | A unique string
of characters that identifies each transaction |
| paymentDescription | String | This field is optional | A description
of the payment |
| currencyCode | String | Field is optional, defaults to NGN | The
currency code |
| contractCode | String | This field is required | The merchant contract
code |
| redirectUrl | String | This field is optional | A url to redirect to
after payment completion |
| paymentMethods | Array | This field is optional, defaults to all
available methods | The method of payment collection |
| incomeSplitConfig | Object | This field is optional | A way to split
payments among subAccounts. |
| metadata | Object | This field is optional | This field can be used to
pass extra information from customers |
requestBody:
content:
application/json:
schema:
type: object
example:
amount: 20
customerEmail: [email protected]
paymentReference: 123-03hjsj--1klsa--dkad
paymentDescription: Trial transaction
currencyCode: NGN
contractCode: '100693167467'
redirectUrl: https://my-merchants-page.com/transaction/confirm
paymentMethods:
- CARD
- ACCOUNT_TRANSFER
metadata:
name: John Doe
age: 45
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/merchant/bank-transfer/init-payment:
post:
tags:
- Transactions
summary: Pay With Bank Transfer
description: >-
This endpoint generates a dynamic account number and its associated bank
for one time payment.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| transactionReference | String | This field is required | A unique
Monnify reference returned as part of the response from the initialise
transaction endpoint |
| bankCode | String | This field is optional | A valid bank code to
enable the creation of USSD string associated with such bank |
requestBody:
content:
application/json:
schema:
type: object
example:
transactionReference: MNFY|24|20220721134824|000089
bankCode: '058'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/merchant/cards/charge:
post:
tags:
- Transactions
summary: Authorize OTP
description: >-
The endpoint authorizes an OTP to complete a charge on a card.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| transactionReference | String | This field is required | The
transaction reference gotten from the initialise transaction endpoint. |
| collectionChannel | String | This field is optional and defaults to
"API_NOTIFICATION" | This is the channel of collection and should always
be "API_NOTIFICATION" in this endpoint. |
| tokenId | String | This field is required. | This is an id of the
token issued and is always part of the response from the charge card
endpoint. |
| token | String | This field is required | This is the token(OTP) sent
to the user device by his bank |
requestBody:
content:
application/json:
schema:
type: object
example:
transactionReference: MNFY|67|20220725114827|000285
collectionChannel: API_NOTIFICATION
tokenId: 100.00-b66bef0aa8e660863c4e1177a08fefba
token: '123456'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/sdk/cards/secure-3d/authorize:
post:
tags:
- Transactions
summary: Authorize 3DS Card
description: >-
This endpoint authorizes charge on a card that uses 3DS Secure
Authentication.
#### Request Payloads
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| transactionReference | String | This field is required | The
transaction reference gotten from the initialise transaction endpoint. |
| apiKey | String | This field is required | The merchant API key |
| collectionChannel | String | This field is optional and defaults to
"API_NOTIFICATION" | This is the channel of collection and should always
be "API_NOTIFICATION" in this endpoint. |
| card | Object | This field is required | An object containing the card
information. |
| number | String | This field is required | The card pan or number on
the card. |
| expiryMonth | String | This field is required | The card expiry month.
|
| expiryYear | String | This field is required | The card year of
expiration. |
| pin | String | This field is required | The pin associated with the
card. |
| cvv | String | This field is required | The card cvv number. |
requestBody:
content:
application/json:
schema:
type: object
example:
transactionReference: MNFY|99|20220725125351|000271
apiKey: MK_TEST_JRQAZRFD2W
collectionChannel: API_NOTIFICATION
card:
number: '4000000000000002'
expiryMonth: '12'
expiryYear: '2022'
pin: '1234'
cvv: '123'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/transactions/search:
get:
tags:
- Transactions
summary: Get All Transactions
description: >-
This endpoint returns a list of transactions carried out on your
integration.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| page | Integer | The number of page of to be retrieved. It starts from
0. |
| size | Integer | The Size of transactions to be returned per page. |
| paymentReference | String | Unique reference generated by merchant for
each transaction. |
| transactionReference | String | Unique transaction reference generated
by Monnify for each transaction |
| fromAmount | Float | A number indicating minimum amount for the
transactions to be returned |
| toAmount | Float | A number indicating maximum amount for the
transactions to be returned |
| amount | Float | A number indicating exact amount for the transactions
to be returned |
| customerName | String | Name of customer for the transactions to be
returned |
| customerEmail | String | Email of customer for the transactions be
returned. |
| paymentStatus | String | Transaction status for transactions to be
returned |
| from | Timestamp | Time for transactions to be retrieved. |
| to | Timestamp | The maximum time for transactions to be retrieved. |
parameters:
- name: page
in: query
schema:
type: string
description: The number of page of to be retrieved. It starts from 0.
example: Integer
- name: size
in: query
schema:
type: string
description: The Size of transactions to be returned per page.
example: Integer
- name: paymentReference
in: query
schema:
type: string
description: Unique reference generated by merchant for each transaction.
example: String
- name: transactionReference
in: query
schema:
type: string
description: >-
Unique transaction reference generated by Monnify for each
transaction
example: String
- name: fromAmount
in: query
schema:
type: string
description: >-
A number indicating minimum amount for the transactions to be
returned
example: Float
- name: toAmount
in: query
schema:
type: string
description: >-
A number indicating maximum amount for the transactions to be
returned
example: Float
- name: amount
in: query
schema:
type: string
description: A number indicating exact amount for the transactions to be returned
example: Float
- name: customerName
in: query
schema:
type: string
description: Name of customer for the transactions to be returned
example: String
- name: customerEmail
in: query
schema:
type: string
description: Email of customer for the transactions be returned.
example: String
- name: paymentStatus
in: query
schema:
type: string
description: Transaction status for transactions to be returned
example: String
- name: from
in: query
schema:
type: string
description: Time for transactions to be retrieved.
example: Timestamp
- name: to
in: query
schema:
type: string
description: The maximum time for transactions to be retrieved.
example: Timestamp
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/transactions/MNFY%7C67%7C20220725111957%7C000283:
get:
tags:
- Transactions
summary: Get Transaction Status
description: |-
This endpoint returns the status of a transaction
#### Path Parameters
| **Field** | **Description** |
| --- | --- |
| transactionReference | Urlencoding of the said transaction reference |
parameters:
- name: transactionReference
in: query
schema:
type: string
description: Urlencoding of the said transaction reference
example: String
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/single:
post:
tags:
- Transfers (Disbursement)
summary: Initiate Transfer (Single)
description: >-
This endpoint helps to initiate transfer to desired bank account.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| amount | Float | This field is required | Amount to disburse |
| reference | String | This field is required | The unique reference for
a transaction |
| narration | String | This field is required | The Narration for the
transactions being processed |
| destinationBankCode | String | This field is required | The 3 digit
bank code representing the destination bank |
| destinationAccountNumber | String | This field is required | The
beneficiary account number |
| currency | String | This field is required | The currency of the
transaction being initialised - "NGN" |
| sourceAccountNumber | String | This field is required | Unique
identifier of your wallet |
requestBody:
content:
application/json:
schema:
type: object
example:
amount: 200
reference: reference---1290034
narration: 911 Transaction
destinationBankCode: '057'
destinationAccountNumber: '2085886873'
currency: NGN
sourceAccountNumber: '3934178936'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/batch:
post:
tags:
- Transfers (Disbursement)
summary: Initiate Transfer (Bulk)
description: >-
This endpoint helps in Initiating Bulk Transfer transactions on your
integration.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| title | String | This field is required | The title of the batch
disbursement |
| batchReference | String | This field is required | A unique reference
identifying the batch disbursement |
| narration | String | This field is required | A narration for the
disbursement |
| sourceAccountNumber | String | This field is required | The merchant
WALLET ACCOUNT NUMBER. |
| onValidationFailure | Enum | This field is required | What should
happen if any of the batch fails. Either BREAK or CONTINUE. |
| notificationInterval | Integer | This field is required | Used to
determine how often Monnify should notify the merchant of progress when
processing a batch transfer |
| transactionList | Array | This field is required | A list of
transactions to be processed |
requestBody:
content:
application/json:
schema:
type: object
example:
title: Game of Batches
batchReference: batchreference--12934
narration: 911 Transaction
sourceAccountNumber: '9624937372'
onValidationFailure: CONTINUE
notificationInterval: 10
transactionList:
- amount: 1300
reference: Final-Refere-nce-1a
narration: 911 Transaction
destinationBankCode: '058'
destinationAccountNumber: '0111946768'
currency: NGN
- amount: 570
reference: Final-Ref-erence-2a
narration: 911 Transaction
destinationBankCode: '058'
destinationAccountNumber: '0111946768'
currency: NGN
- amount: 230
reference: Final-Refer-ence-3a
narration: 911 Transaction
destinationBankCode: '058'
destinationAccountNumber: '0111946768'
currency: NGN
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/single/validate-otp:
post:
tags:
- Transfers (Disbursement)
summary: Authorize Single Transfers
description: >-
This endpoint authorizes single transfers on your integration.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| reference | String | This field is required | The unique reference for
the transfer |
| authorizationCode | String | This field is required | The OTP sent to
merchant's email |
requestBody:
content:
application/json:
schema:
type: object
example:
reference: refere--n00ce---1290034
authorizationCode: '491763'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/batch/validate-otp:
post:
tags:
- Transfers (Disbursement)
summary: Authorize Bulk Transfers
description: >-
This endpoint authorizes bulk transfers on your integration.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| reference | String | This field is required | The batch reference used
in the transfer |
| authorizationCode | String | This field is required | The OTP sent to
the merchant's email |
requestBody:
content:
application/json:
schema:
type: object
example:
reference: batchre-ference--12934
authorizationCode: '122080'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/single/resend-otp:
post:
tags:
- Transfers (Disbursement)
summary: Resend OTP
description: >-
This endpoint generates a new OTP in the event that there were
challenges with the former OTP sent.
#### Request Payload
| **Field** | **Data Type** | **Required/Not required** |
**Description** |
| --- | --- | --- | --- |
| reference | String | This field is required | The reference for the
transfer |
requestBody:
content:
application/json:
schema:
type: object
example:
reference: refere--n00ce---1290--034
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/single/summary:
get:
tags:
- Transfers (Disbursement)
summary: Single Transfer Status
description: >-
This endpoint verifies the status of a single transfer on your
integration.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| reference | String | The transfer reference |
parameters:
- name: reference
in: query
schema:
type: string
description: The reference used for the transfer
example: String
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/single/transactions:
get:
tags:
- Transfers (Disbursement)
summary: List All Single Transfers
description: >-
This endpoint returns the list of all single transfers made on your
integration.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| pageSize | Integer | The number of transfer records to return |
| pageNo | Integer | A number specifying what page of transfers to be
retrieved |
parameters:
- name: pageSize
in: query
schema:
type: string
description: The number of transfer records to return
example: Integer
- name: pageNo
in: query
schema:
type: string
description: A number specifying what page of transfers to be retrieved
example: Integer
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/bulk/transactions:
get:
tags:
- Transfers (Disbursement)
summary: List All Bulk Transfers
description: >-
This endpoint returns the list of all bulk transfers made on your
integration.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| pageSize | Integer | The number of transfer records to return |
| pageNo | Integer | A number specifying what page of transfers to be
retrieved |
parameters:
- name: pageSize
in: query
schema:
type: string
description: The number of transfer records to return
example: Integer
- name: pageNo
in: query
schema:
type: string
description: A number specifying what page of transfers to be retrieved
example: Integer
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/bulk/batchreference--12934/transactions:
get:
tags:
- Transfers (Disbursement)
summary: Bulk Transfer Status
description: >-
This endpoint verifies the status of a bulk transfer on your
integration.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| pageSize | Integer | Number of transfers to be returned per page |
| pageNo | Integer | Current page number |
parameters:
- name: batchReference
in: query
schema:
type: string
description: A unique reference identifying the batch disbursement
example: String
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/disbursements/search-transactions:
get:
tags:
- Transfers (Disbursement)
summary: Search Disbursement Transactions
description: >-
This endpoint returns the list of all disbursement transactions.
#### Query Parameters
| **Field** | **Data Type** | |
| --- | --- | --- |
| sourceAccountNumber | String | The merchant's WALLET ACCOUNT NUMBER,
this parameter is mandatory |
| pageSize | Integer | The number of records to return |
| pageNo | Integer | The current page from the total |
parameters:
- name: sourceAccountNumber
in: query
schema:
type: string
description: The merchant's WALLET ACCOUNT NUMBER, this parameter is mandatory
example: String
- name: pageSize
in: query
schema:
type: string
description: The number of records to return
example: Integer
- name: pageNo
in: query
schema:
type: string
description: The current page from the total
example: Integer
- name: startDate
in: query
schema:
type: string
description: >-
A timestamp value specifying the date to start filtering
disbursement transactions by the createdAt field
example: String
- name: endDate
in: query
schema:
type: string
description: >-
A timestamp value specifying the date to stop filtering disbursement
transactions by the createdAt field
example: String
- name: amountFrom
in: query
schema:
type: string
description: >-
A number specifying the lower bound for filtering the transactions
by the amount field
example: String
- name: amountTo
in: query
schema:
type: string
description: >-
A number specifying the upper bound for filtering the transactions
by the amount field.
example: String
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/bank-transfer/reserved-accounts:
post:
tags:
- Customer Reserved Account
summary: Create Reserved Account(General)
description: >-
This endpoint allows the creation of dedicated virtual accounts for your
customers.
#### Request Payload
| **Field** | **Data type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| accountReference | String | This field is required | A unique
reference generated by merchants. |
| accountName | String | This field is required | The name to be
displayed during name enquiry |
| currencyCode | String | This field is not required, defaults to NGN |
The currency payments will be received with |
| contractCode | String | This field is required | The merchant contract
code |
| customerEmail | String | This field is not required | The customer's
email |
| bvn | String | This field is not required | The bvn attached to a
reserve account |
| getAllAvailableBanks | Boolean | This field is required, defaults |
This decides wether account numbers be generated to all allowable banks.
|
| preferredBanks | Array | This field is not required | This field helps
to choose certain banks for virtual account creation. This field is
needed if getAvailableBanks is false |
| incomeSplitConfig | Object | This field is not required | A
configuration on how payments are to be split among subaccounts |
| restrictPaymentSource | Boolean | This field is not required | Decides
if payment should be restricted to some reserved accounts |
| allowedPaymentSources | Object | This field is not required | This
captures bvns or account numbers or account names that are permitted to
fund a reserved account. This is mandatory if restrictPaymentSource is
set to true |
requestBody:
content:
application/json:
schema:
type: object
example:
accountReference: abc1niui--23
accountName: Test Reserved Account
currencyCode: NGN
contractCode: '7059707855'
customerEmail: [email protected]
customerName: John Doe
bvn: '21212121212'
getAllAvailableBanks: true
incomeSplitConfig:
- subAccountCode: MFY_SUB_762212281785
feePercentage: 10.5
splitPercentage: 20
feeBearer: true
restrictPaymentSource: true
allowedPaymentSources:
bankAccounts:
- accountNumber: '0068687503'
bankCode: '232'
accountNames:
- SAMUEL DAMILARE OGUNNAIKE
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/bank-transfer/reserved-accounts:
post:
tags:
- Customer Reserved Account
summary: Create Reserved Account(Invoice)
description: >-
This endpoint allows the creation of an invoiced reserved account.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| contractCode | String | This field is required | The merchant's
contract code. |
| accountName | String | This field is required | The name to be
displayed during name enquiry. |
| currencyCode | String | This field is required | The currency
allowed,"NGN. |
| accountReference | String | This field is required | A unique
reference generated by the merchant |
| customerName | String | This field is required | Full name of the
customer |
| customerEmail | String | This field is required | Email address of the
customer. |
| reservedAccountType | String | This field is required | This should be
"INVOICE". |
requestBody:
content:
application/json:
schema:
type: object
example:
contractCode: '7059707855'
accountName: Jane Doe
currencyCode: NGN
accountReference: janedoe12233
customerEmail: [email protected]
customerName: Jane Doe
reservedAccountType: INVOICE
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v2/bank-transfer/reserved-accounts/{accountReference}:
get:
tags:
- Customer Reserved Account
summary: Get Reserved Account Details
description: >-
This endpoint returns details of an account reserved for a customer
#### Path Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| accountReference | String | The unique reference used in creating the
reserved account. |
parameters:
- name: accountReerence
in: query
schema:
type: string
description: The unique reference used in creating the reserved account.
example: String
- name: accountReference
in: path
schema:
type: string
required: true
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/bank-transfer/reserved-accounts/add-linked-accounts/{accountReference}:
put:
tags:
- Customer Reserved Account
summary: Add Linked Accounts
description: >-
This endpoint links accounts with another partner bank to an existing
customer.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| getAllAvailableBanks | Boolean | This field is required | Determine if
all necessary banks should be used |
| preferredBanks | Array | This field is required if
getAllAvailableBanks is false | Contains bank codes of desired banks |
requestBody:
content:
application/json:
schema:
type: object
example:
getAllAvailableBanks: false
preferredBanks:
- '232'
parameters:
- name: accountReference
in: path
schema:
type: string
required: true
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/bank-transfer/reserved-accounts/update-customer-bvn/{reservedAccountReference}:
put:
tags:
- Customer Reserved Account
summary: Update BVN for a Reserve Account
description: >-
This endpoint updates BVN of customers reserved account
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| bvn | String | This field is required | The BVN used in creating the
reserved account |
requestBody:
content:
application/json:
schema:
type: object
example:
bvn: '21212121212'
parameters:
- name: reservedAccountReference
in: path
schema:
type: string
required: true
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/bank-transfer/reserved-accounts/update-payment-source-filter/{accountReference}:
put:
tags:
- Customer Reserved Account
summary: Allowed Payment Source(s)
description: >-
This endpoint manages accounts that can fund a reserved account using
either BVNs, Account Name or Account Number.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| restrictPaymentSource | Boolean | This field is required | This field
activate or de-activate restricting of payment sources for a reserved
account. |
| allowedPaymentSources | Object | This field is required | A collection
of possible payment sources. |
| bvns | Array | This field is optional | List of BVNs that should be
validated |
| bankAccounts | Array | This field is optional | List of account
numbers that can fund the reserved account. |
| accountNumber | String | This field is optional | An account number
from which reserved account can be funded. |
| bankCode | String | This field is optional | A 3 digit CBN code for
the account |
| accountNames | String | This field is optional | List of account names
for accounts from which reserved accounts can be funded. |
requestBody:
content:
application/json:
schema:
type: object
example:
restrictPaymentSource: true
allowedPaymentSources:
bvns:
- '21212121212'
- '20202020202'
parameters:
- name: accountReference
in: path
schema:
type: string
required: true
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/bank-transfer/reserved-accounts/update-income-split-config/{accountReference}:
put:
tags:
- Customer Reserved Account
summary: Updating Split Config for Reserved Account
description: >-
This endpoint updates the split config of a customer reserved account.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| subAccountCode | String | This field is required | The unique
reference for the sub account that should receive the split |
| feeBearer | Boolean | This field is optional, defaults to false | This
field determine if the sub account should bear transaction fees or not |
| feePercentage | Float | This field is optional, defaults to 0 | The
percentage of the transaction fee to be borne by the sub account |
| splitPercentage | Float | This field is optional, defaults to 0 | The
percentage of the amount paid to be split into the sub account. |
requestBody:
content:
application/json:
schema:
type: object
example:
- subAccountCode: MFY_SUB_762212281785
feePercentage: 10.5
- subAccountCode: MFY_SUB_322165393053
splitPercentage: 30
parameters:
- name: accountReference
in: path
schema:
type: string
required: true
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/bank-transfer/reserved-accounts/{accountReference}:
delete:
tags:
- Customer Reserved Account
summary: Deallocating a reserved account
description: >-
This endpoint allows you to deallocate/delete already created a reserved
account.
#### Path Parameters
| **Field** | **Data Type** | **Desciption** |
| --- | --- | --- |
| accountReference | String | The unique reference used to identify this
reserved account |
parameters:
- name: accountReference
in: query
schema:
type: string
description: The unique reference used to identify this reserved account
example: String
- name: accountReference
in: path
schema:
type: string
required: true
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/bank-transfer/reserved-accounts/transactions:
get:
tags:
- Customer Reserved Account
summary: Get Reserved Account Transactions
description: >-
This endpoint returns the list of all transactions done on a reserved
account.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| accountReference | String | The unique reference used in creating the
reserved account. |
| page | Integer | The page of data you want returned by Monnify (Starts
from 0). |
| size | Integer | The number of records you want returned in a page. |
parameters:
- name: accountReference
in: query
schema:
type: string
description: The unique reference used in creating the reserved account.
example: String
- name: page
in: query
schema:
type: string
description: The page of data you want returned by Monnify (Starts from 0).
example: Integer
- name: size
in: query
schema:
type: string
description: The number of records you want returned in a page.
example: Integer
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/invoice/create:
post:
tags:
- Invoice
summary: Attaching a Reserved Account to an Invoice
description: >-
This endpoint attaches a Reserved Account to an Invoice.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| amount | Float | This field is required | Amount to be paid |
| invoiceReference | String | This field is required | Merchant's Unique
reference for the invoice. |
| accountReference | String | This field is required | Your unique
reference used to identify this reserved account |
| description | String | This field is required | Description for the
transaction. |
| currencyCode | String | This field is required | The currency of the
transaction being initialized. "NGN" |
| contractCode | String | This field is required | Merchant's contract
code |
| customer Name | String | This field is required | Full name of the
customer |
| customerEmail | String | This field is required | Email address of the
customer |
| expiryDate | String | This field is required | Expiry date for the
invoice |
requestBody:
content:
application/json:
schema:
type: object
example:
amount: '999'
invoiceReference: '18389131823445'
accountReference: janedoe1223--3
description: test invoice
currencyCode: NGN
contractCode: '7059707855'
customerEmail: [email protected]
customerName: Jane Doe
expiryDate: '2022-10-30 12:00:00'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/invoice/{invoiceReference}/details:
get:
tags:
- Invoice
summary: View Invoice Details
description: >-
This endpoint returns details of an invoice on your integration.
#### Path Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| invoiceReference | String | The unique reference used in creating the
invoice. |
parameters:
- name: invoiceReference
in: query
schema:
type: string
description: The unique reference used in creating the invoice.
example: String
- name: invoiceReference
in: path
schema:
type: string
required: true
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/invoice/all:
get:
tags:
- Invoice
summary: Get All Invoices
description: >-
This endpoint returns the list of all the invoice available on your
integration.
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/invoice/{invoiceReference}/cancel:
delete:
tags:
- Invoice
summary: Cancel an Invoice
description: This endpoint cancels an Invoice on your integration.
parameters:
- name: invoiceReference
in: query
schema:
type: string
description: The unique reference used in creating the invoice.
example: String
- name: invoiceReference
in: path
schema:
type: string
required: true
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/merchant/cards/charge-card-token:
post:
tags:
- Recurring Payment
summary: Charge Card Token
description: >-
This endpoint allows you to charge an already tokenized card with it’s
card token.
**NOTE**: The customer email address used in the first successful charge
should be stored along with the card token.
#### **Request Payload**
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| amount | Float | This field is required | The amount(in Naira) to be
paid, minimum is N20 |
| cardToken | String | This field is required | The card token of the
tokenized card. |
| customerName | String | This field is optional | The name of the
customer |
| customerEmail | String | This field is required | The customer email
used in the first charge |
| paymentReference | String | This field is required | A unique string
of characters that identifies each transaction |
| paymentDescription | String | This field is optional | A description
of the payment |
| currencyCode | String | Field is optional, defaults to NGN | The
currency code |
| contractCode | String | This field is required | The merchant contract
code |
| apiKey | String | This field is required | The merchant's API key |
| incomeSplitConfig | Object | This field is optional | A way to split
payments among subAccounts. |
| metadata | Object | This field is optional | This field can be used to
pass extra information from customers |
requestBody:
content:
application/json:
schema:
type: object
example:
cardToken: MNFY_0CD0138B45F7C3EC6D3698969
amount: 20
customerName: Marvelous Benji
customerEmail: [email protected]
paymentReference: 1642776mml0068n2937
paymentDescription: Paying for Product A
currencyCode: NGN
contractCode: '109167467'
apiKey: MK_TEST_GC3B8XG2XX
metaData:
ipAddress: 127.0.0.1
deviceType: mobile
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/sub-accounts:
post:
tags:
- Sub Accounts
summary: Create Sub Account(s)
description: >-
This endpoint allows you to create a sub account to enable the spliting
of payments between different accounts.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| currencyCode | String | This field is required | Settlement currency.
"NGN" |
| accountNumber | String | This field is required | The account number
that should be created as a sub account. |
| bankCode | String | This field is required | The 3 digit bank code of
the bank where the account number is domiciled |
| email | String | This field is required | The email tied to the sub
account |
| defaultSplitPercentage | Float | This field is required | The default
percentage to be split into the sub account on any transaction. |
requestBody:
content:
application/json:
schema:
type: object
example:
- currencyCode: NGN
bankCode: '058'
accountNumber: '0211319282'
email: [email protected]
defaultSplitPercentage: 20.87
responses:
'200':
description: Successful response
content:
application/json: {}
get:
tags:
- Sub Accounts
summary: Get Sub Accounts
description: >-
This endpoint returns the list of sub accounts that have been created on
your integration.
responses:
'200':
description: Successful response
content:
application/json: {}
put:
tags:
- Sub Accounts
summary: Update Sub Account
description: >-
This endpoint updates the details of an existing sub account.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| subAccountCode | String | This field is required | The sub account
code of the account to be updated. |
| currencyCode | String | This field is required | Settlement currency.
"NGN" |
| accountNumber | String | This field is required | The account number
that should be created as a sub account. |
| bankCode | String | This field is required | The 3 digit bank code of
the bank where the account number is domiciled |
| email | String | This field is required | The email tied to the sub
account |
| defaultSplitPercentage | Float | This field is required | The default
percentage to be split into the sub account on any transaction. |
requestBody:
content:
application/json:
schema:
type: object
example:
subAccountCode: MFY_SUB_811397375865
currencyCode: NGN
bankCode: '058'
accountNumber: '0211319282'
email: [email protected]
defaultSplitPercentage: '25'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/sub-accounts/{subAccountCode}:
delete:
tags:
- Sub Accounts
summary: Delete Sub Account
description: >-
This endpoint deletes a sub account on your integration.
#### Path Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| subAccountCode | String | The subAccountCode of the sub account you
want to delete. |
parameters:
- name: subAccountCode
in: query
schema:
type: string
description: The subAccountCode of the sub account you want to delete.
example: String
- name: subAccountCode
in: path
schema:
type: string
required: true
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/limit-profile/:
post:
tags:
- Limit Profile
summary: Create Limit Profile(s)
description: >-
This endpoint creates limit profiles on a customer's account.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| limitProfileName | String | This field is required | The name of the
Limit Profile |
| singleTransactionValue | Float | This field is required | The maximum
amount that can be allowed per transaction on the reserved accounts. |
| dailyTransactionValue | Float | This field is required | The maximum
amount per day in all transactions that can be allowed on the reserved
accounts |
| dailyTransactionVolume | Float | This field is required | The maximum
number of transaction count per day allowed on the reserved accounts |
requestBody:
content:
application/json:
schema:
type: object
example:
limitProfileName: Profile0001
singleTransactionValue: 2000
dailyTransactionVolume: 500
dailyTransactionValue: 150000
responses:
'200':
description: Successful response
content:
application/json: {}
get:
tags:
- Limit Profile
summary: Get Limit Profiles
description: >-
This endpoint returns the list of all Limit Profiles that have been
created for your customers.
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/limit-profile/FSYVVWU8UPBD:
put:
tags:
- Limit Profile
summary: Update Limit Profile
description: >-
This endpoint updates the information on an existing Limit Profile.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| limitProfileName | String | This field is required | The name of the
Limit Profile |
| singleTransactionValue | Float | This field is required | The maximum
amount that can be allowed per transaction on the reserved accounts. |
| dailyTransactionValue | Float | This field is required | The maximum
amount per day in all transactions that can be allowed on the reserved
accounts |
| dailyTransactionVolume | Float | This field is required | The maximum
number of transaction count per day allowed on the reserved accounts |
requestBody:
content:
application/json:
schema:
type: object
example:
limitProfileName: prof991
singleTransactionValue: 70000
dailyTransactionVolume: 4000
dailyTransactionValue: 100000000
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/bank-transfer/reserved-accounts/limit:
post:
tags:
- Limit Profile
summary: Reserve Account with Limit
description: >-
This endpoint reserves an account for your customers with a transaction
limit profile on it.
#### Request Payload
| **Field** | **Data type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| accountReference | String | This field is required | A unique
reference generated by merchants. |
| limitProfileCode | String | This field is required | The unique
identifier that references the limit profile to associate with the
reserved accounts. |
| accountName | String | This field is required | The name to be
displayed during name enquiry |
| currencyCode | String | This field is not required, defaults to NGN |
The currency payments will be received with |
| contractCode | String | This field is required | The merchant contract
code |
| customerEmail | String | This field is not required | The customer's
email |
| incomeSplitConfig | Object | This field is not required | A
configuration on how payments are to be split among subaccounts |
requestBody:
content:
application/json:
schema:
type: object
example:
contractCode: '7059707855'
accountName: 'Kan Yo'' Reserved with Limit '
currencyCode: NGN
accountReference: ref-00--7
customerEmail: [email protected]
customerName: Kan Yo
limitProfileCode: FSYVVWU8UPBD
responses:
'200':
description: Successful response
content:
application/json: {}
put:
tags:
- Limit Profile
summary: Update Reserve Account Limit
description: >-
This endpoint updates the information on an existing Limit Profile for a
Reserved Account.
#### Request Payload
| **Field** | **Data type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| accountReference | String | This field is required | A unique
reference generated by merchants. |
| limitProfileCode | String | This field is required | The unique
identifier that references the limit profile to associate with the
reserved accounts. |
requestBody:
content:
application/json:
schema:
type: object
example:
accountReference: ref-00--7
limitProfileCode: FSYVVWU8UPBD
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/refunds/initiate-refund:
post:
tags:
- Refund
summary: Initiate Refund
description: >-
This endpoint allows you to Initiate a refund.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| transactionReference | String | This field is required | Unique
identifier for the transaction generated by Monnify. |
| refundAmount | String | This field is required | Amount to refund. |
| refundReference | String | This field is required | Unique identifier
for the transaction refund generated by the merchant. |
| refundReason | String | This field is required | A note describing
reason why this transaction is being refunded. |
| customerNote | String | This field is required | This field serve as
narration in credit to customer's bank account. |
| destinationAccountNumber | String | This field is optional | The
account number to send the refund amount to. |
| destnationAccountBankCode | String | This field is optional | The bank
code for the destinationAccountNumber. |
requestBody:
content:
application/json:
schema:
type: object
example:
transactionReference: MNFY|65|20220727094724|000477
refundReference: 202100op3456
refundAmount: 100
refundReason: Order cancelled!
customerNote: An optional note
destinationAccountNumber: '3270005594'
destinationAccountBankCode: '050'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/refunds/202100op3456:
get:
tags:
- Refund
summary: Get Refund Status
description: >-
This endpoint returns the status of an initiated refund.
#### Path Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| refundReference | String | The refundReference initially used in the
refund. |
parameters:
- name: refundReference
in: query
schema:
type: string
description: The refund reference used for the refund.
example: String
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/refunds:
get:
tags:
- Refund
summary: Get All Refunds
description: >-
This endpoint returns the list of all refunds available on your
integration.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| page | Integer | An integer specifying page of transactions to be
retrieved. Page number starts from 0. |
| size | Integer | An integer specifying size of transactions to be
returned per page. |
parameters:
- name: page
in: query
schema:
type: string
description: >-
An integer specifying the page of transactions to be retrieved. Page
number starts from 0.
example: Integer
- name: size
in: query
schema:
type: string
description: >-
An integer specifying the size of transactions to be returned per
page.
example: Integer
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/transactions/find-by-settlement-reference:
get:
tags:
- Settlements
summary: Get Transactions By Settlement Reference
description: |-
This endpoint returns all transactions that made up a settlement.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| page | Integer | The current page of the records |
| reference | String | The settlement reference |
| size | Integer | The number of transactions per page |
parameters:
- name: reference
in: query
schema:
type: string
description: The settlement reference
example: String
- name: page
in: query
schema:
type: string
description: The current page of the record
example: Integer
- name: size
in: query
schema:
type: string
description: The number of transactions per page
example: Integer
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/settlement-detail:
get:
tags:
- Settlements
summary: Get Settlement Information for Transaction
description: >-
This endpoint returns settlement information on transactions made to
your settlement account.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| transactionReference | String | The urlencoded transaction reference
of the said transaction |
parameters:
- name: transactionReference
in: query
schema:
type: string
description: The Monnify transaction reference of the desired transaction
example: String
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/disbursements/account/validate:
get:
tags:
- Verification APIs
summary: Validate Bank Account
description: |-
This endpoint validates a Customer's NUBAN Account.
#### Query Parameters
| **Field** | **Data Type** | **Description** |
| --- | --- | --- |
| accountNumber | String | The account number to be validated |
| bankCode | String | The bank code of the required account number |
parameters:
- name: accountNumber
in: query
schema:
type: string
description: The account number to be validated
example: String
- name: bankCode
in: query
schema:
type: string
description: The bank code of the required account number
example: String
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/vas/bvn-details-match:
post:
tags:
- Verification APIs
summary: BVN Information Verification
description: >-
This endpoint verifies the BVN information of your customers.
#### Request Payload
| **Field** | **Data Type** | **Required/Not required** |
**Description** |
| --- | --- | --- | --- |
| bvn | String | This field is required | The user bvn |
| name | String | This field is required | The user’s name |
| dateOfBirth | String | This field is required | The user’s date of
birth |
| mobileNo | String | This field is required | The user mobile number |
requestBody:
content:
application/json:
schema:
type: object
example:
bvn: '22222222226'
name: OLATUNDE JOSIAH OGUNBOYEJO
dateOfBirth: 27-Apr-1993
mobileNo: '08142223149'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/vas/bvn-account-match:
post:
tags:
- Verification APIs
summary: BVN and Account Name Match
description: >-
This endpoint verifies that the Bank verification number and the account
number supplied by a user match the BVN and account number linked to
that account.
#### Request Payload
| **Field** | **Data Type** | **Required/Not Required** |
**Description** |
| --- | --- | --- | --- |
| bankCode | String | This field is required | The user’s bank code |
| accountNumber | String | This field is required | The user account
number |
| bvn | String | This field is required | The user’s bvn |
requestBody:
content:
application/json:
schema:
type: object
example:
bankCode: '057'
accountNumber: '2191802645'
bvn: '22222222226'
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/banks:
get:
tags:
- Others
summary: Get Banks
description: >-
This endpoint returns a list of all banks supported by Monnify for
collections and disbursements.
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/sdk/transactions/banks:
get:
tags:
- Others
summary: Get Banks With USSD Short Code
description: >-
This endpoint returns the list of all supported banks with their valid
USSD short code.
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/disbursements/wallet:
post:
tags:
- Wallet
summary: Create Wallet
description: >-
This endpoint creates wallets for merchants' customers
#### Request Payload
| **Field** | **DataType** | **Description** |
| --- | --- | --- |
| walletReference | String | A unique identifier for the wallet |
| walletName | String | The desired wallet name |
| customerName | String | The customer's name |
| customerEmail | String | The customer's email |
| bvn | string | The customer's bvn |
| bvnDateOfBirth | String | The date of birth associated with the bvn in
the format yyyy-mm-dd |
requestBody:
content:
application/json:
schema:
type: object
example:
walletReference: ref1684248425966
walletName: Staging Wallet - ref1684248425966
customerName: John Doe
bvnDetails:
bvn: '22222222226'
bvnDateOfBirth: '1994-09-07'
customerEmail: [email protected]
responses:
'200':
description: Successful response
content:
application/json: {}
get:
tags:
- Wallet
summary: Get Wallets
description: >-
This endpoint returns all the wallets created by a merchant
#### Query Parameters
| **Field** | **DataType** | **Description** |
| --- | --- | --- |
| customerEmail | String | The customer’s email |
| pageSize | Integer | The number of wallet records to return |
| pageNo | Integer | A number specifying what page of wallets to be
retrieved |
parameters:
- name: customerEmail
in: query
schema:
type: string
description: The customer's email
example: String
- name: pageSize
in: query
schema:
type: string
description: The number of wallet records to return
example: Integer
- name: pageNo
in: query
schema:
type: string
description: A number specifying what page of wallets to be retrieved
example: Integer
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/disbursements/wallet/balance:
get:
tags:
- Wallet
summary: Wallet Balance
description: |-
This endpoint returns the balance associated with a wallet
#### **Request Payload**
| **Field** | **DataType** | **Description** |
| --- | --- | --- |
| walletReference | String | The unique identifier of the wallet |
parameters:
- name: walletReference
in: query
schema:
type: string
description: The unique identifier of the wallet
example: String
responses:
'200':
description: Successful response
content:
application/json: {}
/api/v1/disbursements/wallet/transactions:
get:
tags:
- Wallet
summary: Wallet Transactions
description: >-
This endpoint returns all the transactions performed by a wallet
#### Query Parameters
| **Field** | **DataType** | **Description** |
| --- | --- | --- |
| accountNumber | String | The walletAccountNumber |
| pageSize | Integer | The number of transaction records to return |
| pageNo | Integer | A number specifying what page of transactions to be
retrieved |
parameters:
- name: accountNumber
in: query
schema:
type: string
description: The walletAccountNumber
example: String
- name: pageSize
in: query
schema:
type: string
description: The number of wallet records to return
example: Integer
- name: pageNo
in: query
schema:
type: string
description: A number specifying what page of wallets to be retrieved
example: Integer
responses:
'200':
description: Successful response
content:
application/json: {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment