NPP Payments

The New Payments Platform (NPP) is modern payments infrastructure that is intended to sit alongside Australian existing payment streams. It has been designed to provide fast, flexible and data-rich payments in real-time between bank accounts, 24/7 basis.

Features:

  • Instant: Real-time clearing and settlement for simple or complex payments
  • Always on: The NPP operates 24 hours a day, 365 days a year
  • Data-rich: More information with payments for efficient and automated processes
  • PayID: A simple way to direct payments using a mobile, number, email or ABN

NPP Offers:

PayID is the name of the NPP’s addressing service. It allows users to link easy-to-remember pieces of information, such as their phone number or email address, to their account. Users can provide their PayID, instead of their BSB and account number, to people or organisations they wish to receive payments from in real-time.

PayTo is a new, digital way for merchants and businesses to initiate real-time payments from
their customers' bank accounts. Payment initiation based on centrally held payment mandates.


How to initiate the NPP transaction?

The Shaype platform allows initiating payment transfers to both internal beneficiaries (Shaype to Shaype) and external beneficiaries (Shaype to external accounts) using BSB & Account number or PayID.

Below are the APIs to initiate the transfer and search transactions.

Initiate Cash Transfer

  • This API allows initiating transfers in three different ways.
    1. INTERNAL: Between Shaype accounts
    2. PAY_ID: PayID
    3. ACCOUNT: BSB, and account number
  • For transferType PAY_ID, the platform will resolve the PayID (to get the BSB and account number) and send the payment request via NPP.
  • For transferType ACCOUNT, the platform first checks if the recipient account is associated with a Shaype BSB. If it is, the transaction will be automatically converted to an INTERNAL (ShaypePay) transaction. If it is not, the platform verifies whether the recipient account is enabled for NPP. If it is, the payment will be executed via NPP; otherwise, it will be executed via DE.
  • For transferType INTERNAL, the platform consider it as a ShaypePay transaction and execute it internally within Shaype platform.

API Reference: Initiate Cash Transfer

  • Below sequence diagram shows the detail flow

Search Transactions

  • API to search transactions by different search criteria

API reference: Search Transactions


Get Transaction by ID

  • API to retrieve transaction details by transactionId.

API reference: Get Transaction by ID


Webhooks Notification

INTRABANK_TRANSFER_IN

  • You will receive this event for internal account transfers (Shaype to Shaype). This event is for the recipient of the funds.
  • The notification transactionType: INTRABANK_TRANSFER_IN is a part of type: TRANSACTION event.
{
  "customerHayId": "3f42ae09-3e37-41b5-996e-70de4b4bc8y4",
  "idempotencyKey": "2c84111b-a568-3434-9cac-70de4b4bc8y4",
  "type": "TRANSACTION",
  "productId": "8aa68667-8009-b773-0180-70de4b4bc8y4",
  "transactionEvent": {
    "transactionHayId": "bdb22873-ebdf-3c82-a1a0-70de4b4bc8y4",
    "accountHayId": "4d4f348e-5f9b-4c01-9a04-70de4b4bc8y4",
    "currencyAmount": {
      "currency": "AUD",
      "amount": 2000.00
    },
    "updatedBalance": {
      "currency": "AUD",
      "amount": 3144.69
    },
    "isPending": false,
    "counterpartName": "Andy",
    "outcome": "ACCEPTED",
    "transactionTimeUtc": "2024-06-12T07:16:41.370341Z",
    "isAtmTransaction": false,
    "transactionType": "INTRABANK_TRANSFER_IN",
    "accountBalances": {
      "totalBalance": {
        "currency": "AUD",
        "amount": 3144.69
      },
      "heldBalance": {
        "currency": "AUD",
        "amount": 0
      },
      "lockedBalance": {
        "currency": "AUD",
        "amount": 0
      },
      "stacksBalance": {
        "currency": "AUD",
        "amount": 0
      },
      "availableBalance": {
        "currency": "AUD",
        "amount": 3144.69
      }
    },
    "counterpartDetails": {
      "name": "Andy"
    },
    "category": "SAVING",
    "description": "description"
  }
}

