openapi: 3.1.0 info: title: Moniepoint POS Push Payment Authentication Single Transfers API description: 'Push payment-request flow for Moniepoint POS terminals. ISV partners push an authenticated payment request to a registered terminal serial number; the merchant taps to accept and the terminal completes a card or bank-transfer collection routed through Moniepoint''s acquiring rails. API client credentials (client id and client secret) are issued from the Moniepoint Business dashboard. ' version: '1.0' contact: name: Moniepoint POS Developer Support url: https://teamapt.atlassian.net/wiki/spaces/EI servers: - url: https://pos.moniepoint.com description: Production security: - BasicAuth: [] tags: - name: Single Transfers description: Initiate, authorize, and query single transfers. paths: /api/v2/disbursements/single: post: summary: Monnify Initiate Single Transfer description: Initiate a single-bank-account payout. Requires beneficiary account name verified by Name Inquiry. operationId: initiateSingleTransfer tags: - Single Transfers requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SingleTransferRequest' responses: '200': description: Transfer initiated. content: application/json: schema: $ref: '#/components/schemas/TransferEnvelope' /api/v2/disbursements/single/validate-otp: post: summary: Monnify Authorize Single Transfer OTP description: Submit the OTP returned to the merchant to authorize a pending transfer. operationId: authorizeSingleTransferOtp tags: - Single Transfers requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AuthorizeTransferRequest' responses: '200': description: Transfer authorized. content: application/json: schema: $ref: '#/components/schemas/TransferEnvelope' /api/v2/disbursements/single/resend-otp: post: summary: Monnify Resend Transfer OTP operationId: resendTransferOtp tags: - Single Transfers requestBody: required: true content: application/json: schema: type: object required: - reference properties: reference: type: string responses: '200': description: OTP resent. content: application/json: schema: type: object properties: requestSuccessful: type: boolean responseMessage: type: string responseCode: type: string responseBody: type: object /api/v2/disbursements/single/summary: get: summary: Monnify Get Single Transfer Status description: Look up the current status of a single transfer. operationId: getSingleTransferStatus tags: - Single Transfers parameters: - name: reference in: query required: true schema: type: string responses: '200': description: Transfer status. content: application/json: schema: $ref: '#/components/schemas/TransferEnvelope' /api/v2/disbursements/single/transactions: get: summary: Monnify List Single Transfers operationId: listSingleTransfers tags: - Single Transfers parameters: - name: pageNo in: query schema: type: integer default: 0 - name: pageSize in: query schema: type: integer default: 10 responses: '200': description: Single transfers page. content: application/json: schema: $ref: '#/components/schemas/TransferPageEnvelope' components: schemas: AuthorizeTransferRequest: type: object required: - reference - authorizationCode properties: reference: type: string authorizationCode: type: string Transfer: type: object properties: reference: type: string amount: type: number destinationAccountName: type: string destinationAccountNumber: type: string destinationBankCode: type: string currency: type: string status: type: string enum: - SUCCESS - FAILED - REVERSED - PENDING - OTP_EMAIL_DISPATCH - PENDING_AUTHORIZATION narration: type: string fee: type: number dateCreated: type: string format: date-time SingleTransferRequest: type: object required: - amount - reference - narration - destinationBankCode - destinationAccountNumber - currency - sourceAccountNumber properties: amount: type: number reference: type: string description: Unique merchant reference. narration: type: string maxLength: 100 destinationBankCode: type: string destinationAccountNumber: type: string destinationAccountName: type: string description: Required as of March 2026 — must match the Name Inquiry result. currency: type: string example: NGN sourceAccountNumber: type: string description: Merchant wallet account number. async: type: boolean senderInformation: $ref: '#/components/schemas/SenderInformation' TransferEnvelope: type: object properties: requestSuccessful: type: boolean responseMessage: type: string responseCode: type: string responseBody: $ref: '#/components/schemas/Transfer' TransferPageEnvelope: type: object properties: requestSuccessful: type: boolean responseMessage: type: string responseCode: type: string responseBody: type: object properties: content: type: array items: $ref: '#/components/schemas/Transfer' number: type: integer size: type: integer totalElements: type: integer totalPages: type: integer SenderInformation: type: object description: Optional sender details (added October 2025). properties: fullName: type: string phoneNumber: type: string email: type: string format: email senderRef: type: string securitySchemes: BasicAuth: type: http scheme: basic description: Basic auth using API client id and client secret from the Moniepoint Business dashboard.