Transaction

This set of APIs pertains to performing incoming and outgoing transactions on wallets and obtaining their corresponding statuses.

Below are the transaction limits for wallet types.

Min KYCFull KYC
Balance10,0002,00,000
Monthly Spend10,000No Limit
Annual Spend1,20,000No Limit
Transaction Limit10,0002,00,000

📘

Note

Please note that each issuer has specific limits for Full KYC wallets that can be customized for specific programs.

Load Wallet

This API allows loading money into the wallet associated with the specified mobile from the pool account.

Please note that this API is only enabled for regular flow programs, not JIT flow.

If the pool account doesn't have sufficient balance for the merchant, the loading will fail.

curl --location --request POST 'https://in.staging.decentro.tech/v2/prepaid/wallet/9000000009/load' \
--header 'client_id: YOUR_CLIENT_ID' \
--header 'client_secret: YOUR_CLIENT_SECRET' \
--header 'module_secret: YOUR_PREPAID_MODULE_SECRET' \
--header 'provider_secret: YOUR_CHOSEN_PROVIDER_SECRET' \
--header 'Content-Type: application/json' \
--data-raw '{
    "reference_id": "PPP",
    "purpose": "test_purpose",
    "consent": true,
    "amount": 42.5
}'
{
  "decentroTxnId": "DECXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "status": "PENDING",
  "responseCode": "I000000",
  "message": "Payment pending",
  "data": {
    "transactionStatus": "PENDING",
    "transactionDescription": "The transaction is currently pending for settlement. Kindly trigger GET TRANSACTION STATUS to get the latest updated status",
    "bankReferenceNumber": "XXXXXXXX1035"
  }
}

Fetch Load Wallet Status

This API allows getting the status of a wallet load transaction.

curl --location --request GET 'https://in.staging.decentro.tech/v2/prepaid/wallet/9000000009/load/some_load_transaction_id/status' \
--header 'client_id: YOUR_CLIENT_ID' \
--header 'client_secret: YOUR_CLIENT_SECRET' \
--header 'module_secret: YOUR_PREPAID_MODULE_SECRET' \
--header 'provider_secret: YOUR_CHOSEN_PROVIDER_SECRET'
{
  "decentroTxnId": "DECXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "status": "SUCCESS",
  "responseCode": "E00000",
  "message": "Transaction successful",
  "data": {
    "transactionStatus": "SUCCESS",
    "transactionDescription": "Transaction status fetched successfully",
    "bankReferenceNumber": "XXXXXXXX3752",
    "balance": 10.2,
    "remainingLoadLimit": 49989.8
  }
}

Reverse Load Wallet

This API allows reversing a wallet load transaction.

curl --location --request POST 'https://in.staging.decentro.tech/v2/prepaid/wallet/9000000009/load/some_load_transaction_id/reversal' \
--header 'client_id: YOUR_CLIENT_ID' \
--header 'client_secret: YOUR_CLIENT_SECRET' \
--header 'module_secret: YOUR_PREPAID_MODULE_SECRET' \
--header 'provider_secret: YOUR_CHOSEN_PROVIDER_SECRET' \
--header 'Content-Type: application/json' \
--data-raw '{
    "reference_id": "00E",
    "purpose": "test_purpose",
    "consent": true
}'
{
  "decentroTxnId": "DECXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "status": "SUCCESS",
  "responseCode": "I00000",
  "message": "Payment pending",
  "data": {
    "transactionStatus": "PENDING",
    "transactionDescription": "The transaction is currently pending for settlement. Kindly trigger GET TRANSACTION STATUS to get the latest updated status",
    "bankReferenceNumber": "2109XXXXXXXX"
  }
}

Reverse Load Wallet Status

This API allows getting the status of a wallet load reversal transaction.

curl --location --request GET 'https://in.staging.decentro.tech/v2/prepaid/wallet/9000000009/load/some_load_transaction_id/reversal/some_load_reversal_transaction_id/status' \
--header 'client_id: YOUR_CLIENT_ID' \
--header 'client_secret: YOUR_CLIENT_SECRET' \
--header 'module_secret: YOUR_PREPAID_MODULE_SECRET' \
--header 'provider_secret: YOUR_CHOSEN_PROVIDER_SECRET' \
--header 'Content-Type: application/json'
{
  "decentroTxnId": "DECXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "status": "SUCCESS",
  "responseCode": "S00000",
  "message": "Transaction successful",
  "data": {
    "transactionStatus": "SUCCESS",
    "transactionDescription": "Transaction status fetched successfully",
    "bankReferenceNumber": "2109XXXXXXXX",
    "balance": 72.7,
    "remainingLoadLimit": 0
  }
}

