---
title: "Refund"
method: POST
path: "/subscription/mandate/refund"
tags: ["Execute"]
---

# Refund

`POST /subscription/mandate/refund`

## Request

- Base URL: `https://services.jiopay.co.in/api`
- URL: `https://services.jiopay.co.in/api/subscription/mandate/refund`
- Auth: none required

Initiates a refund against a mandate or a specific presentation/execution. Supports bulk submission via a `refunds` array.

`statusCode: 900` at the batch level indicates a mixed/failed batch — always inspect `results[]` for per-item outcomes.

**Auth note (from source):** documented as no-auth in the source collection.

## Headers

- `x-seamless` '0' | '1'

## Request body

- RefundRequest
  - `client_id` string, required: Client identifier.
  - `refunds` RefundItem[], required
    - `subscription_refid` string, required: Target subscription.
    - `merchant_txn_no` string, required: Unique merchant transaction number for this refund.
    - `execute_merchant_txn_no` string: The original execution's merchant txn no., required when refunding a specific presentation.
    - `request_type` 'mandate' | 'presentation': mandate (full mandate refund) or presentation (single-execution refund).
  - `secureHash` string: HMAC-SHA256 signature, computed client-side before sending and validated server-side (auto-generated by the caller, not a value you choose). Algorithm: remove any existing secureHash, sort the remaining top-level keys alphabetically, join String(value).trim() per key with `|`, then HMAC-SHA256 the resulting string with your client_secret, hex-encoded. A second variant used by some endpoints strips comments from the raw body first and JSON-stringifies object values instead of String()-converting them — confirm which variant applies with the JPSL integration team before implementing.

## Response `200`

OK — batch may still contain per-item failures, see statusCode/results.

- RefundResponse
  - `statusCode` integer: 900 at the batch level indicates a mixed/failed batch — always inspect results[] for per-item outcomes.
  - `statusDesc` string
  - `summary` BatchSummary: Bulk-submission counters.
    - `total` integer
    - `success` integer
    - `failed` integer
    - `pending` integer: Count of items left pending in the batch (seen on Initiate Mandate; not present in every batch endpoint's response).
  - `results` RefundResultItem[]
    - `statusCode` integer
    - `statusDesc` string
    - `subscription_refid` string
    - `merchant_txn_no` string
    - `secureHash` string, nullable
    - `merchantId` string, nullable
    - `respDescription` string, nullable
    - `merchantTxnNo` string, nullable
    - `responseCode` string, nullable

---

[API](https://skmtc.dev/jiopay/apis/subscription-hub.md) - [All operations](https://skmtc.dev/jiopay/apis/subscription-hub/llms.txt) - [OpenAPI document](https://skmtc.dev/jiopay/apis/subscription-hub/revisions/9da96f805941?raw)