INTRABANK_TRANSFER_OUT

  • You will receive this event for internal account transfers (Shaype to Shaype). This event is for the sender of the funds.
  • The notification transactionType: INTRABANK_TRANSFER_OUT is a part of type: TRANSACTION event.
  • In reversal transfer webhook you will receive returnReason object.
{
    "customerHayId": "c1ce15ef-9ee0-41ed-a562-f7b59ad70acb",
    "idempotencyKey": "e1e0dd2b-8f0a-44bf-bee1-6870b8bf2541",
    "type": "TRANSACTION",
    "firebaseDeviceToken": null,
    "actionOwner": null,
    "cardHayId": null,
    "accountStatusChangeEvent": null,
    "customerStatusUpdatedEvent": null,
    "transactionEvent": {
      "transactionHayId": "a1a0c9ef-76a9-40b9-8606-cecb0b29d736",
      "accountHayId": "b1b1ce0d-1a05-4bbf-9af2-4c4aaa7474a3",
      "currencyAmount": {
        "currency": "AUD",
        "amount": -212.38
      },
      "updatedBalance": {
        "currency": "AUD",
        "amount": 1067.61
      },
      "isPending": false,
      "outcome": "ACCEPTED",
      "transactionTimeUtc": "2024-06-12T07:16:41.370341Z",
      "cardPreferenceOutcome": null,
      "cardProcessorResponse": null,
      "transactionType": "INTERBANK_TRANSFER_OUT",
      "cardUsageDetails": null,
      "isAtmTransaction": false,
      "accountBalances": {
        "totalBalance": {
          "currency": "AUD",
          "amount": 5182.41
        },
        "heldBalance": {
          "currency": "AUD",
          "amount": 4114.8
        },
        "lockedBalance": {
          "currency": "AUD",
          "amount": 0
        },
        "stacksBalance": {
          "currency": "AUD",
          "amount": 0
        },
        "availableBalance": {
          "currency": "AUD",
          "amount": 1067.61
        },
        "legacyAvailableBalance": {
          "currency": "AUD",
          "amount": 1067.61
        }
      },
      "cardHayId": null,
      "customerHayId": "c1ce15ef-9ee0-41ed-a562-f7b59ad70acb",
      "ruleDetails": null,
      "counterpartDetails": {
        "name": "Romar Viduya",
        "bpayDetails": null,
        "basicAccountNumber": {
          "accountNumber": "123441287",
          "branchNumber": "111985"
        }
      },
      "originId": null,
      "originType": null,
      "counterpartName": "Romar Viduya",
      "merchantName": null,
      "category": "Shaype POC",
      "merchantId": null,
      "relatedHoldHayId": null,
      "description": "Romar",
      "mandatePaymentDetails": null,
      "returnReason": null
    },
    "cardStatusChangeEvent": null,
    "customerDetailsChangeEvent": null,
    "cardAdditionToWalletEvent": null,
    "reminderType": null,
    "scheduledPaymentEvent": null,
    "onboardingFailedEvent": null,
    "directEntryEvent": null,
    "mandateDuePaymentEvent": null,
    "mandateEvent": null,
    "mandatePaymentEvent": null,
    "applePayRewardForCustomerEvent": null,
    "cardExpiryReminderEvent": null,
    "mandateActionExpirationEvent": null
}
{
    "customerHayId": "c1ce15ef-9ee0-41ed-a562-f7b59ad70acb",
    "idempotencyKey": "f1f2d7e6-e398-4638-adf1-29b87013ad10",
    "type": "TRANSACTION",
    "firebaseDeviceToken": null,
    "actionOwner": null,
    "cardHayId": null,
    "accountStatusChangeEvent": null,
    "customerStatusUpdatedEvent": null,
    "transactionEvent": {
      "transactionHayId": "d1db4bea-650c-44db-b55e-b1473ccaaf99",
      "accountHayId": "b1b1ce0d-1a05-4bbf-9af2-4c4aaa7474a3",
      "currencyAmount": {
        "currency": "AUD",
        "amount": 212.38
      },
      "updatedBalance": {
        "currency": "AUD",
        "amount": 267.61
      },
      "isPending": false,
      "outcome": "ACCEPTED",
      "transactionTimeUtc": "2024-06-12T07:16:41.370341Z",
      "cardPreferenceOutcome": null,
      "cardProcessorResponse": null,
      "transactionType": "INTERBANK_TRANSFER_OUT",
      "cardUsageDetails": null,
      "isAtmTransaction": false,
      "accountBalances": {
        "totalBalance": {
          "currency": "AUD",
          "amount": 267.61
        },
        "heldBalance": {
          "currency": "AUD",
          "amount": 0
        },
        "lockedBalance": {
          "currency": "AUD",
          "amount": 0
        },
        "stacksBalance": {
          "currency": "AUD",
          "amount": 0
        },
        "availableBalance": {
          "currency": "AUD",
          "amount": 267.61
        },
        "legacyAvailableBalance": {
          "currency": "AUD",
          "amount": 267.61
        }
      },
      "cardHayId": null,
      "customerHayId": null,
      "ruleDetails": null,
      "counterpartDetails": {
        "name": "Romar Viduya",
        "bpayDetails": null,
        "basicAccountNumber": {
          "accountNumber": "123441287",
          "branchNumber": "111985"
        }
      },
      "originId": null,
      "originType": null,
      "counterpartName": "Romar Viduya",
      "merchantName": null,
      "category": "BANK_TRANSFER",
      "merchantId": null,
      "relatedHoldHayId": null,
      "description": "Romar",
      "mandatePaymentDetails": null,
      "returnReason": {
        "code": "CUSTOMER_REQUEST",
        "message": "Return of funds requested by end customer"
      }
    },
    "cardStatusChangeEvent": null,
    "customerDetailsChangeEvent": null,
    "cardAdditionToWalletEvent": null,
    "reminderType": null,
    "scheduledPaymentEvent": null,
    "onboardingFailedEvent": null,
    "directEntryEvent": null,
    "mandateDuePaymentEvent": null,
    "mandateEvent": null,
    "mandatePaymentEvent": null,
    "applePayRewardForCustomerEvent": null,
    "cardExpiryReminderEvent": null,
    "mandateActionExpirationEvent": null
  }

