• Prepaid

    In locale
  • Prepaid

    In locale

Fund Accounts

Account Transfers
Published on 20th August, 2021

In this section we will understand how fund flow works for Pre Paid Instrument (PPI) accounts.

  • The fintech transfers funds from its current account to the Fintech’s current account of the sponsor IFI (eg RBL, IDFC First Bank)
  • Zeta Ops verifies the fund transfer and increases the limit of the Fintech Funding A/c
  • Account holder adds money to his PPI account
  • Fintech Triggers an A2A transfer API to debit the VBO Funding account and credit the account holder’s account
Depending upon the sponsor bank for the PPI program, the fund flow may have variations.

APIs for RAH funding

Fusion provides the following set of APIs to perform different operations of Real Account Holder (RAH) funding.

  • Fund Account Holder Account

  • Retrieve the Account balance

  • Retrieve the Account transaction

  • Reverse Account Transaction

Fund Account Holder Account

Fusion supports IMPS and NEFT fund transfer modes. Each mode is defined by a unique identifier, transferCode, which must be passed in the request body of the /transfers endpoint. Contact Zeta to know the supported transfer codes.

Support for UPI fund transfer is coming soon.

To fund the account, use the /transfers endpoint and provide the values for the following keys in the request body, as shown below:

  • transferCode: Required. Code to specify the mode of fund transfer like IMPS and NEFT. Refer Transfer Codes for more details.

  • debitAccountID: Required. ID of the fintech’s account from where the funds will be transferred. A fintech account is provisioned during the onboarding.

  • creditAccountID: Required. ID of the Account Holder’s account to which the funds will be transferred.

Endpoint URI

POST/api/v1/ifi/{ifiID}/transfers

Input parameters

  • ifiID: Required. Unique identifier of the IFI.

  • Request id: Required.This identifier is used to identify a unique request

  • amount: Required. User needs to specify the amount that needs to be transferred. (In Paisa).

  • currency: Required. It shows the currency in which the money is transferred. (Length 16 characters).

  • transferCode: Required. Code to specify the mode of fund transfer like IMPS and NEFT.

  • debitAccountID: Required. Unique identifier of the fintech’s account from where the funds will be transferred. A fintech account is provisioned during the on-boarding.

  • creditAccountID: Required. Unique identifier of the Account Holder’s account to which the funds will be transferred.

  • transferTime: Optional. Time required to transfer funds.

  • remarks: Optional. Remark of the fund transfer.

Response parameters

  • Request id: This identifier is used to identify a unique request.

  • Transfer id: Unique identifier for the transaction. This will be used in case of reversals.

  • status: Status of the transfer. Value of this field can be Success/Failure

cURL Sample
Switch Theme
Expand More
Copy
curl -X POST \
https://fusion.preprod.zeta.in/api/v1/ifi/140827/transfers \
-H 'Content-Type: application/json' \
-H 'X-Zeta-AuthToken: {{AUTH_TOKEN}}' \
-d '{
"requestID": "8439e4b6-1b63-4a28-afa1-34206a44425a",
"amount": {
"currency": "INR",
"amount": 21
},
"transferCode": "ATLAS_P2M_AUTH",
"debitAccountID": "422782d2-adcd-49a6-bde1-eb0461a582ba",
"creditAccountID": "608332f5-2d31-4377-bf91-5492dda0f694",
"transferTime": 1574741608000,
"remarks": "Fund Account Holders account",
"attributes": {}
}
Code Copied
JSON Sample
Switch Theme
Expand More
Copy
{
"requestID": "8439e4b6-1b63-4a28-afa1-34206a44425a",
"transferID": "20191126041456390_3712_8439e4b6-1b63-4a28-afa1-34206a44425a",
"status": "SUCCESS"
}
Code Copied

Retrieve the Account balance

You can retrieve the balance of an account by passing accountID as a path parameter in the balance endpoint, as shown below:

Endpoint URI

GET/api/v1/ifi/{ifiID}/accounts/{accountID}/balance

Input parameters

  • ifiID: Required. Unique identifier of the IFI.

  • accountID: Required. Unique identifier of the Account whose balance is to be retrieved.

Samples

cURL Sample
Switch Theme
Expand More
Copy
curl -X GET \
'https://fusion.preprod.zeta.in/api/v1/ifi/140827/accounts/608332f5-2d31-4377-bf91-5492dda0f694/balance' \
-H 'X-Zeta-AuthToken: {{AUTH_TOKEN}}'
Code Copied
JSON Sample
Switch Theme
Expand More
Copy
{
"balance": 21,
"currency": "INR",
"lastTransactionID": "20191126041456390_3712_8439e4b6-1b63-4a28-afa1-34206a44425a",
"accountingType": "LIABILITY",
"headers": {}
}
Code Copied

