# Integrating with the Xprizo API

This chapter provides detailed steps for setting up your merchant profile, creating a processing profile with access to the merchant wallet, and navigating through testing (sandbox) and production (live) environments. Additionally, it walks you through the deposit process using Xprizo Wallet, card, MPESA, and UPI, covering the flow, validation, callbacks, deposit transaction creation, approval webhook set up, and status checking. Follow the sections below to manage your account and transactions efficiently.

# Account Setup

You need to create two profiles where the first profile will be of the Merchant having a wallet to be able to receive funds and the other profile will be of Processing which will be used for creating the transactions on the merchant's account wallet.

#### **Merchant profile**

To create a merchant profile use the link below where you can find how to do registration, profile updation, KYC, and procedure for merchant requests.

<span style="color: #3598db;">**[How to Become a Merchant](https://books.xprizo.com/books/merchant-manual/page/how-to-become-a-merchant)** </span>

#### **Processor profile**  


A processor profile is required to manage the transactions of the merchant wallet. **This processor profile will help the merchant, to secure his wallet by giving only the required access to the processor on the merchant profile**. To configure the processor profile use the below-mentioned link where you can find all the steps to configure the processor profile (linking of merchant profile and processor profile, and after that how to give access to the processor profile of the merchant profile).

<p class="callout info">**\*\* You can also use a merchant profile as a processor profile, but this is advisable to have a separate processor profile to manage the transactions to make your main merchant profile secure.**</p>

**<span style="color: #3598db;">[Processor Profile Configuration](https://books.xprizo.com/books/user-manual/page/processing-profile-creation)</span>**

#### **Test profile**

To test the merchant account you will have to create a sample/test account which you will use to check if the integration is done properly or not.

<div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]" id="bkmrk-environment%E2%80%8B-testing"><div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]"><form class="stretch mx-2 flex flex-row gap-3 last:mb-2 md:mx-4 md:last:mb-6 lg:mx-auto lg:max-w-2xl xl:max-w-3xl"></form></div></div>

# Environment & Authentication​

Before starting the integration, the user needs to know about the available environment and authentication methods required for integration. Use the below-mentioned link where you can find details about the available environment, and authentication methods (how to generate token &amp; API key and usage of these).

**<span style="color: #3598db;">[Environment &amp; Authentication](https://books.xprizo.com/books/api-endpoints/page/introduction)</span>**

<div class="flex w-full items-center" id="bkmrk--5"></div>

# Deposit Using Xprizo Wallet

To make a deposit, funds are transferred from a user's wallet to the merchant's wallet. This process is done by requesting a payment from the user through the **<span style="color: #3598db;">[Transaction/RequestPayment](https://admin-uat.cryr.com/#/pages/CRS/CRYR/document/ref_doc_verification)</span>** endpoint.

<div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]" id="bkmrk-4.1-flow-this-is-an-"><div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]"><form class="stretch mx-2 flex flex-row gap-3 last:mb-2 md:mx-4 md:last:mb-6 lg:mx-auto lg:max-w-2xl xl:max-w-3xl">#### **Flow**

This is an example of the flow that should be used when integrating with Xprizo to perform deposits.

- *(on merchant)* Create a new transaction. 
    - Create a reference to be used for this transaction.
    - Set the transaction as pending.
- *(on Xprizo)* Create the Xprizo transaction. 
    - Find the user's wallet using their phone number or email or username, and the specified currency through the **<span style="color: #3598db;">[Wallet/Info](https://books.xprizo.com/link/32#bkmrk-update-approval-webh)</span>** endpoint. <div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]">  
        </div>
    - Find the merchant's wallet with the same currency using the **<span style="color: #3598db;">[Wallet/Info](https://books.xprizo.com/link/32#bkmrk-update-approval-webh)</span>** endpoint.
    - Create transaction using **<span style="color: #3598db;">[Transaction/RequestPayment](https://books.xprizo.com/link/22#bkmrk-create-payment-reque)</span>**
    - Wait for the callback.
    - Check the status of the transaction **<span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span>** endpoint. <div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]">  
        </div>
- *(on merchant)* Update or cancel the transaction 
    - If the transaction is approved, update the transaction status in your system.
    - If the transaction is rejected, cancel the transaction on your system.

![User Journey Mapping (21).jpg](https://books.xprizo.com/uploads/images/gallery/2024-02/scaled-1680-/user-journey-mapping-21.jpg)

<div class="relative flex h-full flex-1 items-stretch md:flex-col"><div class="flex w-full items-center">  
</div></div>#### **Steps**[​](https://xprizo-doc.azurewebsites.net/docs/merchants/deposits#steps "Direct link to heading")

<div class="relative flex h-full flex-1 items-stretch md:flex-col"><div class="relative flex h-full flex-1 items-stretch md:flex-col"><div class="flex w-full items-center">- Create a payment Request
- Wait for callback
- Check Status

</div></div></div>Once you've created a payment request, wait for a callback that will be sent once the user approves the request. While it's not mandatory to utilize callbacks, it's more efficient to do so. Alternatively, you can directly call the check status endpoint, but this isn't recommended as you would need to continuously poll the server to check the status. Use this endpoint to check the status **<span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span>**<span style="color: #3598db;"><span style="color: #000000;">.</span></span>

<div class="relative flex h-full flex-1 items-stretch md:flex-col"><div class="flex w-full items-center">To receive callbacks, you must set this up on your account (the profile that is used to create this transaction). You can set up the callback by accessing the settings/preferences in Xprizo. Configure the "Approval Webhook" to your desired API endpoint where you want to receive the callback. Alternatively, you can set this up using the **<span style="color: #3598db;">[Preference/SetApprovalWebhook](https://books.xprizo.com/link/31#bkmrk-update-approval-webh)</span>** endpoint.</div></div><div class="flex w-full items-center">  
</div><p class="callout info">**\*\* You should, however, check the status, after you get a callback to confirm that the transaction was completed successfully. You can use <span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span> endpoint to check the status.**</p>

</form></div></div>

# Deposit Using Card

#### **Flow​**

[![User Journey Mapping (20).jpg](https://books.xprizo.com/uploads/images/gallery/2024-02/scaled-1680-/user-journey-mapping-20.jpg)](https://books.xprizo.com/uploads/images/gallery/2024-02/user-journey-mapping-20.jpg)

#### **Steps**[​](https://xprizo-doc.azurewebsites.net/docs/merchants/card-deposits#steps "Direct link to heading")

- Create Deposit Transaction Using Card
- Wait for a callback.
- Check status.

After you have called the **<span style="color: #3598db;">[Transaction/CardDeposit](https://books.xprizo.com/link/22#bkmrk-deposit-funds-using-)</span>** endpoint, a payment request is sent to the Acquirer network to process the card payment. A pending transaction is also created and Xprizo will continue monitoring the Acquirer network until an approval or rejection is received.

If the card is 'Approved' (2DS) then the transaction will be added to the merchant's wallet and the API will return an 'Active' status. No further action is required.

If there is a problem creating the transaction then the API will return a status of 'Rejected'.

It is possible that a card is not processed immediately such as some kind of delay or the user might need to approve the transaction using another device, then a 'Pending' status will be returned.

In the case of 3DS, there could be a redirect to an alternate URL. In this case, a 'Redirect' status and URL is returned.

The Merchant will get updates on the status of the transaction via callbacks. **To receive a callback, you will need to request to set this up on your Merchant account (the profile that is used to create this transaction).** This can be done by going to settings/preferences and setting the "Approval Webhook" to point to a URL of your choice. You can also set this using **<span style="color: #3598db;">[Preference/SetApprovalWebhook](https://books.xprizo.com/link/31#bkmrk-update-approval-webh)</span>**

A callback will be sent when

- The pending transaction is created.
- The pending transaction is approved
- The pending transaction is rejected

You can use <span style="color: #3598db;">[this link](https://books.xprizo.com/link/22#bkmrk-approved-transaction)</span> to see the response coming on this Webhook.

<p class="callout info">**\*\* You should, however, check the status, after you get a callback to confirm that the transaction was completed successfully. You can use <span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span> endpoint to check the status.**</p>

# Deposit Using MPESA

<div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]" id="bkmrk-4.1-flow-this-is-an-"><div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]"><form class="stretch mx-2 flex flex-row gap-3 last:mb-2 md:mx-4 md:last:mb-6 lg:mx-auto lg:max-w-2xl xl:max-w-3xl">To make deposits from a user via M-Pesa, initiate a deposit by transferring funds from the user's M-Pesa account to your merchant's wallet using the **[<span style="color: #3598db;">Transaction/MPesaDeposit</span>](https://books.xprizo.com/link/22#bkmrk-create-deposit-reque)** endpoint.

#### **Flow​**

![User Journey Mapping (20).jpg](https://books.xprizo.com/uploads/images/gallery/2024-02/scaled-1680-/user-journey-mapping-20.jpg)

#### **Steps**[​](https://xprizo-doc.azurewebsites.net/docs/merchants/card-deposits#steps "Direct link to heading")

- Add an M-Pesa deposit Transaction
- Wait for callback
- Check Status

Once you've called the "MpesaDeposit" endpoint, a payment request is sent to the M-Pesa network and the user will then confirm the transaction on their phone. A pending transaction is also generated, and Xprizo will continuously monitor the M-Pesa network until a confirmation or failure is received.

- If a confirmation is received, the pending transaction will transition into a completed transaction.
- If the transaction is cancelled, a notification containing details about the cancellation will be generated and sent to the merchant's account.

Merchants will receive updates on the transaction status via callbacks. To enable callbacks, you'll need to configure this on your account (the profile used to create the transaction). You can accomplish this by navigating to the settings/preferences in Xprizo and configuring the "Approval Webhook" to point to a URL of your choice. Alternatively, you can achieve the same using the **[<span style="color: #3598db;">Preference/SetApprovalWebhook</span>](https://books.xprizo.com/link/31#bkmrk-update-approval-webh)** endpoint.

A callback will be sent when

- the pending transaction is created.
- the pending transaction is approved
- the pending transaction is cancelled

It is not strictly necessary to use callbacks, you have the option to periodically check the status of the transaction. However, it's not recommended as it would require to poll the server continuously to check the status. However, it's advisable to verify the status after receiving a callback to ensure that the transaction was completed successfully.

<div class="w-full text-token-text-primary" data-testid="conversation-turn-148"><div class="px-4 py-2 justify-center text-base md:gap-6 m-auto"><div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group"><div class="relative flex w-full flex-col lg:w-[calc(100%-115px)]"><div class="flex-col gap-1 md:gap-3"><div class="flex flex-grow flex-col max-w-full"><div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto" data-message-author-role="user" data-message-id="aaa2e400-a4cc-4708-b4a4-909cb35e5c99"><div class="">Use this endpoint to check the status **<span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span>**[<span style="color: #3598db;">.</span>](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</div><div class="">  
</div></div></div></div></div></div></div></div><p class="callout info">**\*\* You should, however, check the status, after you get a callback to confirm that the transaction was completed successfully. You can use <span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span> endpoint to check the status.**</p>

</form></div></div>

# Deposit Using UPI

<div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]" id="bkmrk-4.1-flow-this-is-an-"><div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]"><form class="stretch mx-2 flex flex-row gap-3 last:mb-2 md:mx-4 md:last:mb-6 lg:mx-auto lg:max-w-2xl xl:max-w-3xl"><p class="callout warning">This method applies ONLY to INR currency.</p>

<div class=""><div class="">- Initiate a UPI deposit transaction using the <span style="color: #3598db;">[/Transaction/UpiDeposit](https://books.xprizo.com/link/22#bkmrk-create-a-deposit-req)</span> endpoint.
- Redirect your end user to the URL specified in the response you receive.
- The end user will need to authorize the transaction.
- When the process is completed, the end user will be redirected to the URL you specified when you called the <span style="color: #3598db;">[/Transaction/UpiDeposit](https://books.xprizo.com/link/22#bkmrk-create-a-deposit-req)</span> endpoint.

</div></div>- Wait for callback.
- Check transaction status.

</form><form class="stretch mx-2 flex flex-row gap-3 last:mb-2 md:mx-4 md:last:mb-6 lg:mx-auto lg:max-w-2xl xl:max-w-3xl">Once you have called the <span style="color: #3598db;">[/Transaction/UpiDeposit](https://books.xprizo.com/link/22#bkmrk-create-a-deposit-req) </span>endpoint, a pending transaction is generated in the Xprizo system and sends a request to our acquirer network to provide a URL for the UPI payment. You will need to redirect the end-user to this URL, and the user will need to authorize the transaction.

- If authorization is received, the transaction will be marked as completed.
- If the transaction is canceled, it will be marked as rejected.

You can query the status of the transaction at any point by calling the <span style="color: #3598db;">[/Transaction/CheckStatus](https://books.xprizo.com/books/xprizo-manuals-api-manual/page/transaction-endpoints-apitransaction#bkmrk-transaction-status-c)</span> endpoint.

You can also receive transaction status updates via callbacks. To enable callbacks, you will need to configure this on the profile used to create the transaction. To do this:

- Log in at [wallet.xprizo.com.](https://wallet.xprizo.com)
- Click on your profile icon at the top right, then 'Settings'.
- Click on 'Preference' on the left menu.
- Set 'Approval Webhook' to a URL of your choice where you will receive the callbacks.

Alternatively, you can use the [/Preference/SetApprovalWebhook](https://books.xprizo.com/link/31#bkmrk-update-approval-webh) endpoint to achieve the same thing.

A callback will be sent when:

- The pending transaction is created.
- The pending transaction is approved.
- The pending transaction is cancelled.

It is not strictly necessary to use callbacks. You can instead check the status of the transaction periodically. However, this is not recommended, as it would require you to poll the server continuously to check the status.

<p class="callout warning">When using callbacks, it is still advisable to make a final status check to ensure that the transaction was completed successfully. You can use the [/Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c) endpoint to check the status of the transaction.</p>

</form><form class="stretch mx-2 flex flex-row gap-3 last:mb-2 md:mx-4 md:last:mb-6 lg:mx-auto lg:max-w-2xl xl:max-w-3xl"></form></div></div>

# Withdrawals

<div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]" id="bkmrk-4.1-flow-this-is-an-"><div class="w-full pt-2 md:pt-0 dark:border-white/20 md:border-transparent md:dark:border-transparent md:w-[calc(100%-.5rem)]"><form class="stretch mx-2 flex flex-row gap-3 last:mb-2 md:mx-4 md:last:mb-6 lg:mx-auto lg:max-w-2xl xl:max-w-3xl"></form><form class="stretch mx-2 flex flex-row gap-3 last:mb-2 md:mx-4 md:last:mb-6 lg:mx-auto lg:max-w-2xl xl:max-w-3xl">### **Withdrawal to Xprizo Wallet**

Withdrawals are carried out when a merchant wants to transfer funds from their wallet to a user's wallet. These transactions are initiated through the process of generating withdrawal requests. Typically, withdrawals can be done using three different methods. Each method provides merchants with flexibility in how they transfer funds, catering to their specific preferences and requirements. This flexibility ensures seamless fund transfers between merchants and users within the platform.

### **Create, Commit, Check**

Employ this method if the final check is done on the platform's end, that is the platform verifies that the transaction was completed and will then update the user's wallet accordingly.

This method requires the platform to continually poll Xprizo in case there is no response to confirm whether the transaction was successfully created or not.

#### **Flow**

[![User Journey Mapping (26).jpg](https://books.xprizo.com/uploads/images/gallery/2024-02/scaled-1680-/user-journey-mapping-26.jpg)](https://books.xprizo.com/uploads/images/gallery/2024-02/user-journey-mapping-26.jpg)

#### **Steps**

</form></div></div>- Create a pending transaction on your system.
- Create and commit a payment transaction on Xprizo and wait for the response. **<span style="color: #3598db;">[Transaction/SendPayment](https://books.xprizo.com/link/22#bkmrk-send-payment-using-x)</span>**
    - If you receive an Ok Response (200), then the transaction was successfully processed and you can set your payment transaction as completed.
    - If you receive one of the following error codes (400,401,403,500), then the transaction did not complete and you should cancel your transaction (or correct the problem and try again).
    - If you do not receive a response from Xprizo or a timeout you will need to keep checking Xprizo until you can determine the status of the transaction. **<span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span>**
- Check transaction status 
    - Active - Approved
    - Pending – Pending approval
    - NotFound – Timed-out or cancelled

### **Create, Approve, Check**

Use this method if the creation and approval of transactions are not done at the same time. For instance, the platform might initiate the transaction, and the merchant may approve the transaction

With this method, the platform needs to continuously poll Xprizo in case there's no immediate response from Xprizo to confirm whether the transaction was successfully created or not.

#### **Flow**

[![User Journey Mapping (25).jpg](https://books.xprizo.com/uploads/images/gallery/2024-02/scaled-1680-/user-journey-mapping-25.jpg)](https://books.xprizo.com/uploads/images/gallery/2024-02/user-journey-mapping-25.jpg)

#### **Steps**

- Create a pending transaction on your system.
- Create a payment transaction on Xprizo and wait for the response. **<span style="color: #3598db;">[Transaction/SendPayment](https://books.xprizo.com/link/22#bkmrk-send-payment-using-x)</span>**
- Use the key from the returned response to approve the transaction **<span style="color: #3598db;">[Transaction/Approval](https://books.xprizo.com/link/22#bkmrk-approve-payment-crea)</span>** or wait for the merchant to approve the transaction (you can only approve the transaction if the merchant gave you full or approval rights to their wallet).
- If you are approving the transaction 
    - If you get an OK Response (200) then you should check the status of the transaction. **<span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span>**
- If you will wait for the merchant to approve the transaction 
    - and you have set the approval callback option in your settings **[<span style="color: #3598db;">Preference/SetApprovalWebhook</span>](https://books.xprizo.com/link/22#bkmrk-payment-webhook-resp)** then you will receive a callback once the transaction has been approved
    - and you have **NOT** set the approval callback option then you will have to keep checking the status of the transaction until it is approved, rejected or expires. **<span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span>**

<p class="callout info">**<span style="color: #000000;">At any time you can cancel the transaction by calling <span style="color: #3598db;">[Transaction/Cancel](https://books.xprizo.com/link/22#bkmrk-cancel-payment-creat)</span></span>**</p>

### **Create, Hold, Check**

Use this method if you prefer Xprizo to conduct the final check. Xprizo will verify that the transaction has been created on the platform by sending a callback and awaiting a valid response. Depending on the platform's response, Xprizo will either confirm the transaction or cancel it.

By using this method involves Xprizo initiating a transaction and placing it on hold. It will then send a callback to verify whether the platform has successfully updated the transaction on its end. If Xprizo receives a positive response, then the transaction will be completed. If a negative response is received or there is no response within 24 hours, the transaction is voided.

#### **Flow**

![User Journey Mapping (27).jpg](https://books.xprizo.com/uploads/images/gallery/2024-02/scaled-1680-/user-journey-mapping-27.jpg)

#### **Steps**

- Create a pending transaction on your system
- Create a payment transaction on Xprizo and wait for the response. **<span style="color: #3598db;">[Transaction/SendPayment](https://books.xprizo.com/link/22#bkmrk-send-payment-using-x)</span>**
    - Xprizo will create a transaction marked as ‘Hold’ and return 200 (success)
    - If you get the 200 (success) response then leave your transaction as pending
    - If the transaction failed with any error 400,401,403,500 excluding a timeout mark the transaction as rejected (Xprizo automatically deleted failed transactions)
- Xprizo will a send callback to the platform (make sure you have the "Payment Webhook" setup in Xprizo) **[<span style="color: #3598db;">Preference/SetApprovalWebhook</span>](https://books.xprizo.com/link/22#bkmrk-payment-webhook-resp).** 
    - You should now set the transaction on your platform as paid and respond to the callback with 200 (success) response.
    - It is recommended to check the status of the transaction on Xprizo to ensure that is completed **<span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c).</span>**
    - Xprizo will keep sending callbacks until the platform responds
    - If your platform does not response for 24 hours 
        - The transaction is voided
        - Funds released back to the merchant
    - If the platform responds with a success 
        - The Hold is removed and the transaction is marked as active
    - If the platform responds with an error 
        - The transaction is voided
        - Funds released back to the merchant

### **Withdrawal to Bank Account**

When a user needs to transfer funds from their wallet to someone's bank account, they can easily initiate this process by providing the recipient's name, account number, and the desired amount to be transferred. This withdrawal method facilitates direct transfers to bank accounts, ensuring seamless transactions between users and their chosen recipients.

#### **Flow**

[![User Journey Mapping (29).jpg](https://books.xprizo.com/uploads/images/gallery/2024-02/scaled-1680-/user-journey-mapping-29.jpg)](https://books.xprizo.com/uploads/images/gallery/2024-02/user-journey-mapping-29.jpg)

#### **Steps**

- Create a pending transaction on your system.
- Create a withdrawal request on Xprizo using this endpoint **<span style="color: #3598db;">[Transaction/BankWithdrawal ](https://books.xprizo.com/link/22#bkmrk-send-payment-to-bank) </span>**
- After this the entered amount will be debited from your Xprizo wallet and the withdrawal will be created as a Hold transaction. This Hold transaction will be reviewed by the back office for approval.
- If the back office user 
    - approves of the transaction will go into the processing and after the successful processing this transaction will be marked as Active and the user will be notified using your approval webhook. You can configure your approval webhook using this **[<span style="color: #3598db;">Preference/SetApprovalWebhook</span>](https://books.xprizo.com/link/22#bkmrk-payment-webhook-resp)**.
    - rejects the transaction the amount deducted will be reverted back to the user's wallet and the transaction will be marked as Void.
    - and you have **NOT** set the approval callback option then you will have to keep checking the status of the transaction until it is approved, rejected, or expires. **<span style="color: #3598db;">[Transaction/Status](https://books.xprizo.com/link/22#bkmrk-transaction-status-c)</span>**