INTERBANK_TRANSFER_IN

  • You will receive this event when customer account receives funds from an external bank.
  • The notification transactionType: INTERBANK_TRANSFER_IN is a part of type: TRANSACTION event.
{
  "customerHayId": "61f3d1d3-78e1-4da4-ab8f-faa13546ab8f",
  "idempotencyKey": "b98b9584-a296-40db-8a52-faa13546ab8f",
  "type": "TRANSACTION",
  "productId": "8aa686b7-7c36-e802-017c-faa13546ab8f",
  "transactionEvent": {
    "transactionHayId": "f416825e-17d0-4366-acba-faa13546ab8f",
    "accountHayId": "0285c377-bdf8-461e-a885-faa13546ab8f",
    "currencyAmount": {
      "currency": "AUD",
      "amount": 200.00
    },
    "updatedBalance": {
      "currency": "AUD",
      "amount": 62925.58
    },
    "isPending": false,
    "counterpartName": "Andy",
    "outcome": "ACCEPTED",
    "transactionTimeUtc": "2024-06-12T07:21:54.220527Z",
    "isAtmTransaction": false,
    "transactionType": "INTERBANK_TRANSFER_IN",
    "accountBalances": {
      "totalBalance": {
        "currency": "AUD",
        "amount": 66049.69
      },
      "heldBalance": {
        "currency": "AUD",
        "amount": 3124.11
      },
      "lockedBalance": {
        "currency": "AUD",
        "amount": 0
      },
      "stacksBalance": {
        "currency": "AUD",
        "amount": 0
      },
      "availableBalance": {
        "currency": "AUD",
        "amount": 62925.58
      }
    },
    "counterpartDetails": {
      "name": "Andy"
    },
    "category": "BANK_TRANSFER",
    "description": "withdrawal"
  }
}

INTERBANK_TRANSFER_OUT

  • You will receive this event when customer account sends fund to external bank.
  • The notification transactionType: INTERBANK_TRANSFER_OUT is a part of type: TRANSACTION event.
{
  "customerHayId": "58b86c08-d2b4-4f1d-a7fc-fcd1aeb6a7fc",
  "idempotencyKey": "54b7383a-0b68-4757-9e96-fcd1aeb6a7fc",
  "type": "TRANSACTION",
  "firebaseDeviceToken": "eQwhRSuQkWk:APA91bE4E2fcd2mpB_CkHNukNSESigu3fK_vDaVqvzXu0K_1z_aHZPfGyD5IouQFhArUe_S0BIb5QYwnilRnTubAfO1Q_fcd1aeb6a7fc",
  "productId": "8aa686b7-7c36-e802-017c-fcd1aeb6a7fc",
  "transactionEvent": {
    "transactionHayId": "90f90c57-a85e-4a2f-b444-fcd1aeb6a7fc",
    "accountHayId": "9ea48b15-474c-4276-bf90-fcd1aeb6a7fc",
    "currencyAmount": {
      "currency": "AUD",
      "amount": -0.01
    },
    "updatedBalance": {
      "currency": "AUD",
      "amount": 9568.52
    },
    "isPending": false,
    "counterpartName": "Andy",
    "outcome": "ACCEPTED",
    "transactionTimeUtc": "2024-06-12T07:31:58.77028Z",
    "isAtmTransaction": false,
    "transactionType": "INTERBANK_TRANSFER_OUT",
    "accountBalances": {
      "totalBalance": {
        "currency": "AUD",
        "amount": 9568.52
      },
      "heldBalance": {
        "currency": "AUD",
        "amount": 0
      },
      "lockedBalance": {
        "currency": "AUD",
        "amount": 0
      },
      "stacksBalance": {
        "currency": "AUD",
        "amount": 0
      },
      "availableBalance": {
        "currency": "AUD",
        "amount": 9568.52
      }
    },
    "customerHayId": "58b86c08-d2b4-4f1d-a7fc-fcd1aeb6a7fc",
    "counterpartDetails": {
      "name": "Andy",
      "basicAccountNumber": {
        "accountNumber": "12345000",
        "branchNumber": "518900"
      }
    },
    "category": "BANK_TRANSFER",
    "description": "Trip expenses"
  }
}