Retrieve the Account transaction

In Fusion, a Transaction refers to any fund transfer from one account to another. To view transactions, pass accountID as a path parameter in the /transactions endpoint, as shown below. To get a paginated view, use pageSize and pageNumber query parameters.

Endpoint URI

GETapi/v1/ifi/{ifiID}/accounts/{accountID}/transactions

Input parameters

  • ifiID: Required. Unique identifier of the IFI.

  • accountID: Required. Unique identifier of the Account whose balance is to be retrieved.

Samples

cURL Sample
Switch Theme
Expand More
Copy
curl -X GET \
'https://fusion.preprod.zeta.in/api/v1/ifi/140827/accounts/608332f5-2d31-4377-bf91-5492dda0f694/transactions?pageSize=2&pageNumber=3' \
-H 'X-Zeta-AuthToken: {{AUTH_TOKEN}}'
Code Copied
JSON Sample
Switch Theme
Expand More
Copy
{
"accountTransactionList": [
{
"accountID": "97417dc9-a636-4cd1-b5b8-4951103403dc",
"transactionID": "20200113130528523_2615_FUSION-140827-9c1bae42-0610-4253-96c3-62af594d1bde-1578920727914",
"reversalTransactionIDs": [],
"previousBalance": 500,
"newBalance": 700,
"timestamp": 1578920728550,
"amount": 200,
"currency": "INR",
"recordType": "DEBIT",
"remarks": "TEST123",
"attributes": {
"account.pd-id": "8892149590596675137",
"zeta.card-program-id": "",
"debitAuthSignatory": "[\"[email protected]/1\"]",
"aura.coa-id": "3071036307140878880",
"account.pf-id": "558731570586644109",
"bundle.name": "Customer bundle (minKYC without PAN)",
"policies": "{}",
"account.account-holder-id": "b9988179-9a74-41f5-aba4-0b85e501fd68",
"journal.voucherCode": "ATLAS_P2M_AUTH",
"journal.self": "false",
"zeta.card-program-ids": "",
"aura.parent-node-id": "1159171505324535297",
"isForced": "false",
"payment.captured": "true",
"account.account_holder.account_holder_provider_id": "862bb162-b5ad-4112-9d73-bb2306546a36",
"zeta.ifi": "140827",
"zeta.ppi-type": "OPEN",
"zeta.product-type": "Generic",
"zeta.ifi-product-type": "GPR_MIN_KYC_WITHOUT_PAN",
"athena.account-provider-id": "a36ac47b-c2a2-406c-b6a0-f8857fc5f735",
"zeta.business-id": "140827"
},
"headers": {}
},
{
"accountID": "97417dc9-a636-4cd1-b5b8-4951103403dc",
"transactionID": "20200113130414238_1671_FUSION-140827-9c1bae42-0610-4253-96c3-62af594d1bde-1578920654203",
"reversalTransactionIDs": [],
"previousBalance": 891,
"newBalance": 711,
"timestamp": 1578920654269,
"amount": 180,
"currency": "INR",
"recordType": "DEBIT",
"remarks": "TEST123",
"attributes": {
"account.pd-id": "8892149590596675137",
"zeta.card-program-id": "",
"debitAuthSignatory": "[\"[email protected]/1\"]",
"aura.coa-id": "3071036307140878880",
"account.pf-id": "558731570586644109",
"bundle.name": "Customer bundle (minKYC without PAN)",
"policies": "{}",
"account.account-holder-id": "b9988179-9a74-41f5-aba4-0b85e501fd68",
"journal.voucherCode": "ATLAS_P2M_AUTH",
"journal.self": "false",
"zeta.card-program-ids": "",
"aura.parent-node-id": "1159171505324535297",
"isForced": "false",
"payment.captured": "true",
"account.account_holder.account_holder_provider_id": "862bb162-b5ad-4112-9d73-bb2306546a36",
"zeta.ifi": "140827",
"zeta.ppi-type": "OPEN",
"zeta.product-type": "Generic",
"zeta.ifi-product-type": "GPR_MIN_KYC_WITHOUT_PAN",
"athena.account-provider-id": "a36ac47b-c2a2-406c-b6a0-f8857fc5f735",
"zeta.business-id": "140827"
},
"headers": {}
}
],
"totalRecord": 6,
"headers": {}
}
Code Copied

Reverse Account Transactions

In case of any disputes, pass transactionID as a path parameter to reverse fund transfer. For partial transaction reversals, set doPartialReversal to True.

Endpoint URI

GET/api/v1/ifi/{ifiID}/transactions/{transactionID}/reversal

