openapi: 3.2.0 info: title: PayTo Payments API description: "“PayTo” is a new digital payments service that allows NPP-enabled account holders to digitally pre-authorise one-off or recurring real-time payments from their bank account. This swagger document lists APIs for PayTo agreement creation, management and payment initiation. \n\n**Changes in 1.4 version**\n\n\n\nEnriching timestamp fields to include microseconds information - ”created_at” and ”updated_at” fields returned via our API & web hook notifications (agreement and payto payments payloads) will include microseconds in the timestamp. \n\nRevised timestamp format example - 2023-08-10 09:03:16.045622 \n\nError code updates - \n\n **Validate PayTo Agreement API:** \n- Added new error codes - PAYT-ERR-2029, PAYT-ERR-2030, PAYT-ERR-2031 \n- Removed error codes - PAYT-ERR-2026, PAYT-ERR-2024 \n\n **Amend PayTo Agreement Details API:** \n- Added new error codes - PAYT-ERR-2321, PAYT-ERR-2322 \n- Removed error codes - PAYT-ERR-2310, PAYT-ERR-2312 \n\n **Initiate PayTo Payment API:** \n- Added new error code - PAYT-ERR-2526\n\n\n**Changes in 1.3 version**\n\n\n**Payment Amount Validations:** \n\nZai will perform additional payment request compliance checks. This is to help minimise non-compliant payment requests. It is essential to continue to ensure PayTo payment requests are made according to the specified amounts, day/time, frequency, and with all other terms specified in the PayTo Agreement. \n\nPayment amount-related verifications will be performed for: \n- Usage and Variable Agreements: the payment requested must be within the maximum amount field and the amount field (which acts as the minimum amount field) i.e., if the agreement amount is between $50 and $75, the payment instruction amount must be within this range. \n\n Note - Consider specifying a maximum and minimum value amount, as the payment amount can differ each time. These limits may provide clarity for the end-customer and may minimise the probability of them receiving a warning message from their bank. \n- Fixed Agreements: payments initiated must match the agreed amount; i.e., if the agreement amount is $50, the payment instruction amount must also be $50 \n- Balloon Agreements: the fixed and final payment amounts will be checked. The final amount must be equal to or greater than the fixed amount. If it’s not, the payment request will be rejected. i.e., the agreement amount is $1,200 over 10 payments (9 fixed and 1 final payments) the fixed amount could be $100, and the final amount $300. \n\nRelevant error messages have also been added as part of this release around rejecting payments that are not compliant as per amount specified in the agreement.\n\n\n**Changes in 1.2 version**\n\n\n **New APIs:** \n- Get all PayTo Agreements for a user - This API lists all PayTo agreements associated with a particular user. If needed, the results can be filtered to list agreements for a particular status or for a particular type (AUPM/MGCR). \n- Get all PayTo Payment Initiation Requests for an agreement - This API lists all payment requests initiated for an agreement. If needed, the results can be filtered to list requests for a particular status. \n- Recall PayTo Agreement - If a custom expiry duration (anything less than 5 days) has been specified for an agreement creation/amendment request and if the debtor has not responded within the specified timeframe, this API should be used to recall such pending authorisation requests. Post successful recall, the request is considered cancelled and hence cannot be actioned by the debtor. \n\n Note - Agreement creation or Bilateral agreement amendments trigger authorisation requests waiting approval from debtor, which can be recalled via this API, if needed.\n\n **Validate PayTo Agreement API:** \n- New Optional Field: response_requested_by -> This field should be used to specify a custom expiry duration i.e. if the debtor authorisation request needs to be limited to any short duration which is less than the default duration of 5 days. \n- Updated Field Description: agreement_info.debtor_info.debtor_details.debtor_reference -> If end to end Id is not provided in the payment initiation request, then the debtor reference (if provided) in the agreement will be used as end to end identifier for the payments initiated via the agreement.\n\n **Initiate PayTo Payment API:** \n- Updated Field Description: payment_info.end_to_end_id -> If end to end Id is not provided in the payment initiation request, then the debtor reference (if provided) in the agreement will be used as end to end identifier for the payments initiated via the agreement. If debtor reference is also not available, default value “NOTPROVIDED” will set as end to end id for the payment initiation request.\n\n\n**Changes in 1.1 version**\n\n\n **Validate PayTo Agreement API:** \n- Support open ended agreements - For Adhoc frequency, providing point_in_time or count_per_period info is optional. \n- Reformatting debtor account number - During the agreement validation step, Zai may reformat the debtor account number as per the format expected by the payer institutions. Reformatted debtor account number can be accessed either via GET PayTo Agreement Details API after the validation step or via WAPI notification sent by Zai after successful agreement creation step.\n\n **Amend PayTo Agreement Details API:** \n- Ability to clear optional fields if needed using hyphen (-) character.\n\n **Amend PayTo Agreement Status API:** \n- Allow agreement status amendments even if a bilateral amendment is in progress. Example - If agreement details amendment is in progress, it should be possible to pause/suspend the agreement if needed.\n\n **Get PayTo Agreement Details API:** \n- New fields - Status reason code and Status reason description have been added in response. These fields will provide more details for suspended or cancelled agreements.\n\n **Get PayTo Payment Details API:** \n- New fields - Status reason code and Status reason description have been added in response. These fields will provide more details for rejected payments.\n\n **Misc:** \n- Agreement purpose codes have been elaborated to clarify the usage for each type. \n- Status descriptions returned in the GET APIs have been improved to provide more details about the current agreement status. \n- PAYT-ERR-2201, PAYT-ERR-2301 - error descriptions have been updated. \n- PAYT-ERR-2318 - added new error code along with description.\n" contact: name: Zai url: https://developer.hellozai.com/reference/overview email: support@hellozai.com version: 1.4-external servers: - url: ' https://au-0000.api.assemblypay.com/payto/' description: Production server and API - url: https://sandbox.au-0000.api.assemblypay.com/payto/ description: Sandbox (Pre-live) server and API - url: https://virtserver.swaggerhub.com/AssemblyPlatforms/PayTo/1.4-external description: SwaggerHub API Auto Mocking tags: - name: PayTo Payments description: Payment Initiation APIs paths: /agreements/{agreement_uuid}/payment_requests/initiate: post: tags: - PayTo Payments summary: Initiate PayTo Payment description: "This endpoint is to initiate a payment to collect funds from the debtor's account or to retry if the previous payment collection request was rejected due to valid business reasons.\nThis API should be invoked strictly as per the terms and conditions established in the agreement to avoid payment claims. Even the retries should be attempted as per the agreement terms and conditions.\n\n Payment initiation request statuses -\n- PENDING_PAYMENT_INITIATION - when the payment initiation request has been accepted for processing \n- PAYMENT_INITIATED - when the payment initiation request is being processed \n- PAYMENT_INITIATION_COMPLETED - when the payment initiation request is cleared and settled successfully. Funds can be expected in the user's wallet soon \n- PAYMENT_INITIATION_REJECTED - when the payment initiation request is rejected for processing due to validation, funds not available in the debtor's account or any other \nbusiness reason. A retry can be performed in such scenarios \n\nIf the payment collection request has been rejected due to valid business reasons (example - insufficient funds), a retry can be attempted for the same.\n\nPayment_request_uuid generated will be the same for the payment collection request and all subsequent retry attempts, however, instruction_id differs for each.\n\nNote - If Payment initiated on the agreement validity end date fails, it will not be possible to retry or initiate again on the following date as the agreement will be marked as CANCELLED automatically after the agreement validity_end_date. Hence, it is recommended to initiate the last payment few days before the agreement validity end date to cater for retries needed if any." operationId: initiatePaymentRequest parameters: - name: agreement_uuid in: path required: true schema: type: string example: d0c40d95-95b7-449b-9835-3c97c0386585 requestBody: content: application/json: schema: $ref: '#/components/schemas/InitiatePaymentRequest' required: true responses: '401': description: "Unauthorised \n
Error CodeError Message
PAYT-ERR-1000Invalid or missing authorisation token.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-1000 error_message: Invalid or missing authorisation token. '403': description: "Forbidden \n
Error CodeError Message
PAYT-ERR-1001PayTo feature not available.
PAYT-ERR-1002Request rejected: User associated with the agreement is not active.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-1001 error_message: PayTo feature not available. '400': description: "Bad Request \n \n
Error CodeError Message
PAYT-ERR-1050Mandatory info missing: [FieldName] cannot be null or empty.
PAYT-ERR-1051Invalid Data: [FieldName] provided is invalid.
PAYT-ERR-1052Invalid Data: [FieldName] provided should contain any of the values [Acceptable values].
PAYT-ERR-1053Invalid Data: [FieldName] provided is invalid. Expected format [DateFormat].
PAYT-ERR-1054Invalid Data: [FieldName] length is invalid. Expected minimum [MinLength] and maximum [MaxLength].
PAYT-ERR-1057Unrecognized Field: [FieldName] is not a valid field.
PAYT-ERR-1058Invalid Request: request provided is not well-formatted.
PAYT-ERR-2501Payments can be initiated for ACTIVE agreements only.
PAYT-ERR-2502Payments can be initiated only within the agreement validity period.
PAYT-ERR-2510unique_superannuation_code is mandatory along with unique_superannuation_identification.
PAYT-ERR-2512Payment requested for this agreement has been cleared and settled already. Please check the latest status before requesting again.
PAYT-ERR-2513Request rejected: Exceeded the maximum retry attempts allowed for the agreement.
PAYT-ERR-2514Request rejected: Please ensure the payment is retried within valid period.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-2501 error_message: Payments can be initiated for ACTIVE agreements only. - error_code: PAYT-ERR-2502 error_message: Payments can be initiated only within the agreement validity period. '404': description: "Not Found \n
Error CodeError Message
PAYT-ERR-2500Agreement with provided uuid does not exist.
PAYT-ERR-2511Payment request with provided uuid does not exist.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-2500 error_message: Agreement with provided uuid does not exist. '409': description: "Conflict \n
Error CodeError Message
PAYT-ERR-2516A payment is already in progress for the agreement. Please try again if the current payment request is unsuccessful.
PAYT-ERR-2517Invalid request: Payment has been rejected already and cannot be retried. Please check reason code details.
PAYT-ERR-2518For migrated agreements, payment request with value exceeding $5,000 AUD cannot be initiated. Please consider splitting the amount in multiple requests OR create a new agreement if the payment value needs to be beyond $5,000 AUD in a single request.
PAYT-ERR-2519For the last payment, the instructed amount in the payment should match the last payment terms in the agreement. Please initiate payments as per the agreement’s payment terms.
PAYT-ERR-2520For the first payment, the instructed amount in the payment should match the first payment terms in the agreement. Please initiate payments as per the agreement’s payment terms.
PAYT-ERR-2521For FIXE agreement type, the instructed amount in the payment should match the payment amount stated in the agreement. Please initiate payments as per the agreement’s payment terms.
PAYT-ERR-2522For BALN agreement type, the instructed amount in the payment should match the payment amount stated in the agreement. Please initiate payments as per the agreement’s payment terms.
PAYT-ERR-2523For BALN agreement types, the instructed amount in the payment should be either the same or greater than the payment amount stated in the agreement. Please initiate payments as per the agreement’s payment terms.
PAYT-ERR-2524For USGB/VARI agreement types, the instructed amount in the payment should be within the payment amount (min) and maximum amount range stated in the agreement. Please initiate payments as per the agreement’s payment terms.
PAYT-ERR-2525For USGB/VARI agreement types, the instructed amount in the payment should be either the same or greater than the payment amount stated in the agreement. Please initiate payments as per the agreement’s payment terms.
PAYT-ERR-2526For USGB/VARI agreement types, the instructed amount in the payment should be either the same or less than the maximum amount stated in the agreement. Please initiate payments as per the agreement's payment terms.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-2516 error_message: A payment is already in progress for the agreement. Please try again if the current payment request is unsuccessful. '500': description: "Internal Server Error \n
Error CodeError Message
PAYT-ERR-1003An error occurred processing your request. Please try again.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-1003 error_message: An error occurred processing your request. Please try again. '202': description: Accepted content: application/json: schema: $ref: '#/components/schemas/InitiatePaymentResponse' security: - bearerAuth: [] /payment_requests/{payment_request_uuid}: get: tags: - PayTo Payments summary: Get PayTo Payment Initiation Request Details description: "This operation is to retrieve details of an initiated payment request. This API should be invoked to know the latest status of the payment initiation request if needed.\n\n Payment initiation request statuses which will be returned via this endpoint -\n- PENDING_PAYMENT_INITIATION - when the payment initiation request has been accepted for processing \n- PAYMENT_INITIATED - when the payment initiation request is being processed \n- PAYMENT_INITIATION_COMPLETED - when the payment initiation request is cleared and settled successfully. Funds can be expected in the user's wallet soon \n- PAYMENT_INITIATION_REJECTED - when the payment initiation request is rejected for processing due to validation, funds not available in the debtor's account or any other \nbusiness reason. A retry can be performed in such scenarios" operationId: getInitiatePaymentStatus parameters: - name: payment_request_uuid in: path required: true schema: type: string example: g0h40f95-95b7-449b-9835-3c97c0394857 responses: '401': description: "Unauthorised \n
Error CodeError Message
PAYT-ERR-1000Invalid or missing authorisation token.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-1000 error_message: Invalid or missing authorisation token '403': description: "Forbidden \n
Error CodeError Message
PAYT-ERR-1001PayTo feature not available.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-1002 error_message: PayTo Feature not available '404': description: "Not Found \n
Error CodeError Message
PAYT-ERR-2600Payment request with provided uuid does not exist.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-2600 error_message: Payment request with provided uuid does not exist '200': description: Ok content: application/json: schema: $ref: '#/components/schemas/InitiatePaymentStatusResponse' '500': description: "Internal Server Error \n
Error CodeError Message
PAYT-ERR-1003An error occurred processing your request. Please try again.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-1003 error_message: An error occurred processing your request. Please try again. security: - bearerAuth: [] /agreements/{agreement_uuid}/payment_requests: get: tags: - PayTo Payments summary: Get All PayTo Payment Initiation Requests for an Agreement description: "This operation is to retrieve all payment requests initiated for an agreement in the provided period (date range). Payment requests for a period of maximum one year or less than it can be retrieved at a time.\n\n By default, all payment initiation requests (along with details) irrespective of the status will be listed via this endpoint. However, the results can be filtered based on status(es) if needed.\n\nRequest parameter descriptions:\n\n - status - List of valid agreement statuses. Example - Retrieve active and suspended payments only.\n - Valid values - PENDING_PAYMENT_INITIATION, PAYMENT_INITIATED, PAYMENT_INITIATION_COMPLETED, PAYMENT_INITIATION_REJECTED\n - start_date - Date range start, example - fetch all payments created between June to December 2022.\n - end_date - Date range end, example - fetch all payments created between June to December 2022.\n - size - Number of payments per page. Default value is 20.\n - page - Page number. Default value is 0." operationId: getInitiatePaymentStatusList parameters: - name: agreement_uuid in: path required: true schema: type: string example: d0c40d95-95b7-449b-9835-3c97c0386585 - name: start_date in: query required: true schema: type: string example: '2021-11-10' - name: end_date in: query required: true schema: type: string example: '2022-11-10' - name: status in: query required: false schema: type: array items: type: string enum: - PAYMENT_INITIATED - PENDING_PAYMENT_INITIATION - PAYMENT_INITIATION_COMPLETED - PAYMENT_INITIATION_REJECTED enum: - PAYMENT_INITIATED - PENDING_PAYMENT_INITIATION - PAYMENT_INITIATION_COMPLETED - PAYMENT_INITIATION_REJECTED - name: size in: query required: false schema: type: integer format: int32 default: 20 - name: page in: query required: false schema: type: integer format: int32 default: 0 responses: '401': description: "Unauthorised \n
Error CodeError Message
PAYT-ERR-1000Invalid or missing authorisation token.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-1000 error_message: Invalid or missing authorisation token. '200': description: Ok content: application/json: schema: $ref: '#/components/schemas/InitiatePaymentListResponse' '400': description: "Bad Request \n \n \"
Error CodeError Message
PAYT-ERR-1058Invalid Request: Failed to read the request.
PAYT-ERR-1052Invalid Data: [FieldName] provided should contain any of the values [Acceptable values].
PAYT-ERR-1053Invalid Data: [FieldName] provided is invalid. Expected format [DateFormat].
PAYT-ERR-2601Invalid Date Range: Start date should be before end date.
PAYT-ERR-2602Invalid Date Range: Range provided should be less than or maximum upto a year.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-2601 error_message: 'Invalid Date Range: Start date should be before end date.' '500': description: "Internal Server Error \n
Error CodeError Message
PAYT-ERR-1003An error occurred processing your request. Please try again.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-1003 error_message: An error occurred processing your request. Please try again. '403': description: "Forbidden \n
Error CodeError Message
PAYT-ERR-1001PayTo feature not available.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-1001 error_message: PayTo feature not available. '404': description: "Not Found \n
Error CodeError Message
PAYT-ERR-2400Agreement with provided uuid does not exist.
" content: application/json: schema: $ref: '#/components/schemas/PayToErrorResponse' example: errors: - error_code: PAYT-ERR-2400 error_message: Agreement with provided uuid does not exist. security: - bearerAuth: [] components: schemas: RetryInformation: type: object properties: payment_request_uuid: maxLength: 36 minLength: 36 pattern: ^([a-zA-Z0-9_-]){36}$ type: string description: Unique identifier for the payment request (in UUID format) for which the retry is being attempted. example: d0c40d95-95b7-449b-9835-3c97c0386585 description: "Retry information should be provided only if the payment request was rejected previously due to business reasons and a retry for the same is being attempted.\n \n **Property descriptions**: \n \n- **payment_request_uuid** - Unique identifier for the payment request (in UUID format) for which the retry is being attempted." RetryAttempts: type: object properties: count: type: integer description: Retries count. format: int32 example: 1 retry_info: type: array description: Retry info for initiate payment. items: $ref: '#/components/schemas/RetryInfo' description: "List of retry attempts for the payment request. \n \n **Property descriptions**: \n\n- **count** - Payment retry count. \n\n- **retry_info** - Payment information for each retry attempt, listed in descending order of retry attempts." InitiatePaymentListResponse: type: object properties: total_count: type: integer description: Total number of initiate payments available format: int64 example: 1 initiate_payment_status_responses: type: array description: List of Initiate Payment requests. items: $ref: '#/components/schemas/InitiatePaymentStatusResponse' description: "List of Initiate Payment Status details. \n" InitiatePaymentResponse: type: object properties: payment_request_uuid: maxLength: 36 minLength: 36 type: string description: Unique identifier for the payment request in UUID format. example: d0c40d95-95b7-449b-9835-3c97c0386585 agreement_uuid: maxLength: 36 minLength: 36 type: string description: Unique agreement identifier. example: d0c40d95-95b7-449b-9835-3c97c0386585 instruction_id: maxLength: 35 minLength: 1 type: string description: Unique identifier for the payment request generated as per NPPA guidelines. example: BANKNTSTXXXI20180501000000000000010 status: title: Status type: string description: Payment initiation request statuses:
CodeDescription
PENDING_PAYMENT_INITIATIONPayment request is pending for initiation.
PAYMENT_INITIATION_REJECTEDPayment request is rejected.
example: PENDING_PAYMENT_INITIATION enum: - PENDING_PAYMENT_INITIATION - PAYMENT_INITIATION_REJECTED created_at: type: string description: Payment request creation date in UTC format. example: '2022-03-21 16:25:00.190831' updated_at: type: string description: Payment request modification date in UTC format. example: '2022-03-21 16:25:00.190831' agreement_id: type: string description: Unique agreement identifier generated by NPPA. example: ef0fcd9799431ef783204966f010603c PaymentInformation: required: - instructed_amount - last_payment type: object properties: instructed_amount: maxLength: 19 minLength: 1 pattern: ^(?=.{1,19}$)[1-9]{1}[0-9]{0,18}$ type: string description: 'Specifies an amount in cents. Specifies the amount to be debited the from debtor''s bank account before deduction of charges.' example: '1000' last_payment: type: boolean description: 'Indicates a "Yes" or "No" type of answer for an element. Indicates that it is the last payment associated with the agreement. Post this, the agreement will be marked as CANCELLED automatically and no further payments can be requested on this agreement.' default: false end_to_end_id: maxLength: 35 minLength: 1 pattern: ^([a-zA-Z0-9_-]){1,35}$ type: string description: 'Specifies a character string with a maximum length of 35 characters. Unique identification to unambiguously identify the payment. This identification is passed on, unchanged, throughout the entire end-to-end chain. It is recommended to provide this identifier which can be passed between entities to identify the payment during queries/investigations if any. If not provided, debtor reference (if available) from the agreement will be populated. If none available, default value "NOTPROVIDED" will be populated in the payment initiation request.' example: 0h40f9595b7449b98353c97c039485 remittance_info: maxLength: 280 minLength: 1 type: string description: 'Specifies a character string with a maximum length of 280 characters. Free text field to provide any narrative for the payment.' example: Remittance Info unique_superannuation_id: maxLength: 35 minLength: 1 type: string description: 'Specifies a character string with a maximum length of 35 ASCII printable characters. For agreements created with PURPOSE_CODE = PENS (pension payments), this should be the USI number for the superannuation fund.' example: unique superannuation id unique_superannuation_code: maxLength: 35 minLength: 1 type: string description: 'Specifies a character string with a maximum length of 35 ASCII printable characters. For agreements created with PURPOSE_CODE = PENS (pension payments), this should be the USI - code indicating the identifier to whom the superannuation fund will be provided.' example: unique superannuation code description: "Payment request details.\n \n **Property descriptions**: \n \n - **instructed_amount** - Specifies the amount to be debited the from debtor's bank account before deduction of charges.\n- **last_payment** - Indicates that it is the last payment associated with the agreement. Post this, the agreement will be marked as CANCELLED automatically and no further payments can be requested on this agreement.\n- **end_to_end_id** - Unique identification to unambiguously identify the payment. This identification is passed on, unchanged, throughout the entire end-to-end chain. It is recommended to provide this identifier which can be passed between entities to identify the payment during queries/investigations if any. If not provided, debtor reference (if available) from the agreement will be populated. If none available, default value \"NOTPROVIDED\" will be populated in the payment initiation request.\n- **remittance_info** - Free text field to provide any narrative for the payment. \n\n- **unique_superannuation_code** - For agreements created with PURPOSE_CODE = PENS (pension payments), this should be the USI number for the superannuation fund.\n- **unique_superannuation_id** - For agreements created with PURPOSE_CODE = PENS (pension payments), this should be the USI - code indicating the identifier to whom the superannuation fund will be provided. \n\n **The following rules apply to this structure**: \n\n - **UniqueSuperannuationRule** Both unique_superannuation_code and unique_superannuation_id must be present or both fields must be absent. " PaymentInfo: type: object properties: instruction_id: type: string description: Unique identifier for each payment and retry request generated as per NPPA guidelines. example: BANKNTSTXXXI20180501000000000000010 instructed_amount: type: string description: Specifies an amount in cents example: '1000' last_payment: type: boolean description: Indicates a "Yes" or "No" type of answer for an element. default: false end_to_end_id: type: string description: Specifies a character string with a maximum length of 35 characters. remittance_info: type: string description: Specifies a character string with a maximum length of 280 characters. example: remittance info unique_superannuation_id: type: string description: Specifies a character string with a maximum length of 35 ASCII printable characters. example: uniqueSuperannuation id unique_superannuation_code: type: string description: Specifies a character string with a maximum length of 35 ASCII printable characters. example: uniqueSuperannuation code description: "Payment Request details.\n \n **Property descriptions**: \n \n- **instruction_id** - Unique identifier for the payment request generated as per NPPA guidelines. This identifier is used to identify the payment uniquely with NPPA and payer as well.\n- **instructed_amount** - Specifies the amount to be debited the from debtor's bank account before deduction of charges.\n- **last_payment** - Indicates that it is the last payment associated with the agreement. Post this, the agreement will be marked as CANCELLED automatically and no further payments can be requested on this agreement.\n- **end_to_end_id** - Unique identification to unambiguously identify the payment. This identification is passed on, unchanged, throughout the entire end-to-end chain. It is recommended to provide this identifier which can be passed between entities to identify the payment during queries/investigations if any. If not provided, debtor reference (if available) from the agreement will be populated. If none available, default value \"NOTPROVIDED\" will be populated in the payment initiation request.\n- **remittance_info** - Free text field to provide any narrative for the payment.\n- **unique_superannuation_code** - For agreements created with PURPOSE_CODE = PENS (pension payments), this should be the USI number for the superannuation fund.\n- **unique_superannuation_id** - For agreements created with PURPOSE_CODE = PENS (pension payments), this should be the USI - code indicating the identifier to whom the superannuation fund will be provided." ErrorDetails: type: object properties: error_code: type: string error_message: type: string RetryInfo: type: object properties: instruction_id: type: string description: Unique identifier for each payment and retry request generated as per NPPA guidelines. example: BANKNTSTXXXI20180501000000000000010 status: title: Status type: string description: Possible statuses for payment or retry requests:
CodeDescription
PAYMENT_INITIATION_REJECTEDPayment request is rejected.
enum: - PAYMENT_REJECTED status_description: type: string description: 'Free text field to provide description status:' example: status description status_reason_code: type: string description: Free text field to provide reason code: status_reason_description: type: string description: Free text field to provide reason description. example: reason description created_at: type: string description: Payment request creation date. example: '2022-03-21 16:25:00.312368' updated_at: type: string description: Payment request modification date. example: '2022-03-22 16:25:00.312368' payment_info: $ref: '#/components/schemas/PaymentInfo' description: "Payment information for each retry attempt. \n \n **Property descriptions**: \n \n- **instruction_id** - Unique identifier for the payment request generated as per NPPA guidelines. This identifier is used to identify the payment uniquely with NPPA and payer as well.\n- **status** - Current status of Initiate Payment Request.\n- **status_description** - Details/description for the status.\n - **created_at** - Date representation of the payment request creation.\n - **updated_at** - Date representation of the last update of the payment request.\n- **payment_info** - Payment info for payment request." InitiatePaymentStatusResponse: type: object properties: payment_request_uuid: type: string description: Unique identifier for the payment request in UUID format. example: d0c40d95-95b7-449b-9835-3c97c0386585 instruction_id: type: string description: Unique identifier for each payment and retry request generated as per NPPA guidelines. example: BANKNTSTXXXI20180501000000000000010 agreement_uuid: type: string description: Unique agreement identifier. example: d0c40d95-95b7-449b-9835-3c97c0386585 agreement_id: type: string description: Unique agreement identifier generated by NPPA. example: 00000000000010008000000000000000 status: title: Status type: string description: Possible statuses for payment or retry requests:
Reason CodeDescriptionRetry eligible
ClearingAndSettlementError An error occurred during clearing and settlement of the payment. Please retry the same payment again or contact Zai support.Yes
PayeeBankOffline Payee institution is offline. Please try again or contact Zai support.No
PayerAccountNumberInvalid Payer account details or PayID provided is invalid or does not exist within NPP. Please update the agreement with correct account details and try again.No
PayeeAccountNumberInvalid Payee account details provided is invalid or does not exist within NPP. Please try again or contact Zai support.No
PayerAccountClosed Payer account provided is closed. Please update the agreement with correct account details and try again.No
InsufficientFunds Payer account has insufficient funds at the moment. Please contact the payer and retry the same payment again after funds availability.Yes
BlockedAccount Account provided is temporarily blocked. Please retry the same payment again after some time or contact the payer.Yes
PayeeAccountClosed Payee account provided is closed. Please try again or contact Zai support.No
PayerAccountTypeInvalid Payer account type is invalid - unable to debit funds within NPP. Please update the agreement with correct account details and try again or contact the payer.No
PayeeAccountTypeInvalid Payee account type is invalid - unable to credit funds within NPP. Please try again or contact Zai support.No
UnexpectedError Unexpected error occurred while processing the payment initiation request. Please try again or contact Zai support.No
TransactionForbiddenOnPayerAccountEither the Payer account does not allow debits within NPP or agreement to debit the account is not active. Please update the agreement with correct account details and try again or contact the Payer.No
NPPTransactionNotSupported Payee institution has rejected the NPP payment from Payer institution. Please try again or contact Zai support.No
UnspecifiedReason Payment initiation request has been rejected by the Payer institution without any specified reason.Yes
RequestedByPayer Payment rejection has been requested by the Payer. Please contact the Payer or retry the same payment again.Yes
ClearingAndSettlementError An error occurred during clearing and settlement of the payment. Please retry the same payment again or contact Zai support.Yes
UndisclosedReason Payment has been rejected due to undisclosed reasons.No
RequestedByPayer-UnspecifiedReason Payment has been rejected by the Payer without any specified reason. Please retry the same payment again or contact the Payer.Yes
Prohibited Payment has been rejected as it is considered prohibited.No
RequestedByPayerBank-UnspecifiedReasonPayment has been rejected by the Payer institution without any specified reason. Please try again or contact the Payer institution.No
PayeeNotOnAllowlistOfPayer Payee not on the allowlist/trusted list of the Payer. Please try again or contact the Payer.No
PayeeOnBlocklistOfPayer Payee is blocked/blacklisted by the Payer. Please try again or contact the Payer.No
ExceedsMaxAllowedDirectDebitTransactions The payment request exceeds the maximum number of direct debit transactions allowed on the Payer account. Please retry the same payment again or contact the Payer.Yes
ExceedsMaxAllowedDirectDebitTransactionAmountThe payment amount requested exceeds the maximum amount that can be debited from the Payer account via direct debit. Please retry the same payment again or contact the Payer.Yes
UnexpectedError-RetrySamePayment Unexpected error occurred while processing the payment initiation request. Please retry the same payment again or contact Zai support.Yes
PayerUnavailable Payer institution is unavailable. Please retry the same payment again or contact the Payer.Yes
InvalidPayerPayID PayID details of the Payer are no longer valid. Please update the agreement with correct details and try again or contact the Payer.No
PayerBSBNotNPPReachable Payer BSB is not NPP reachable. Please update the agreement with correct details and try again or contact the Payer.No
PayerNotNPPReachable Payer is no longer reachable on NPP. Please try again or cancel the agreement.No
PayeeNotNPPReachable Payee is no longer reachable on NPP. Please try again or contact Zai support.No
IncorrectPayerPayID PayID details of the Payer are no longer valid as the PayID has been ported incorrectly. Please update the agreement with correct details and try again or contact the Payer.No
NotRetryEligible Retries are allowed only if the payment has been rejected with retry eligible rejection reasons.No
EndToEndIDInvalidOrMissing EndToEndID is either invalid or missing. Please correct the end to end id and retry the same payment again.Yes
Non-CompliantPayment Payment amount is not as per the agreed payment terms and conditions. Please correct the amount and retry the same payment again.Yes
NPPLimitExceeded Payment amount requested exceeds the agreed limits for the Payer account. Please correct the amount and retry the same payment again.Yes
UnrecognisedInitiatingParty The Payer has requested the payment rejection as the Initiating party is not recognised by them. Please try again or contact the Payer.No
UnknownPayer The payment has been rejected by the Payer institution as the Payer is not known as per records. Please try again or contact the Payer.No
PayeeBSBNotNPPReachable Payee BSB is not NPP reachable. Please try again or contact Zai support.No
PayerNameOrAddressDetailsMissing Payer name or address details are missing. Please update the agreement with complete Payer details and try again.No
PayeeNameOrAddressDetailsMissing Payee name or address details are missing. Please try again or contact Zai support.No
UnknownReason Payment has been rejected due to unknown reason.No
PayeeUnavailable Payee institution is unavailable. Please retry the same payment again or contact Zai support.Yes
PayerNameMissing Payer name is missing. Please update the agreement with complete Payer details and try again.No
UnsupportedCurrency Unable to debit funds in AUD from the provided Payer account.No
AmountExceedsMaxNPPLimit Payment amount either exceeds the maximum allowed NPP limit of $99,999,999,999 or maximum allowed NPP limit for the Payer account.No
CodeDescription
PENDING_PAYMENT_INITIATIONPayment request is pending for initiation.
PAYMENT_INITIATEDPayment request is initiated.
PAYMENT_INITIATION_COMPLETEDPayment request is completed.
PAYMENT_INITIATION_REJECTEDPayment request is rejected.
enum: - PENDING_PAYMENT_INITIATION - PAYMENT_INITIATED - PAYMENT_INITIATION_COMPLETED - PAYMENT_INITIATION_REJECTED status_description: type: string description: Free text field to provide description status example: status description status_reason_code: type: string description: Free text field to provide reason code:
Reason CodeDescriptionRetry eligible
ClearingAndSettlementError An error occurred during clearing and settlement of the payment. Please retry the same payment again or contact Zai support.Yes
PayeeBankOffline Payee institution is offline. Please try again or contact Zai support.No
PayerAccountNumberInvalid Payer account details or PayID provided is invalid or does not exist within NPP. Please update the agreement with correct account details and try again.No
PayeeAccountNumberInvalid Payee account details provided is invalid or does not exist within NPP. Please try again or contact Zai support.No
PayerAccountClosed Payer account provided is closed. Please update the agreement with correct account details and try again.No
InsufficientFunds Payer account has insufficient funds at the moment. Please contact the payer and retry the same payment again after funds availability.Yes
BlockedAccount Account provided is temporarily blocked. Please retry the same payment again after some time or contact the payer.Yes
PayeeAccountClosed Payee account provided is closed. Please try again or contact Zai support.No
PayerAccountTypeInvalid Payer account type is invalid - unable to debit funds within NPP. Please update the agreement with correct account details and try again or contact the payer.No
PayeeAccountTypeInvalid Payee account type is invalid - unable to credit funds within NPP. Please try again or contact Zai support.No
UnexpectedError Unexpected error occurred while processing the payment initiation request. Please try again or contact Zai support.No
TransactionForbiddenOnPayerAccountEither the Payer account does not allow debits within NPP or agreement to debit the account is not active. Please update the agreement with correct account details and try again or contact the Payer.No
NPPTransactionNotSupported Payee institution has rejected the NPP payment from Payer institution. Please try again or contact Zai support.No
UnspecifiedReason Payment initiation request has been rejected by the Payer institution without any specified reason.Yes
RequestedByPayer Payment rejection has been requested by the Payer. Please contact the Payer or retry the same payment again.Yes
UndisclosedReason Payment has been rejected due to undisclosed reasons.No
RequestedByPayer-UnspecifiedReason Payment has been rejected by the Payer without any specified reason. Please retry the same payment again or contact the Payer.Yes
Prohibited Payment has been rejected as it is considered prohibited.No
RequestedByPayerBank-UnspecifiedReasonPayment has been rejected by the Payer institution without any specified reason. Please try again or contact the Payer institution.No
PayeeNotOnAllowlistOfPayer Payee not on the allowlist/trusted list of the Payer. Please try again or contact the Payer.No
PayeeOnBlocklistOfPayer Payee is blocked/blacklisted by the Payer. Please try again or contact the Payer.No
ExceedsMaxAllowedDirectDebitTransactions The payment request exceeds the maximum number of direct debit transactions allowed on the Payer account. Please retry the same payment again or contact the Payer.Yes
ExceedsMaxAllowedDirectDebitTransactionAmountThe payment amount requested exceeds the maximum amount that can be debited from the Payer account via direct debit. Please retry the same payment again or contact the Payer.Yes
UnexpectedError-RetrySamePayment Unexpected error occurred while processing the payment initiation request. Please retry the same payment again or contact Zai support.Yes
PayerUnavailable Payer institution is unavailable. Please retry the same payment again or contact the Payer.Yes
InvalidPayerPayID PayID details of the Payer are no longer valid. Please update the agreement with correct details and try again or contact the Payer.No
PayerBSBNotNPPReachable Payer BSB is not NPP reachable. Please update the agreement with correct details and try again or contact the Payer.No
PayerNotNPPReachable Payer is no longer reachable on NPP. Please try again or cancel the agreement.No
PayeeNotNPPReachable Payee is no longer reachable on NPP. Please try again or contact Zai support.No
IncorrectPayerPayID PayID details of the Payer are no longer valid as the PayID has been ported incorrectly. Please update the agreement with correct details and try again or contact the Payer.No
NotRetryEligible Retries are allowed only if the payment has been rejected with retry eligible rejection reasons.No
EndToEndIDInvalidOrMissing EndToEndID is either invalid or missing. Please correct the end to end id and retry the same payment again.Yes
Non-CompliantPayment Payment amount is not as per the agreed payment terms and conditions. Please correct the amount and retry the same payment again.Yes
NPPLimitExceeded Payment amount requested exceeds the agreed limits for the Payer account. Please correct the amount and retry the same payment again.Yes
UnrecognisedInitiatingParty The Payer has requested the payment rejection as the Initiating party is not recognised by them. Please try again or contact the Payer.No
UnknownPayer The payment has been rejected by the Payer institution as the Payer is not known as per records. Please try again or contact the Payer.No
PayeeBSBNotNPPReachable Payee BSB is not NPP reachable. Please try again or contact Zai support.No
PayerNameOrAddressDetailsMissing Payer name or address details are missing. Please update the agreement with complete Payer details and try again.No
PayeeNameOrAddressDetailsMissing Payee name or address details are missing. Please try again or contact Zai support.No
UnknownReason Payment has been rejected due to unknown reason.No
PayeeUnavailable Payee institution is unavailable. Please retry the same payment again or contact Zai support.Yes
PayerNameMissing Payer name is missing. Please update the agreement with complete Payer details and try again.No
PayeeNameMissing Payee name is missing in the agreement. Please try again or contact Zai support.No
UnsupportedCurrency Unable to debit funds in AUD from the provided Payer account.No
AmountExceedsMaxNPPLimit Payment amount either exceeds the maximum allowed NPP limit of $99,999,999,999 or maximum allowed NPP limit for the Payer account.No
status_reason_description: type: string description: Free text field to provide reason description. example: reason description payment_reconciled: type: boolean description: Indicator to say whether the payment has been reconciled successfully on user's wallet or not. example: true created_at: type: string description: Payment request creation date. example: '2022-03-21 16:25:00.312368' updated_at: type: string description: Payment request modification date. example: '2022-03-22 16:25:00.312368' payment_info: $ref: '#/components/schemas/PaymentInfo' retry_attempts: $ref: '#/components/schemas/RetryAttempts' description: "Definition of PayTo Payment Details. \n\n **Property descriptions**: \n\n- **payment_request_uuid** - Unique identifier for the payment request in UUID format.\n- **instruction_id** - Unique identifier for the payment request generated as per NPPA guidelines. This identifier is used to identify the payment uniquely with NPPA and payer as well.\n- **agreement_uuid** - Unique agreement identifier.\n- **agreement_id** - Unique agreement identifier generated by NPPA.\n- **status** - Current status of the payment or retry request.\n- **status_description** - Details/description for the status.\n- **status_reason_code** - Reason code for the current payment initiation request status.\n- **status_reason_description** - Detailed description of the status reason code.\n- **payment_reconciled** - Indicator to say whether the payment has been reconciled successfully on user's wallet or not.\n - **created_at** - Date representation of the payment request creation.\n - **updated_at** - Date representation of the last update of the payment request.\n- **payment_info** - Payment information for the payment request.\n- **retry_attempts** - Payment information for all retry attempts." InitiatePaymentRequest: required: - payment_info - priority type: object properties: priority: title: Priority type: string description: "

Indicates payment processing priority. Supported values

\n
CodeDescription
ATTENDEDPayment marked as attended will be processed immediately and will be rejected if the responding participant is not available
UNATTENDEDPayments marked as unattended may not be processed immediately. In cases where the responding participant is not available, the payment will be stored for later processing and hence won’t be rejected
" example: ATTENDED enum: - ATTENDED - UNATTENDED payment_info: $ref: '#/components/schemas/PaymentInformation' retry_info: $ref: '#/components/schemas/RetryInformation' description: "Definition of the Initiate Payment request data.\n \n **Property descriptions**: \n \n- **priority** - Indicates payment processing priority.\n Supported values: \n\n - Attended: Payment marked as attended will be processed immediately and will be rejected if the responding participant is not available\n - Unattended: Payments marked as unattended may not be processed immediately. In cases where the responding participant is not available, the payment will be stored for later processing and hence won’t be rejected\n- **payment_info** - Payment info for payment request.\n- **retry_info** - Retry information should be provided only if the payment request was rejected previously due to business reasons and a retry for the same is being attempted." PayToErrorResponse: type: object properties: errors: type: array items: $ref: '#/components/schemas/ErrorDetails' securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT