openapi: 3.0.0 servers: - url: https://api.monoova.com description: Production URL# - url: https://sand-api.monoova.com description: Sandbox URL info: description: | # Introduction Monoova's Online Card Payment Service incorporates a next-gen Card Payment Checkout integrated with our expansive Payments API to allow merchants to capture card and mobile wallet payments from your customers online and receive funds into your Monoova account for automated reconciliation and disbursement. To integrate the Card Payment Gateway into your website, all you need is Monoova's Merchant Software Development Kit (SDK) hosted on GitHub and a set of straightforward RESTful APIs detailed below. We will continue to update this API documentation as we release additional functionality. # How to Enable the Card Payment Gateway and Sandbox API’s > - If not already a user, register an account in our Sandbox Portal - Once registered and logged in, navigate to **Manage > API Gateway** and input your API Key (provided to you as part of Portal user registration) to activate API Gateway Access for your mAccount (If you do not know your API Key you will need to roll a new one, this can be done by navigating to **Manage > Accounts**) - Card Gateway integration requires some additional back-end configuration prior to use by a member of our integration team who will reach out to onboard and confirm access as a final step to enabling your service. - To notify the integration team of your interest in enabling your account for Online Card Payment Service functionality, please Contact us and a member of the team will follow up to guide you through the final steps. # Integrating Monoova Checkout for Card Payments Utilizing Monoova's Merchant SDK enables you to deploy a Card Payment Checkout that securely gathers card payment information that complies with PCI standards, without necessitating substantial PCI compliance modifications within your application. The integrated Card Payment Checkout implementation ensures the secure capture of card data and offers complete customization to seamlessly align with your application's appearance and user experience. ## Before you start > - Ensure that your mAccount has been properly configured to enable card payments. Please access the Monoova portal or contact Monoova Support to verify this. - Download the Card Software Development Kit (SDK): https://github.com/Monoova/merchantSDK ## Using the Merchant SDK To begin, clone the Merchant SDK repository. This repository offers an example implementation of the set of tools for initiating a session with Monoova and presenting the credit card checkout for the collection of card payments. Detailed instructions on how to integrate the credit card checkout are included in the SDK. ## Sample Card Details The following Card details can be used to test the credit card checkout and end-to-end flow in your Sandbox Account.
| Card Type | Card Number | Card Expiry | Card CVV |
|---|---|---|---|
| VISA | 4111 1111 1111 1111 | 12/31 | 123 |
| MASTER CARD | 5555 5555 5555 4444 | 12/31 | 123 |
In addition to callable reporting endpoints, webhooks will also be available for state changes for payment agreements and funds received.
- name: Monoova Error Codes description:| HTTP Status | Error Code | Meaning |
|---|---|---|
| 400 | CCM_ACCTID_REQUIRED | maccount is required |
| 400 | CCM_ACC_DISABLED_ERROR | Card transactions disabled for accountId {0} |
| 400 | CCM_ACC_EXISTS | Failed to create account - account already exists |
| 400 | CCM_ACC_LIMIT_REACHED | transaction amount {0} plus existing transactions {1} exceeds limit {2} |
| 400 | CCM_ACC_NOT_FOUND_ERROR | account not found for accountId {0} |
| 400 | CCM_ACC_UID_NOT_UNIQUE | More than one account {0} is found |
| 400 | CCM_ACC_UPDATE_ERROR | Documents modified {0}. Expected exactly 1 account updated. |
| 400 | CCM_AMOUNT_INVALID | {0} must be between 0 and {1} |
| 400 | CCM_AMOUNT_REQUIRED | {0}.currencyAmount required |
| 400 | CCM_BILLADDR_REQUIRED | {0}.billingAddress required |
| 400 | CCM_BUSINESS_RULE_ERROR | startdate invalid |
| 400 | CCM_CARDTYPE_REQUIRED | {0}.cardType required |
| 400 | CCM_CC_GATEWAY_ERROR | Error returned from CC gateway - {0} |
| 400 | CCM_CC_GWM_ERROR | Error returned from CC Gateway Manager - {0} |
| 400 | CCM_COUNTRY_INVALID | {0}.countryCode must be valid ISO 2 character code |
| 400 | CCM_COUNTRY_REQUIRED | {0}.countryCode required |
| 400 | CCM_CRTD_ENDDATE_INVALID | createdEndDate must be later than createdStartDate |
| 400 | CCM_CRTD_STARTDATE_INVALID | createdStartDate must be past time |
| 400 | CCM_CRTD_STARTDATE_REQUIRED | createdStartDate is mandatory |
| 400 | CCM_CUSTOMER_REQUIRED | customer required |
| 400 | CCM_DESC_INVALID | {0}.description [{PropertyValue}] must match {RegularExpression} |
| 400 | CCM_DESC_LENGTH | {0}.description must not exceed {MaxLength} |
| 400 | CCM_DESC_REQUIRED | {0}.description required |
| 400 | CCM_DETAILS_REQUIRED | paymentDetails required |
| 400 | CCM_EMAIL_INVALID | {0}.emailAddress [{PropertyValue}] must be valid email address |
| 400 | CCM_EMAIL_MAXLEN | {0}.emailAddress cannot exceed {MaxLength} |
| 400 | CCM_EMAIL_REQUIRED | {0}.emailAddress required |
| 400 | CCM_EMPTY_BATCH_ID | Empty BatchId. |
| 400 | CCM_EMPTY_SETTLEMENTS_LIST | Empty settlements list. |
| 400 | CCM_EMPTY_SETTLEMENT_DUPLICATE | Empty settlement duplicate. |
| 400 | CCM_EMPTY_SETTLEMENT_ORIGINAL | Empty settlement original. |
| 400 | CCM_EMPTY_TRANSACTION_UNIQUE_REFERENCE | Empty TransactionUniqueReference. |
| 400 | CCM_FIRSTNAME_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_FIRSTNAME_LENGTH | {0}.firstName must not exceed {MaxLength} |
| 400 | CCM_FIRSTNAME_REQUIRED | {0}.firstName required |
| 400 | CCM_FUNDS_DECLINED | Funds reservation failed |
| 400 | CCM_JOBID_INVALID | Async Job Id is not valid Guid - must use the UniqueRequestId returned by the originating call |
| 400 | CCM_JOB_EXISTS | Failed to create AsyncJob - request already exists |
| 400 | CCM_JOB_EXPIRED | Async job failed to complete within a reasonable time |
| 400 | CCM_LASTNAME_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_LASTNAME_LENGTH | {0}.lastName must not exceed {MaxLength} |
| 400 | CCM_LASTNAME_REQUIRED | {0}.lastName required |
| 400 | CCM_MAPPING_ERROR | Internal error - property {0} value {1} is invalid - expected one of [{2}]. Please contact Monoova support. |
| 400 | CCM_MRCH_ADDR_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_MRCH_CAT_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_MRCH_CAT_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_MRCH_COUNTRY_NOTFOUND | {0}.{PropertyName} '{PropertyValue}' is not valid |
| 400 | CCM_MRCH_COUNTRY_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_MRCH_EMAIL_INVALID | {0}.{PropertyName} '{PropertyValue}' must match {RegularExpression} |
| 400 | CCM_MRCH_EMAIL_LENGTH | {0}.{PropertyName} '{PropertyValue}' must not exceed {MaxLength} |
| 400 | CCM_MRCH_EMAIL_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_MRCH_IND_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_MRCH_NAME_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_MRCH_NAME_LENGTH | {0}.{PropertyName} must not exceed {MaxLength} |
| 400 | CCM_MRCH_NAME_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_MRCH_PHONE_INVALID | {0}.{PropertyName} '{PropertyValue}' must match {RegularExpression} |
| 400 | CCM_MRCH_PHONE_LENGTH | {0}.{PropertyName} '{PropertyValue}' must not exceed {MaxLength} |
| 400 | CCM_MRCH_POSTCODE_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_MRCH_POSTCODE_NOTFOUND | {0}.PostalCode is not defined for specified country |
| 400 | CCM_MRCH_POSTCODE_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_MRCH_STATE_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_MRCH_STATE_NOTFOUND | {0}.State is not defined for specified country |
| 400 | CCM_MRCH_STATE_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_MRCH_STREET_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_MRCH_STREET_LENGTH | {0}.{PropertyName} must not exceed {MaxLength} |
| 400 | CCM_MRCH_STREET_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_MRCH_SUBURB_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_MRCH_SUBURB_LENGTH | {0}.{PropertyName} must not exceed {MaxLength} |
| 400 | CCM_MRCH_SUBURB_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_PARENTUID_INVALID | {0}.clientParentTransactionUniqueReference {PropertyValue} must match {RegularExpression} |
| 400 | CCM_PARENTUID_REQUIRED | {0}.clientParentTransactionUniqueReference required |
| 400 | CCM_PCT_PREPAID_INVALID | {0}.{PropertyName} value {PropertyValue} must be between {From} and {To} |
| 400 | CCM_PCT_PREPAID_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_PG_NUM_INVALID | pageNumber must be greater than zero |
| 400 | CCM_PG_SZ_INVALID | pageSize must be between 1 and {0} |
| 400 | CCM_POSTCODE_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_POSTCODE_LENGTH | {0}.postalCode must not exceed {MaxLength} |
| 400 | CCM_POSTCODE_REQUIRED | {0}.postalCode required |
| 400 | CCM_PPDAYS_INVALID | {0}.{PropertyName} value {PropertyValue} cannot be less than {ComparisonValue} |
| 400 | CCM_PPDAYS_REQUIRED | {0}.{PropertyName} required |
| 400 | CCM_REASON_INVALID | {0}.refundReason [{PropertyValue}] must match {RegularExpression} |
| 400 | CCM_REFUND_LIMIT_EXCEEDED | refundAmount {0} exceeds available amount {1} |
| 400 | CCM_REFUND_REJECTED | "Refund rejected by payment processor 400,CCM_REF_EXISTING,existing refund status {0} is not yet finalised""" |
| 400 | CCM_REF_INVALID_STATUS | parent transaction status {0} invalid for refund |
| 400 | CCM_REF_TOO_LATE | the allowable refund period has expired for this transaction |
| 400 | CCM_REQUEST_EMPTY | request payload is empty |
| 400 | CCM_REQ_BODY_INVALID | Error parsing badly formed request message - {0} |
| 400 | CCM_STATE_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_STATE_LENGTH | {0}.state must not exceed {MaxLength} |
| 400 | CCM_STATE_REQUIRED | {0}.state required |
| 400 | CCM_STATUS_INVALID | Status {PropertyValue} is invalid - must be one of [{0}] |
| 400 | CCM_STREET_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_STREET_LENGTH | {0}.street must not exceed maximum length 37 for Amex or 60 for Visa/Mastercard |
| 400 | CCM_STREET_MAX_LINES | {0}.street cannot exceed 2 lines |
| 400 | CCM_STREET_MIN_LINES | {0}.street must contain at least 1 line |
| 400 | CCM_STREET_REQUIRED | {0}.street required |
| 400 | CCM_SUBURB_INVALID | {0}.{PropertyName} '{PropertyValue}' invalid. Must match {RegularExpression} |
| 400 | CCM_SUBURB_LENGTH | {0}.suburb must not exceed {MaxLength} |
| 400 | CCM_SUBURB_REQUIRED | {0}.suburb required |
| 400 | CCM_TRN_EXISTS | Failed to create CreditCardTransaction - transaction already exists |
| 400 | CCM_UID_INVALID | {0}.clientTransactionUniqueReference {PropertyValue} must match {RegularExpression} |
| 400 | CCM_UID_REQUIRED | {0}.clientTransactionUniqueReference required |
| 400 | CCM_VALIDATION_ERROR | Error validating request message - {0} |
| 404 | CCM_ACC_NOT_FOUND_ERROR | account not found for accountId {0} |
| 404 | CCM_JOB_NOT_FOUND_ERROR | AsyncJob with RequestId {0} not found |
| 404 | CCM_LINK_NOT_FOUND_ERROR | CreditCardTransaction not found for PaymentGateway {0} / GatewayTransactionId {1} |
| 404 | CCM_TRNUID_NOT_FOUND_ERROR | CreditCardTransaction not found for TransactionUniqueReference {0} |
| 404 | CCM_TRN_NOT_FOUND_ERROR | CreditCardTransaction not found for Account {0} / clientTransactionUniqueReference {1} |
| 500 | CCM_ACC_CREATE_ERROR | Failed to create account in repository |
| 500 | CCM_DUPLICATED_SETTLEMENT_CREATE_ERROR | Failed to create duplicated settlement in repository |
| 500 | CCM_FAILED_TRANSACTION_CREATE_ERROR | Failed to create failed transaction in repository |
| 500 | CCM_INVALID_DATE_ONLY_STRING | {0} Invalid DateOnly string {1}. Expected yyyy-MM-dd |
| 500 | CCM_JOB_CREATE_ERROR | Failed to create AsyncJob in repository |
| 500 | CCM_JOB_UPDATE_ERROR | Documents modified {0}. Expected exactly 1 AsyncJob updated. |
| 500 | CCM_TRNUID_NOT_UNIQUE | More than one TransactionUniqueReference {0} is found |
| 500 | CCM_TRN_CREATE_ERROR | Failed to create transaction in repository |
| 500 | CCM_TRN_NOT_UNIQUE | More than one AccountId {0} / clientTransactionUniqueReference {1} is found |
| 500 | CCM_TRN_UPDATE_ERROR | Documents modified {0}. Expected exactly 1 CreditCardTransaction updated. |
| 500 | CCM_UID_CREATE_ERROR | Failed to allocate transaactionUniqueReference |
| 500 | CCM_UNEXPECTED_ERROR | Internal server error. Please contact Monoova support. |
| 504 | CCM_CC_GATEWAY_TIMEOUT | Timeout from CC gateway |
| 504 | CCM_CC_GWM_TIMEOUT | Timeout from CC Gateway Manager |
When the status of the payment changes, Monoova will send a webhook to notify the customer. Webhook will be triggered for the below statuses:
Additionally, “interim” webhooks will be triggered when surcharging is in effect for the client, once the payment is authorised for a new client session. This is the point at which the surcharging information becomes available and can be communicated. In this scenario, the payment status could also be one of the following non-final status values:
Note that if the payment is made using a previously vaulted payment method, the surcharge is already known at new payment creation, so there is no additional interim webhook generated.
This webhook can be subscribed using APIs provided in Notification Management.
Event name - CreditCardPaymentNotification
parameters: - name: Authorization in: header required: false schema: type: string example: 'BearerWhen the status of the refund changes, Monoova will send a webhook to notify the customer. Webhook will be triggered for the below status
Authentication for credit card API will be handled in Auth0 and access to APIs will be based on the Bearer token. Customers should register in Portal to use the credit card service. Only the admin of the group will be able to register an account for APIM access. Customers will be notified once they have been activated for credit cards. Once approved, the Bearer token can be retrieved using token API by passing the username as mAccount and the latest API Key as password in the header. The access token expires after 3600 seconds (60 minutes), after which the customer’s application should generate a new access token.
This API endpoint uses BASIC Authentication.|
username |
Your mAccount number that can be obtained from portal |
|
password |
Your API key that can be obtained from portal |