Input parameters

  • ifiID: Required. Unique identifier of the IFI.

  • transactionID: Required. Unique identifier of the transaction for which the reversal is being triggered.

  • requestID: Required. Unique identifier of the A2A Reversal.

  • currency: Required. Currency for which reversal is required. For example, INR, USD, and more.

  • amount: Required. Amount that needs to be reversed.

  • doPartialReversal: Optional. Pass this as true for partial reversal or false for full reversal of transaction.

  • transferCode: Required. Code to specify the mode of fund transfer like IMPS and NEFT.

  • remarks: Optional. Remark of the fund reversal.

Samples

cURL Sample
Switch Theme
Expand More
Copy
curl --location --request POST 'https://fusion.preprod.zeta.in/api/v1/ifi/{ifiID}/transactions/{transactionID}/reversal' \
--header 'Authorization: Bearer <token> ' \
--data-raw '{
"requestID": "reversal_fampay_test-1",
"currency": "INR",
"amount" : "100",
"doPartialReversal" : true,
"transferCode": "ATLAS_P2M_AUTH-REVERSAL",
"remarks": "reversal_for_fampay"
} 
Code Copied
JSON Sample
Switch Theme
Expand More
Copy
{
"amount": 1,
"currency": "INR",
"paymentType": "REVERSAL",
"remark": "Reversal of vbo1",
"requestID": "93480e72-b883-46fa-8f3f-abe326ab9df7",
"revertTransactionID": "20200429121612790_14_revert_375231000459_reversal_dfdsrdkedddsdd",
"status": "SUCCESS/FAILED",
"statusDetails": {
"asBigDecimal": 0,
"asBigInteger": 0,
"asBoolean": true,
"asByte": 0,
"asCharacter": "string",
"asDouble": 0,
"asFloat": 0,
"asInt": 0,
"asJsonPrimitive": {
"asBigDecimal": 0,
"asBigInteger": 0,
"asBoolean": true,
"asByte": 0,
"asCharacter": "string",
"asDouble": 0,
"asFloat": 0,
"asInt": 0,
"asLong": 0,
"asNumber": {},
"asShort": 0,
"asString": "string",
"boolean": true,
"jsonArray": true,
"jsonNull": true,
"jsonObject": true,
"jsonPrimitive": true,
"number": true,
"string": true
},
"asLong": 0,
"asNumber": {},
"asShort": 0,
"asString": "string",
"jsonArray": true,
"jsonNull": true,
"jsonObject": true,
"jsonPrimitive": true
},
"transactionID": "20181206084927090_687_375231000459",
"transferCode": "ATLAS_P2M_AUTH-REVERSAL"
}
Code Copied

Withdrawal of funds from RAH account

Let us consider a scenario of fund transfer from one Real Account Holder (RAH) to another Legal Account Holder (LAH). In a card transaction, an individual swipes using the payment card at the merchant. The money travels from an individual’s account to the bank’s account.

Endpoint URI

POST/api/v1/ifi/{ifiID}/transfers

Input parameters

  • ifiID: Required. Unique identifier of the IFI.

  • requestID: Required. This is generated by the requester. Should be globally unique. Zeta will reject a duplicate token generation request ID.

  • amount: Required. Amount that needs to be transferred. Possible value supported for currency are INR, USD, and more.

  • transferCode: Required. Code to specify the mode of fund transfer like IMPS and NEFT.

  • debitAccountID: Required. Unique identifier of the Real Account Holder’s account from where the funds will be transferred. A fintech * account is provisioned during the on-boarding.

  • creditAccountID: Required. Unique identifier of the Legal Account Holder’s account to which the funds will be transferred.

  • transferTime: Optional. Time required to transfer funds.

  • remarks: Optional. Remark of the fund transfer.

Samples

cURL Sample
Switch Theme
Expand More
Copy
curl -X POST \
https://fusion.preprod.zeta.in/api/v1/ifi/140827/transfers \
-H 'Content-Type: application/json' \
-H 'X-Zeta-AuthToken: {{AUTH_TOKEN}}' \
-d '{
"requestID": "8439e4b6-1b63-4a28-afa1-34206a44425a",
"amount": {
"currency": "INR",
"amount": 21
},
"transferCode": "ATLAS_A2A_AUTH",
"debitAccountID": "422782d2-adcd-49a6-bde1-eb0461a582ba",
"creditAccountID": "608332f5-2d31-4377-bf91-5492dda0f694",
"transferTime": 1574741608000,
"remarks": "Transfer Funds between Account Holders",
"attributes": {}
}'
Code Copied
JSON Sample
Switch Theme
Expand More
Copy
{
"requestID": "8439e4b6-1b63-4a28-afa1-34206a44425a",
"transferID": "20191126041456390_3712_8439e4b6-1b63-4a28-afa1-34206a44425a",
"status": "SUCCESS"
}
Code Copied