> ## Documentation Index
> Fetch the complete documentation index at: https://razorpay-881012b3.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Best Practices

> Follow these Best practices while doing TPV integration.

<div style={{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"0.35rem 0.9rem",border:"1px solid rgba(128,128,128,0.28)",borderRadius:"0.5rem",padding:"0.45rem 0.75rem",margin:"0 0 1.25rem",fontSize:"0.875rem"}}>
  <span style={{fontWeight:600}}>Available in</span>
  <span>🇮🇳 India</span>
</div>

Given below are some of the best practices to be followed for a smooth TPV integration and payment experience:

<AccordionGroup>
  <Accordion title="Capture Payment Using Payment Capture Settings">
    When a payment made by your customer is authorised, it needs to be captured for it to be settled to your bank account. Use the [Payment Capture Settings](/docs/payments/payments/capture-settings) to configure the capture settings at an account level using the Dashboard.
  </Accordion>

  <Accordion title="Integrate Orders API">
    Orders help in binding multiple payment attempts against a single order. This helps to prevent multiple payments. Integrate with Orders API on your server-side and [pass the `order_id`](/docs/api/orders/fetch-with-id) to Checkout.
  </Accordion>

  <Accordion title="Verify Signature to Avoid Data Tampering">
    This is a mandatory step that allows you to confirm the authenticity of the details returned to the Checkout form for successful payments. Know more about how to [verify payment signature](/docs/payments/third-party-validation#step-6-verify-signature).
  </Accordion>

  <Accordion title="Check Payment/Order Status Before Providing Services">
    Check the payment/order status if the payment's status is `captured` and the order's status is `paid` before providing the services to the customers.

    You can determine payment and order status using:

    * [Fetch All Payments for an Order API](/docs/api/orders/fetch-payments)
    * [Fetch Status of a Payment using Payment ID API](/docs/api/payments/fetch-with-id)
    * [Fetch Status of an Order using Order ID API](/docs/api/orders/fetch-with-id)
  </Accordion>

  <Accordion title="Use Webhooks">
    Use Webhooks or API query to avoid any cases of callback failure (drop-offs can be dues to connectivity or network failure) and to verify the payment details using an S2S call. Following are some of the Webhook events you should enable:

    * `payment.captured`
    * `payment.failed`
    * `order.paid`

    Know more about [Webhooks](/docs/webhooks).
  </Accordion>

  <Accordion title="Use Callback URL">
    Use the `callback_url` if your customers make online payments on browsers such as Instagram, Facebook Messenger, Opera, UC browsers and so on. This is because these browsers do not support i-frame.
  </Accordion>
</AccordionGroup>
