Skip to main content
Available in🇮🇳 India
SKU and Brand Offers let you attach offers to individual products (SKUs) in an order instead of the whole cart. For example, a customer buying a laptop and a mouse can get ₹3,000 off the laptop and ₹2,000 off the mouse in a single checkout session. Both merchant-funded offers and brand-funded offers, such as a brand’s bank discount on a specific phone model, are supported. You send the cart’s SKUs in the order. Razorpay Standard Checkout finds the offers that match those SKUs, shows them to the customer and applies the best offers automatically. To show these offers on your own website or app before checkout, for example on product pages, use the Fetch and Match Offers APIs.
Feature RequestThis is an on-demand feature. Contact your Razorpay account manager to enable SKU and Brand Offers on your account. Razorpay configures the offers and the SKUs they apply to for you. SKU and Brand Offers on Standard Checkout work in both test mode and live mode, so you can test your integration before you go live.

Availability

Customer Experience

Watch this video to see SKU and Brand Offers on Standard Checkout. The customer sees the offers for each product in the cart, the best offers are applied automatically and the order summary shows the discount on each item.

How It Works

Your backend makes the API calls. Standard Checkout handles everything in between.

Integration Steps

Step 1: Create an Order With Line Items

When the customer clicks Pay, create an order using the Orders API and pass every SKU in the cart in the line_items array. Razorpay matches offers using these line items, so include all SKUs with accurate prices and quantities.
Watch Out!The order amount must equal the total of price × quantity across all line_items. For example, a smartphone at ₹40,000 and earbuds at ₹15,000 make an order amount of 5500000 (₹55,000).
POST /v1/orders
Curl

Request Parameters

integer
required
Total order amount in paise. It must equal the total of price × quantity across all line_items. For example, pass 5500000 for ₹55,000.
string
required
Currency of the order. Possible value is INR.
string
Your internal order reference for reconciliation. Maximum length is 40 characters and it must be unique.
array
required
The products in the customer’s cart.
string
required
SKU identifier of the product. It must match the SKU configured in the offer.
string
required
Brand of the product. For example, apple. Not case-sensitive. Brand offers are evaluated correctly only when you pass it.
integer
required
Unit price of the product in paise.
integer
required
Number of units of the product.
string
Name of the product. Shown to the customer on Checkout.
string
Public URL of the product image.

Response

Response Parameters

string
Unique identifier of the order. Pass this to Standard Checkout.
string
Status of the order. It is created when the order is created successfully.
array
Identifiers of the offers that apply to the SKUs in this order.
string
Your internal order reference, returned as sent.

Step 2: Open Standard Checkout

Open Standard Checkout with the order_id from Step 1. You do not need to pass offer IDs. Checkout reads the line_items on the order and fetches and displays the offers that apply.
Checkout Options
Watch Out!The discount breakdown for each SKU is shown only inside Standard Checkout. The Create Order API response returns only the offers that apply to the order. To confirm which offers were applied after the payment, fetch the order.

Step 3: Handle the payment.authorized Webhook

Razorpay sends the payment.authorized webhook to your endpoint after the payment is processed. Set up your webhook endpoint on the Dashboard. Your endpoint must return HTTP 200. Otherwise, Razorpay retries the delivery. Know more about webhook delivery and retries.
Sample Payload

Step 4: Fetch the Order to Confirm Applied Offers

After you receive the payment.authorized webhook, fetch the order with expand[]=offers. The response shows the final order state, the offers applied and the discount on each SKU. Use it for fulfilment, CRM and reconciliation.
Handy TipsCall this API only after you receive the payment.authorized webhook. The order status and applied offers are final only once the payment is authorised.
GET /v1/orders/:id?expand[]=offers
Curl
Response

Response Parameters

string
Unique identifier of the order.
integer
Original order amount in paise, before discounts.
integer
Amount charged to the customer in paise, after discounts.
integer
Amount still due in paise. It is 0 for a fully paid order.
string
Status of the order. Possible values are created, attempted and paid.
object
Key-value pairs of notes for the order.
array
IDs of the offers on the order, including the ones in offers_applied.
object
Applied offers: entity (always collection), count and items. Returned when you pass expand[]=offers.
string
Identifier of the applied offer.
string
redeemed means the offer was applied successfully.
array
Benefits applied by this offer.
  • type: Benefit type. Possible values are instant_discount, cashback, no_cost_emi, low_cost_emi and already_discounted.
  • applicable_on: line_item for an SKU-level offer or cart for a cart-level offer.
  • calculated_benefit_value: Total benefit amount from this benefit in paise.
  • benefit_breakup: Benefit on each SKU, with sku, brand, applied_quantity and calculated_benefit_value. Present only for line_item benefits.
The API returns these responses without an error: You can also apply SKU and Brand Offers to Payment Links by adding product details when you create the link from the Dashboard. Know more about SKU and Brand Offers on Payment Links.