Offline Pay-ins

Offline collections are mechanisms that enable merchants to receive cash payments from their customers via a Moniepoint Business Owner location. Through Monnify, merchants are notified about these payments so they can automatically provide value to their customers, similar to digital payment methods. Moniepoint, being an agency banking platform with agents across every local government in Nigeria, facilitates this service.

Offline Collections/Pay-ins are defined as inbound payments made to you as a merchant by your customers via the Moniepoint Business Owner location.

Workflow and How It Works


Before accepting cash payments, a merchant must first create an offline product

  1. The merchant creates products for customers using the Monnify dashboard or API
  2. The customer visits any Moniepoint business owner/Agent to pay for a listed product
  3. The Agent validates the customer by entering their ID on the POS or web app
  4. After verification, the agent either sees the payment amount (for fixed products) or the customer specifies the amount (otherwise)
  5. The Moniepoint business collects the cash and processes the payment.
  6. If the customer requires a token after payment, the Moniepoint business generates and issues a receipt or value token; otherwise, only a receipt is issued
  7. The merchant is notified of the transaction

Offline Collection Products

An offline product is a commodity of interest to the customer that they are willing to pay for. Monnify supports four categories of offline products:


1. Fixed Product:

This product has a fixed amount that a customer must pay for a service or product. Merchants must state the amount on the Monnify platform. For fixed product types, the amount must be stated by merchants on the Monnify platform. An example is a monthly fixed contribution.



2. Variable Product:

This product has a flexible amount. The merchant does not specify the amount, and the customer specifies how much they want to pay at the Moniepoint Business Owner’s location. Example: variable amount for betting.
For variable product type, you do not specify the amount as the customer specifies how much they want to pay at the Moniepoint Business Owner’s location where collection is done.



3. Invoice Product:

This requires an invoice to be created for every payment. Unlike other types, the invoice does not become fully active upon creation on Monnify. To activate it, the Monnify Create an Invoice endpoint must be called, specifying "CASH" as the payment method. The amount to be paid is then tied to the generated invoice ID.



4. Merchant Invoice Product:

This product type allows merchants to designate a custom payment amount for each user. Merchants can dynamically adjust the product price during the payer verification stage by including the desired amount in their successful response to Monnify.

Set Up And Endpoints

After creating an offline product, the merchant must configure necessary endpoints to receive payments seamlessly. These endpoints are configured in the developer section, on the offline payment setup tab.


Payer Verification Endpoint (Mandatory)

This endpoint is set up on the merchant’s end and is called by Monnify to verify a customer making payment at any Moniepoint business owner location.

It’s also important to note that the response format returned by the merchant’s server should follow the format described below:

HTTP Method: POST
Request Parameters sent by Monnify:

ParameterDescription
productCodeA unique string identifying the created product. This code is automatically generated by Monnify when the product is created.
paymentRecipientIdThis is the id that uniquely identifies the customer on the merchant’s end.


Sample request to be sent by Monnify:
1{
2    "productCode": "P10101",
3    "paymentRecipientId": "LAHRAY101"
4}

Expected response format from merchant:

When user is verified successfully;

response.json
1{
2    "responseCode": "00",
3    "responseMessage": "User details retrieved successfully.",
4    "paymentRecipientId": "21220002312312",
5    "paymentRecipientDescription": "DAMILARE OGUNNAIKE SAMUEL"
6}

Expected response format for MERCHANT_INVOICE product type:
response.json
1{
2    "responseCode": "00",
3    "amount": 2000,
4    "responseMessage": "User details retrieved successfully.",
5    "paymentRecipientId": "21220002312312",
6    "paymentRecipientDescription": "DAMILARE OGUNNAIKE SAMUEL"
7}

When user does not exist;

response.json
1{
2    "responseCode": "02",
3    "responseMessage": "User does not exist."
4}

Payment Request Endpoint (Optional)

This endpoint is necessary when merchants sell products or services that return a form of "value token" (e.g., meter token) after the customer makes payment.

Also the merchant’s server should return a response in the format described below.
HTTP Method: POST
Request Parameters:

ParameterDescription
amountThe amount to be paid for the product
transactionReferenceMonnify’s unique reference for transactions
productCodeThis is the product code for the product to be purchased. . This code is automatically generated by Monnify when the product is created.
paymentRecipientIdThis is the id that uniquely identifies the customer on the merchant’s end.


Sample request to be sent by Monnify:
response.json
1{
2    "amount": 200,
3    "transactionReference": "MNFY|66|20210825115615|000002",
4    "productCode": "{productCode}",
5    "paymentRecipientId": "{paymentRecipientId}"
6}

Expected response format from merchant:

Success response;

response.json
1{
2    "responseCode": "00",
3    "productCode": "121221212",
4    "paymentRecipientId":"{paymentRecipientId}}"
5    "transactionReference":"MNFY|66|20210825115615|000002",
6    "paymentToken": "{paymentToken}"
7}

Failed Response;

response.json
1{
2    "responseCode": "01",
3    "responseMessage": "Reason for failed response"
4}

Payment Requery Endpoint (Optional)

If provided, this endpoint is called to retrieve the status of a payment request whose initial status is unknown.
HTTP Method: GET

Request Parameters:

ParameterDescription
transactionReferenceThis is the unique Monnify reference for the transaction.This reference is sent as a urlEncoded string and should be decoded on the merchant’s end

Sample request to be sent by Monnify:
1GET {{merchantPaymentRequeryUrl}}?transactionReference=MNFY%7C44%7C20220407112123%7C000684

Expected response format from merchant:

For a successful response;

response.json
1{
2    "responseCode": "00",
3    "productCode": "121221212",
4    "paymentRecipientId":"{paymentRecipientId}}"
5    "transactionReference":"MNFY|66|20210825115615|000002",
6    "paymentToken": "{paymentToken}"
7}

For a failed response

response.json
1{
2    "responseCode": "01",
3    "responseMessage": "Reason for failed response"
4}
Copyright © 2025 Monnify
instagramfacebookicon