openapi: 3.2.0
info:
description: "# Introduction\n\n
\n Monoova has developed a powerful payments engine which allows you to receive, manage and pay funds in AUD in Australia automatically.\n This service is made available to Monoova’s clients through a set of easy-to-use RESTful APIs with JSON payloads described in this document.\n The central idea is to reduce the cost, risk and effort normally associated with managing complex money movements so that you can focus on growing your business.\n
\n \n Our clients can receive and reconcile funds via Realtime transfers (NPP), direct credits/debits, BPAY and cards. \n They can then manage those funds by building virtual account/wallet hierarchies to get bespoke reporting, reconciliation and much more. \n And finally, our clients can pay funds via Realtime transfers (NPP) direct credits and BPAY. \n As new technologies become available (e.g. NPP Mandated payments) we will make additional methods of receiving, managing and paying available.\n
\n \n All information flows are real-time.\n Moving money between various Monoova accounts is also real time.\n All money flows in and out of the Engine are as fast as the banking system allows.\n
\n \n The sandbox environment is open to everyone who signs up on our Sandbox Portal at no cost.\n The sandbox environment allows you to test out the functionality of our API in a consequence free development environment.\n Access to the live environment is granted once you have (1) gone through our compliance process and (2) had formal sign-off on your sandbox integration.\n
\n\n Monoova regularly releases additive changes to our API, as well as new versions of the API when a breaking change would occur. \n To ensure your integration does not break due to these additive changes, we recommend not validating the entire schema, or the position of a parameter within the schema.\n
\n
\n Note: Please note we do not accept TLS 1.0 or 1.1 connections
\n\n# Getting started\n>\n - Sign on to our Sandbox Portal\n - Get your sandbox API key under **MANAGE > ACCOUNTS** in the Sandbox Portal\n - [Authenticate](#section/Authentication)\n - Browse this document to find the functions you need\n - Begin experimenting with your first API calls by sending HTTP requests to the endpoints described in this document\n - Use the provided examples in the document as guidance\n\n# Authentication\n All RESTful APIs in this document use BASIC Authentication (except those in public/v1) in two scenarios either\n - API KEY \n - OneShotSecurityToken
\n\n> **Sandbox Authentication Credentials**\n\n \n | Field | \n Value | \n
\n \n | Username | \n API Key (obtained from the Sandbox Portal) | \n
\n \n | Password | \n leave blank when using API key; Monoova will provide password for OneShotSecurityToken | \n
\n \n | Base URL | \n https://api.m-pay.com.au/ | \n
\n
\n\n> **Live Authentication Credentials**\nThis will be provided by Monoova after a technical review.
\n\n \n | Field | \n Value | \n
\n \n | Username | \n API Key (obtained from the Production Portal; Production credentials will be supplied by Monoova) | \n
\n \n | Password | \n leave blank when using API key; Monoova will provide password for OneShotSecurityToken | \n
\n \n | Base URL | \n https://api.mpay.com.au/ | \n
\n
\n\nWhen using the LIVE Engine, your Sign-In Account is given five (5) attempts to authenticate your credentials. \nOn the fifth failure your Sign-In Account is locked for one (1) hour. \nThe returned data will indicate that your account is locked and the time in UTC that the account will be unlocked. \nIf you require the account to be unlocked on the LIVE system you may contact your Monoova representative and at his or her discretion they will unlock the account.\nSee the API routes in Security to manage Passwords and Tokens.
\n\n UserName/Password
\nUsing this scenario, you can configure BASIC Authentication with the following
\n UserName - API Key (obtained from the Sandbox Portal) Production credentials will be supplied by Monoova when you have demonstrated successful implementation of the API on our Sandbox environment.\n Password - When using your API Key, no password is required. \nIf the key is compromised, it can be re-rolled via the Sandbox Portal.
\n\n# Feedback\n\nWe value your feedback on our API. Please fill out the form here to share your feedback.\n"
version: v5.29
title: Monoova Payments Verify API
contact:
name: Monoova Support
email: support@monoova.com
url: https://www.monoova.com
x-logo:
url: https://movdpwebsiteprodae.blob.core.windows.net/images/Monoova-Primary-Logo-Black-RGB.png
altText: Monoova logo
servers:
- url: https://api.mpay.com.au
description: Production URL
- url: https://api.m-pay.com.au
description: Sandbox URL
security:
- BasicAuth: []
tags:
- name: Verify
description: 'Overview
Bank Account Ownership Verification
The purpose of this API is to verify access to a bank account or PayID details, which has several compliance and risk-mitigation applications.
If the NppCreditPayID method is used, the API response will include the PayID name. In scenarios where the PayID is either unidentified or not configured, you can verify if the payer/payee has access to the account using a secret code.
By passing the BSB and account number, the account verification API will credit a target bank account with a secret code in the remitter name and lodgement reference. This code can only be viewed by someone who has access to the target bank account by accessing and viewing their bank statement. The code can then be submitted against our records, and if it matches, Monoova will persist a verification token against that specific account.
How it works
- Initiate a verification transaction on the target bank account.
- Monoova will credit the target bank account with a 1c amount and a secret remitter code (may take up to 48 hours for the code to show on the target bank account).
Below image is how a sample verification code appears on a bank statement. In YELLOW is the code your client will need to return, in BLUE is your remitter name. For NPP verification transactions, the secret code can also be found in the lodgement reference.
- Owner of the target bank account views the statement to obtain the secret code.
- Submit the secret code to Monoova via POST verify/v1/aba/validate. In the sandbox, use code "555555" to test successful validation of an account verification.
- If the submitted code and amount are correct, the target bank account is designated as verified.
'
paths:
/verify/v2/aba/initiate:
post:
tags:
- Verify
summary: Initiate a NPP verification transaction
description: Initiates a verification transaction against a designated bank account or PayID via NPP rail using the v2 endpoint.
operationId: VerifyNPPAccountPayIdInitiate
x-codeSamples:
- lang: 'Npp To BankAccount '
source: "{\n \"creditMethod\": \"NppCreditBankAccount\",\n \"bsb\": \"802-985\",\n \"bankAccountNumber\": \"718414234\",\n \"accountName\": \"Monoova\",\n \"remitter\": \"RemitterName\",\n \"verificationIdentifier\": \"NPP Bank Account Verification Identifier\"\n}\n"
- lang: Npp To PayId
source: "{\n \"creditMethod\": \"NppCreditPayId\",\n \"payId\": \"MW9GM4@monoova.me\",\n \"payIdType\": \"Email\",\n \"accountName\": \"Monoova\",\n \"remitter\": \"RemitterName\",\n \"verificationIdentifier\": \"NPP PayId Verification Identifier\"\n}\n"
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/verify.initiate2'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DTO.VerifyAccountInitiateResponse_V2'
'400':
description: Bad request
'500':
description: Internal Server Error
/verify/v1/aba/initiate:
post:
tags:
- Verify
summary: Initiate a DE Verification Transaction
description: Inititiates a verification transaction against a designated bank account.
operationId: VerifyAccountInitiate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/verify.initiate'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DTO.VerifyAccountInitiateResponse_V1'
'400':
description: Bad request
'500':
description: Internal Server Error
/verify/v1/aba/validate:
post:
tags:
- Verify
summary: Complete an account verification
description: Validates a code against a token generated via the initiate call. After 3 failed attempts the token will get locked for 1 hour. Users can retry with same token after 1 hour or initiate a new verification anytime.
operationId: VerifyAccountValidate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/verify.validate'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DTO.VerifyAccountValidateResponse_V1'
'400':
description: Bad request
'500':
description: Internal Server Error
/verify/v1/aba/get/{token}:
get:
tags:
- Verify
summary: Get a verification token's details
description: Return details for a specific verification token.
operationId: VerifyAccountGet
parameters:
- name: token
in: path
required: true
description: Generated Token from verify/v1/aba/initiate (Initiates a verification transaction)
schema:
type: string
example: f45d1c83-1533-4cbb-ae05-4381e181cb18
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DTO.VerifyAccountGetResponse_V1'
'400':
description: Bad request
'500':
description: Internal Server Error
/verify/v1/aba/list:
get:
tags:
- Verify
summary: List verified bank accounts
description: Get a list of all verified bank accounts.
operationId: VerifyAccountList
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DTO.VerifyAccountListResponse_V1'
'400':
description: Bad request
'500':
description: Internal Server Error
/verify/v1/aba/update:
post:
tags:
- Verify
summary: Update a verified bank account
description: Update the following fields for a verified account's without reverifying the bank account. Bank Account Title, Has DDR authority
operationId: VerifyAccountUpdate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/verify.update'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/DTO.VerifyAccountUpdateResponse_V1'
'400':
description: Bad request
'500':
description: Internal Server Error
components:
schemas:
DTO.VerifyAccountDetails:
properties:
token:
description: The text(GUID) that identifies the token.
type: string
example: 97649d82-fa5b-4481-90a8-ec4ef9a854ab
created:
description: Datetime that the request was created
type: string
example: '2018-11-19T13:26:48'
updated:
description: Datetime that the direct debit authority flag was last updated
type: string
example: '2018-11-19T13:26:48'
lastSystemBSBValidation:
description: System bsb validation timestamp
type: string
comment:
description: Your comment submitted when initiating the verify request
type: string
example: 'null'
bsb:
description: BSB number of associated bank account. BSB format is ‘000-000’
type: string
example: 062-205
bankAccountNumber:
description: This is the bank accounts number
type: string
example: '201786488'
bankAccountTitle:
description: Bank account title or name of associated bank account
type: string
example: MPayments Retail
remitter:
description: Your example remitter code
type: string
example: MPRetail
maxLength: 16
isBlacklisted:
description: Blacklisted accounts cannot be transacted on
type: boolean
example: false
hasDDAuthority:
description: Flag that can be used to track which account you have direct debit authority for
type: boolean
example: true
ddAuthorityChangedTimestamp:
description: Datetime that the direct debit authority flag was last modified
type: string
example: '2018-11-19T13:26:48'
ddAuthorityChangedBy:
description: Datetime that the request was created
type: string
example: '6279059761211264'
verificationIdentifier:
description: Name of the verification token
type: string
example: MP Retail Account
verificationStatus:
description: Status of the verification token
type: string
example: Pending
verificationSignonMerchant:
description: mAccount which owns the verification token
type: string
example: '6279059761211264'
verificationRetryCount:
description: Number of times verification has been retried
type: integer
format: int32
example: 0
verificationRetyCountBeforeLockout:
description: Threshold number of verification failures that triggers a lockout
type: integer
format: int32
example: 3
verificationLastRetryTimestamp:
description: Last verification attempt datetime
type: string
example: '2018-11-19T13:26:48'
verificationLastRetryLockoutMinutes:
description: Lockout time in after verification failure threshold has been reached
type: integer
format: int32
example: 60
verificationDEJobId:
description: Job ID for the verification transaction
type: integer
format: int32
example: 93607
verificationRootId:
description: Unique verification root ID
type: integer
format: int32
example: 438714
type: object
verify.initiate2:
type: object
required:
- creditMethod
- accountName
- verificationIdentifier
properties:
creditMethod:
type: string
example: NppCreditBankAccount
enum:
- NppCreditBankAccount
- NppCreditPayId
description: Credit method. Possible values: 'NppCreditBankAccount' or 'NppCreditPayId'
bsb:
type: string
uniqueItems: false
example: 802-985
maxLength: 7
description: BSB number of associated bank account. BSB format is ‘000-000’. `When creditMethod is 'NppCreditBankAccount' this field is required`
bankAccountNumber:
type: string
maxLength: 9
example: '123456789'
description: Bank account number of associated bank account. `When creditMethod is 'NppCreditBankAccount' this field is required`
accountName:
type: string
uniqueItems: false
maxLength: 32
example: Monoova NPP Bank Account
description: Bank account title or name of associated bank account.
remitter:
type: string
uniqueItems: false
example: Monoova Remitter
maxLength: 140
description: More details at Verify section.
payIdType:
type: string
example: Email
enum:
- ABN
- Email
- PhoneNumber
- OrganisationId
- ACN
description: PayId Type. Possible values: ABN, Email, PhoneNumber, OrganisationId, ACN `When creditMethod is 'NppCreditPayId' this field is required`
payId:
type: string
example: MW9GM4@monoova.me
maxLength: 256
description: PayId Identifier of the Payee. `When creditMethod is 'NppCreditPayId' this field is required` See PAYID Format Validation.
verificationIdentifier:
type: string
uniqueItems: false
example: NPP Bank Account Verification Identifier
maxLength: 512
description: A description supplied by the VerificationSigninMerchant to distinguish this entry from others in a listing. This could be an encoded string from the signon merchant.
verify.initiate:
type: object
required:
- bsb
- bankAccountNumber
- bankAccountTitle
- verificationIdentifier
- hasDDAuthority
properties:
bsb:
type: string
uniqueItems: false
example: 012-366
maxLength: 7
description: BSB number of associated bank account. BSB format is ‘000-000’.
bankAccountNumber:
type: string
maxLength: 9
example: '123456789'
description: Bank account number of associated bank account.
bankAccountTitle:
type: string
uniqueItems: false
maxLength: 32
example: Monoova Bank Account
description: Bank account title or name of associated bank account.
remitter:
type: string
uniqueItems: false
example: MPRetail
maxLength: 16
description: See Verify section.
verificationIdentifier:
type: string
uniqueItems: false
example: MP Retail Account
maxLength: 512
description: A description supplied by the VerificationSigninMerchant to distinguish this entry from others in a listing. This could be an encoded string from the signon merchant.
hasDDAuthority:
type: boolean
default: true
example: true
description: Can the system use this account to direct debit. Has an authority been granted.
verify.validate:
type: object
required:
- token
- amount
- code
properties:
token:
type: string
uniqueItems: false
example: f45d1c83-1533-4cbb-ae05-4381e181cb18
description: token from verify/v1/aba/initiate.(Inititiates a verification transaction)
amount:
type: number
format: double
uniqueItems: false
example: 0.01
minimum: 0.01
description: amount for the verification.
code:
type: string
uniqueItems: false
example: '555555'
description: Once you receive the verification code, enter it here to confirm your identity.
DTO.VerifyAccountInitiateResponse_V1:
properties:
durationMs:
description: 'This value represents the total time in milliseconds that the Platform took to process the request. '
type: integer
format: int64
example: 20
uniqueItems: false
status:
description: This is the status of executing the request. A code of ‘Ok’ indicates no errors
type: string
example: Ok
uniqueItems: false
statusDescription:
description: This is a plain English description of the status.
type: string
example: Operation completed successfully
uniqueItems: false
token:
description: The text(GUID) that identifies the token.
type: string
example: 97649d82-fa5b-4481-90a8-ec4ef9a854ab
uniqueItems: false
feeAmountExGst:
description: This is the fee amount Excluding GST
type: number
format: decimal
example: 0.5
uniqueItems: false
feeAmountIncGst:
description: This is the total fee amount Including GST
type: number
format: decimal
example: 0.55
uniqueItems: false
feeAmountGstComp:
description: This is the GST Component of the fee amount
type: number
format: decimal
example: 0.05
uniqueItems: false
type: object
format: DTO.VerifyAccountInitiateResponse_V1
verify.update:
type: object
required:
- token
- verificationIdentifier
- hasDDAuthority
properties:
token:
type: string
uniqueItems: false
example: f45d1c83-1533-4cbb-ae05-4381e181cb18
description: token from verify/v1/aba/initiate. (Inititiates a verification transaction)
remitter:
type: string
uniqueItems: false
example: MPRetail
maxLength: 16
description: See Verify section.
verificationIdentifier:
type: string
uniqueItems: false
example: MP Retail Account
maxLength: 512
description: A description supplied by the VerificationSigninMerchant to distinguish this entry from others in a listing. This could be an encoded string from the signon merchant.
hasDDAuthority:
type: boolean
default: true
example: true
description: Can the system use this account to direct debit. Has an authority been granted.
bankAccountTitle:
type: string
uniqueItems: false
example: Monoova Bank Account
maxLength: 32
description: The Title of the Bank Account for DE file.
DTO.VerifyAccountGetResponse_V1:
properties:
durationMs:
description: This value represents the total time in milliseconds that the Platform took to process the request.
type: integer
format: int64
example: 20
uniqueItems: false
status:
description: This is the status of executing the request. A code of ‘Ok’ indicates no errors
type: string
example: Ok
uniqueItems: false
statusDescription:
description: This is a plain English description of the status.
type: string
example: Operation completed successfully
details:
$ref: '#/components/schemas/DTO.VerifyAccountDetails'
type: object
format: DTO.VerifyAccountGetResponse_V1
DTO.VerifyAccountInitiateResponse_V2:
properties:
durationMs:
description: 'This value represents the total time in milliseconds that the Platform took to process the request. '
type: integer
format: int64
example: 20
status:
description: This is the status of executing the request. A code of ‘Ok’ indicates no errors
type: string
example: Ok
statusDescription:
description: This is a plain English description of the status.
type: string
example: Operation completed successfully
token:
description: The text(GUID) that identifies the token.
type: string
example: 40a834c0-8819-49d4-97df-a42738b9f685
feeAmountExGst:
description: This is the fee amount Excluding GST
type: number
format: decimal
example: 1.0
feeAmountIncGst:
description: This is the total fee amount Including GST
type: number
format: decimal
example: 1.1
feeAmountGstComp:
description: This is the GST Component of the fee amount
type: number
format: decimal
example: 0.1
ownerName:
description: This is the PayId Name set up by account holder. `When creditMethod is 'NppCreditBankAccount' this field is always Null`
type: string
example: Monoova PayId Name
type: object
format: DTO.VerifyAccountInitiateResponse_V2
DTO.VerifyAccountUpdateResponse_V1:
properties:
durationMs:
description: 'This value represents the total time in milliseconds that the Platform took to process the request. '
type: integer
format: int64
example: 20
uniqueItems: false
status:
description: This is the status of executing the request. A code of ‘Ok’ indicates no errors
type: string
example: Ok
uniqueItems: false
statusDescription:
description: This is a plain English description of the status.
type: string
example: Operation completed successfully
uniqueItems: false
type: object
format: DTO.VerifyAccountUpdateResponse_V1
DTO.VerifyAccountListResponse_V1:
properties:
durationMs:
description: 'This value represents the total time in milliseconds that the Platform took to process the request. '
type: integer
format: int64
example: 20
status:
description: This is the status of executing the request. A code of ‘Ok’ indicates no errors
type: string
example: Ok
statusDescription:
description: This is a plain English description of the status.
type: string
example: Operation completed successfully
list:
description: VerifyAccountDetails
type: array
items:
$ref: '#/components/schemas/DTO.VerifyAccountDetails'
type: object
format: DTO.VerifyAccountListResponse_V1
DTO.VerifyAccountValidateResponse_V1:
properties:
durationMs:
description: 'This value represents the total time in milliseconds that the Platform took to process the request. '
type: integer
format: int64
example: 20
uniqueItems: false
status:
description: This is the status of executing the request. A code of ‘Ok’ indicates no errors
type: string
example: Ok
uniqueItems: false
statusDescription:
description: This is a plain English description of the status.
type: string
example: Operation completed successfully
uniqueItems: false
type: object
format: DTO.VerifyAccountValidateResponse_V1
securitySchemes:
BasicAuth:
type: http
scheme: basic
x-tagGroups:
- name: Receive and Pay
tags:
- Financial
- Verify
- Automatcher (Bank Account Receivables)
- Whitelisting for Automatcher (Bank Account Receivables)
- Ledger Account
- Reconciliation Rules
- PayID
- Tools
- name: BPAY
tags:
- BPAY
- mWallet
- name: Manage
tags:
- Subscriptions
- Webhooks
- mAccount
- Reports
- Security
- Token
- name: Public Endpoints
tags:
- Public Endpoints