Reverse from Wallet

This API allows the movement of the specified amount back to the virtual pool from the wallet associated with the specified mobile.

If the parameter 'amount' is not passed in the request, the wallet will be emptied and the entire amount will be moved to the virtual pool.

curl --location --request POST 'https://in.staging.decentro.tech/v2/prepaid/wallet/9000000009/reversal' \
--header 'client_id: YOUR_CLIENT_ID' \
--header 'client_secret: YOUR_CLIENT_SECRET' \
--header 'module_secret: YOUR_PREPAID_MODULE_SECRET' \
--header 'provider_secret: YOUR_CHOSEN_PROVIDER_SECRET' \
--data-raw '{
    "reference_id": "00E",
    "purpose": "Sending money to pool account from wallet",
    "consent": true,
    "amount": 200
}'
{
  "decentroTxnId": "DECXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "status": "SUCCESS",
  "responseCode": "I00000",
  "message": "Payment pending",
  "data": {
    "transactionStatus": "PENDING",
    "transactionDescription": "The transaction is currently pending for settlement. Kindly trigger GET TRANSACTION STATUS to get the latest updated status",
    "bankReferenceNumber": "XXXXXXXX123"
  }
}

Reverse from Wallet Status

This API allows getting the status of reverse wallet transactions.

curl --location --request GET 'https://in.staging.decentro.tech/v2/prepaid/wallet/9000000009/reversal/DECXXXXXXXXXXXXXXXXXXXXXXXXXXX/status' \
--header 'client_id: YOUR_CLIENT_ID' \
--header 'client_secret: YOUR_CLIENT_SECRET' \
--header 'module_secret: YOUR_PREPAID_MODULE_SECRET' \
--header 'provider_secret: YOUR_CHOSEN_PROVIDER_SECRET'
{
  "decentroTxnId": "DECXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "status": "SUCCESS",
  "responseCode": "S00000",
  "message": "Transaction successful",
  "data": {
    "transactionStatus": "SUCCESS",
    "transactionDescription": "Transaction status fetched successfully",
    "bankReferenceNumber": "XXXXXXXXX123",
    "balance": 200,
    "remainingLoadLimit": 0
  }
}

Funds Transfer

This API allows performing outgoing transactions from the wallet associated with the specified mobile. The customer needs to add a beneficiary before transacting.

The Beneficiary code can be obtained from the Add Beneficiary API.

🚧

Reminder

This capability exists for Full KYC wallets ONLY.

Different providers place different limits on the number of successful outgoing transactions per day per beneficiary per wallet:

ProviderNumber of allowed successful outgoing transactions per day per beneficiary per wallet
Yes Bank10
curl --location --request POST 'https://in.staging.decentro.tech/v2/prepaid/wallet/9000000009/transfer' \
--header 'client_id: YOUR_CLIENT_ID' \
--header 'client_secret: YOUR_CLIENT_SECRET' \
--header 'module_secret: YOUR_PREPAID_MODULE_SECRET' \
--header 'provider_secret: YOUR_CHOSEN_PROVIDER_SECRET' \
--header 'Content-Type: application/json' \
--data-raw '{
    "reference_id": "00G",
    "purpose": "Money transfer from wallet to wallet",
    "consent": true,
    "beneficiary": {
        "code": "XXXXX"
    },
    "amount": 1.0
}'
{
  "decentroTxnId": "DECXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "status": "SUCCESS",
  "responseCode": "I00000",
  "message": "Payment pending",
  "data": {
    "transactionStatus": "PENDING",
    "transactionDescription": "The transaction is currently pending for settlement. Kindly trigger GET TRANSACTION STATUS to get the latest updated status",
    "bankReferenceNumber": "202XXXXXXXXX"
  }
}

Fetch Transfer Status

This API allows getting the status of an outgoing wallet transfer.

curl --location --request GET 'https://in.staging.decentro.tech/v2/prepaid/wallet/9000000009/transfer/some_transfer_id/status' \
--header 'client_id: YOUR_CLIENT_ID' \
--header 'client_secret: YOUR_CLIENT_SECRET' \
--header 'module_secret: YOUR_PREPAID_MODULE_SECRET' \
--header 'provider_secret: YOUR_CHOSEN_PROVIDER_SECRET'
{
  "decentroTxnId": "DECXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "status": "SUCCESS",
  "responseCode": "S00000",
  "message": "Transaction successful",
  "data": {
    "transactionStatus": "SUCCESS",
    "transactionDescription": "Transaction status fetched successfully",
    "bankReferenceNumber": "202XXXXXXXXX",
    "balance": 100
  }
}