{
  "info": {
    "_postman_id": "eb6938a5-2800-5157-9472-bb38b51a3e09",
    "name": "Payonclick API v1",
    "description": "Every endpoint in the Payonclick partner API reference (https://payonclick.in/developer/reference), ready to send.\n\n**Setup**\n1. Open the collection, tab **Variables**. Put your `poc_live_` key in `api_key` (use the Current value column, so the key never syncs) and your TPIN in `tpin`.\n2. Send any request. The collection script adds `Authorization`, `X-Timestamp` and, on POST/DELETE, the `X-Signature` HMAC.\n\n**Read before you send a POST**\n- There is no sandbox. Keys are live: a recharge, bill payment, transfer or verification sent from here is real and is debited from your wallet. Start with the GET requests.\n- Change `client_reference` for every new payment. Re-sending the same value returns the first transaction (`duplicate: true`) and moves no money.\n- Your computer clock must be within 5 minutes of real time.\n- If your key has an IP whitelist, the IP of the computer running Postman must be on it.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "noauth"
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Payonclick request signing. Runs before every request in this collection.",
          "// Set `api_key` (and `tpin` for payments) under Collection > Variables.",
          "const apiKey = pm.variables.get('api_key');",
          "if (!apiKey || apiKey.indexOf('poc_live_') !== 0) {",
          "    throw new Error('Set the api_key variable to your poc_live_ key: open the collection, tab \"Variables\".');",
          "}",
          "",
          "const ts = Math.floor(Date.now() / 1000).toString();",
          "pm.request.headers.upsert({ key: 'Authorization', value: 'Bearer ' + apiKey });",
          "pm.request.headers.upsert({ key: 'X-Timestamp', value: ts });",
          "",
          "const method = pm.request.method.toUpperCase();",
          "if (['POST', 'PUT', 'PATCH', 'DELETE'].indexOf(method) !== -1) {",
          "    // Full path, path variables filled in, query string excluded.",
          "    const path = pm.variables.replaceIn(pm.request.url.getPath());",
          "",
          "    // Hash the body exactly as it will be sent, then send exactly that.",
          "    let body = '';",
          "    if (pm.request.body && pm.request.body.mode === 'raw' && pm.request.body.raw) {",
          "        body = pm.variables.replaceIn(pm.request.body.raw);",
          "        pm.request.body.update({ mode: 'raw', raw: body, options: { raw: { language: 'json' } } });",
          "    }",
          "",
          "    const bodyHash = CryptoJS.SHA256(body).toString(CryptoJS.enc.Hex);",
          "    const message = method + '\\n' + path + '\\n' + ts + '\\n' + bodyHash;",
          "    const signature = CryptoJS.HmacSHA256(message, apiKey).toString(CryptoJS.enc.Hex);",
          "    pm.request.headers.upsert({ key: 'X-Signature', value: signature });",
          "}"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "base_url",
      "value": "https://payonclick.in",
      "type": "string"
    },
    {
      "key": "api_key",
      "value": "",
      "type": "string"
    },
    {
      "key": "tpin",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Account",
      "item": [
        {
          "name": "Account Balance",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/ext/v1/balance",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "ext",
                "v1",
                "balance"
              ]
            },
            "description": "Every wallet on your account, with live per-product limits\n\n**Key permission:** any valid API key\n\nRequires only a valid API key — no permission scope. Balances are read live on every call and never cached. `funds` tells you which products draw on that wallet, and `products` carries the limits currently in force, so this one response is enough to validate an amount before you submit it. A wallet your account does not hold yet is still returned at `0.00`, so your parsing never has to handle a missing key. The per-product `/ext/v1/dmt/balance`, `/ext/v1/bbps/balance` and `/ext/v1/recharge/balance` endpoints continue to work unchanged.\n\nDocs: https://payonclick.in/developer/reference/account-balance"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/balance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "balance"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"currency\": \"INR\",\n    \"as_of\": \"2026-07-29T14:35:12\",\n    \"wallets\": {\n      \"MAIN\": { \"balance\": 45230.50, \"funds\": [\"bbps\", \"recharge\"] },\n      \"AEPS\": { \"balance\": 10000.00, \"funds\": [\"aeps\", \"dmt\", \"upicw\", \"matm\"] }\n    },\n    \"products\": {\n      \"bbps\": {\n        \"wallet\": \"MAIN\",\n        \"base_url\": \"/ext/v1/bbps\",\n        \"permission\": \"bills\",\n        \"min_amount\": 1.0,\n        \"max_amount\": 200000.0\n      },\n      \"dmt\": {\n        \"wallet\": \"AEPS\",\n        \"base_url\": \"/ext/v1/dmt\",\n        \"permission\": \"transfer\",\n        \"min_amount\": 100.0,\n        \"max_amount\": 50000.0,\n        \"daily_limit_per_beneficiary\": 200000.0\n      },\n      \"recharge\": {\n        \"wallet\": \"MAIN\",\n        \"base_url\": \"/ext/v1/recharge\",\n        \"permission\": \"recharge\",\n        \"min_amount\": 1.0,\n        \"max_amount\": 50000.0\n      },\n      \"aeps\": {\n        \"wallet\": \"AEPS\",\n        \"base_url\": \"/ext/v1/aeps\",\n        \"permission\": \"aeps\",\n        \"limits_by_service\": { \"CW\": { \"min_amount\": 100, \"max_amount\": 10000, \"multiple_of\": 50 } /* AP, CD */ }\n      },\n      \"upicw\": {\n        \"wallet\": \"AEPS\",\n        \"base_url\": \"/ext/v1/upicw\",\n        \"permission\": \"upicw\",\n        \"min_amount\": 100.0,\n        \"max_amount\": 5000.0,\n        \"multiple_of\": 100\n      },\n      \"matm\": {\n        \"wallet\": \"AEPS\",\n        \"base_url\": \"/ext/v1/matm\",\n        \"permission\": \"matm\",\n        \"limits_by_service\": { \"CW\": { \"min_amount\": 100, \"max_amount\": 10000, \"multiple_of\": 100 } }\n      }\n    }\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Free DMT",
      "item": [
        {
          "name": "Sender (Remitter)",
          "item": [
            {
              "name": "Send Sender OTP",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/sender/check",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "sender",
                    "check"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"mobile\": \"9876543210\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Send an OTP to the remitter mobile\n\n**Key permission:** any valid API key\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `mobile` (required) — 10-digit Indian mobile of the remitter\n\n`action` is `verify_otp` for a known remitter, or `register` when the remitter must be enrolled first.\n\nDocs: https://payonclick.in/developer/reference/dmt-sender-check"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/sender/check",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "sender",
                        "check"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"mobile\": \"9876543210\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"action\": \"verify_otp\",\n    \"is_registered\": true,\n    \"sender_name\": \"Ramesh Kumar\",\n    \"message\": \"OTP sent to 98****10\",\n    \"sms_dispatched\": true\n  }\n}"
                }
              ]
            },
            {
              "name": "Verify Sender OTP",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/sender/verify-otp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "sender",
                    "verify-otp"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"mobile\": \"9876543210\",\n  \"otp\": \"491823\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Verify the OTP and receive a sender_token\n\n**Key permission:** any valid API key\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `mobile` (required) — Same mobile used in /sender/check\n- `otp` (required) — 6-digit OTP received by SMS\n\nThe `sender_token` is valid for 30 minutes and is required by every beneficiary and transfer call.\n\nDocs: https://payonclick.in/developer/reference/dmt-sender-verify-otp"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/sender/verify-otp",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "sender",
                        "verify-otp"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"mobile\": \"9876543210\",\n  \"otp\": \"491823\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"action\": \"ready\",\n    \"sender_token\": \"a3f1c8...\",\n    \"sender_id\": 42,\n    \"sender_name\": \"Ramesh Kumar\",\n    \"expires_in\": 1800\n  }\n}"
                }
              ]
            },
            {
              "name": "Register Sender",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/sender/register",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "sender",
                    "register"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"sender_token\": \"a3f1c8...\",\n  \"first_name\": \"Ramesh\",\n  \"last_name\": \"Kumar\",\n  \"address\": \"123 MG Road\",\n  \"pincode\": \"110001\",\n  \"state\": \"Delhi\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Enrol a new remitter (when action = register)\n\n**Key permission:** any valid API key\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `sender_token` (required) — From /sender/verify-otp\n- `first_name` (required) — Minimum 2 characters\n- `last_name` — string\n- `address` — string\n- `pincode` — string\n- `state` — string\n\nDocs: https://payonclick.in/developer/reference/dmt-sender-register"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/sender/register",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "sender",
                        "register"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"sender_token\": \"a3f1c8...\",\n  \"first_name\": \"Ramesh\",\n  \"last_name\": \"Kumar\",\n  \"address\": \"123 MG Road\",\n  \"pincode\": \"110001\",\n  \"state\": \"Delhi\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"sender_id\": 42,\n    \"sender_name\": \"Ramesh Kumar\",\n    \"sender_token\": \"a3f1c8...\",\n    \"message\": \"Sender registered successfully\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Get Sender & Beneficiaries",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/sender/:mobile",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "sender",
                    ":mobile"
                  ],
                  "variable": [
                    {
                      "key": "mobile",
                      "value": "9876543210",
                      "description": "10-digit remitter mobile"
                    }
                  ]
                },
                "description": "Remitter profile and saved beneficiaries\n\n**Key permission:** any valid API key\n\nDocs: https://payonclick.in/developer/reference/dmt-sender-get"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/sender/:mobile",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "sender",
                        ":mobile"
                      ],
                      "variable": [
                        {
                          "key": "mobile",
                          "value": "9876543210",
                          "description": "10-digit remitter mobile"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"sender\": {\n      \"id\": 42,\n      \"mobile\": \"9876543210\",\n      \"name\": \"Ramesh Kumar\",\n      \"is_verified\": 1\n    },\n    \"beneficiaries\": [\n      {\n        \"id\": 17,\n        \"bene_name\": \"Suresh Sharma\",\n        \"account_masked\": \"****0123\",\n        \"ifsc_code\": \"SBIN0012345\",\n        \"bank_name\": \"State Bank of India\",\n        \"is_verified\": 1\n      }\n    ]\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Supported Banks",
          "item": [
            {
              "name": "List Supported Banks",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/banks",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "banks"
                  ]
                },
                "description": "The banks Free DMT can transfer to\n\n**Key permission:** any valid API key\n\n**Read this before you collect a bank account.** Free DMT is enabled per bank and only a few are switched on, so most IFSCs are not accepted — showing your user the full list of Indian banks would let them enter an account we cannot pay. Match on `ifsc_prefix` first (it carries the regional and Gramin banks, whose prefix is longer than four characters), then fall back to the first four characters of the IFSC against `bank_code`. The list changes only when an operator enables or disables a bank — cache it for a few hours, not forever.\n\nDocs: https://payonclick.in/developer/reference/dmt-banks"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/banks",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "banks"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"banks\": [\n      {\n        \"bank_name\": \"State Bank of India\",\n        \"bank_code\": \"SBIN\",\n        \"ifsc_prefix\": \"SBIN0000001\"\n      },\n      {\n        \"bank_name\": \"Punjab National Bank\",\n        \"bank_code\": \"PUNB\",\n        \"ifsc_prefix\": \"PUNB0006810\"\n      }\n    ],\n    \"count\": 2\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Beneficiary",
          "item": [
            {
              "name": "Verify Bank Account",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/beneficiary/verify",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "beneficiary",
                    "verify"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"account_number\": \"9876543210123\",\n  \"ifsc_code\": \"SBIN0012345\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Penny-drop — fetch the true account holder name\n\n**Key permission:** `transfer`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `account_number` (required) — Destination account number\n- `ifsc_code` (required) — 11-character IFSC\n\nChargeable as per your Bank Account Verification slab. The charge is debited only on a successful lookup.\n\nDocs: https://payonclick.in/developer/reference/dmt-beneficiary-verify"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/beneficiary/verify",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "beneficiary",
                        "verify"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"account_number\": \"9876543210123\",\n  \"ifsc_code\": \"SBIN0012345\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"success\": true,\n    \"account_holder\": \"SURESH SHARMA\",\n    \"bank_name\": \"State Bank of India\",\n    \"ifsc\": \"SBIN0012345\",\n    \"charge_deducted\": 5.00\n  }\n}"
                }
              ]
            },
            {
              "name": "Add Beneficiary",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/beneficiary/add",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "beneficiary",
                    "add"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"sender_token\": \"a3f1c8...\",\n  \"bene_name\": \"Suresh Sharma\",\n  \"account_number\": \"9876543210123\",\n  \"ifsc_code\": \"SBIN0012345\",\n  \"is_verified\": true\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Save a bank account against the remitter\n\n**Key permission:** `transfer`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `sender_token` (required) — From /sender/verify-otp\n- `bene_name` (required) — Minimum 3 characters\n- `account_number` (required) — string\n- `ifsc_code` (required) — string\n- `is_verified` — Set true if penny-drop was done\n\nDocs: https://payonclick.in/developer/reference/dmt-beneficiary-add"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/beneficiary/add",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "beneficiary",
                        "add"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"sender_token\": \"a3f1c8...\",\n  \"bene_name\": \"Suresh Sharma\",\n  \"account_number\": \"9876543210123\",\n  \"ifsc_code\": \"SBIN0012345\",\n  \"is_verified\": true\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"beneficiary_id\": 17,\n    \"bene_name\": \"Suresh Sharma\",\n    \"account_masked\": \"****0123\",\n    \"bank_name\": \"State Bank of India\",\n    \"ifsc_code\": \"SBIN0012345\",\n    \"is_verified\": true\n  }\n}"
                }
              ]
            },
            {
              "name": "Delete Beneficiary",
              "request": {
                "method": "DELETE",
                "header": [
                  {
                    "key": "X-Sender-Token",
                    "value": "<x_sender_token>",
                    "description": "Sender token, as a header or ?sender_token= query param"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/beneficiary/:id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "beneficiary",
                    ":id"
                  ],
                  "variable": [
                    {
                      "key": "id",
                      "value": "17",
                      "description": "Beneficiary id from /beneficiary/add"
                    }
                  ]
                },
                "description": "Remove a saved beneficiary\n\n**Key permission:** `transfer`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\nDocs: https://payonclick.in/developer/reference/dmt-beneficiary-delete"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "DELETE",
                    "header": [
                      {
                        "key": "X-Sender-Token",
                        "value": "<x_sender_token>",
                        "description": "Sender token, as a header or ?sender_token= query param"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/beneficiary/:id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "beneficiary",
                        ":id"
                      ],
                      "variable": [
                        {
                          "key": "id",
                          "value": "17",
                          "description": "Beneficiary id from /beneficiary/add"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": { \"message\": \"Beneficiary removed successfully\" }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Transfer",
          "item": [
            {
              "name": "Initiate Transfer",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/transfer",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "transfer"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"sender_token\": \"a3f1c8...\",\n  \"beneficiary_id\": 17,\n  \"amount\": 500.00,\n  \"tpin\": \"{{tpin}}\",\n  \"client_reference\": \"ORD-2026-000123\",\n  \"remarks\": \"Family support\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Initiate an IMPS transfer\n\n**Key permission:** `transfer`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `sender_token` (required) — string\n- `beneficiary_id` (required) — From /beneficiary/add\n- `amount` (required) — Within the limits returned by GET /balance (currently ₹100 – ₹50,000)\n- `tpin` (required) — Your account TPIN\n- `client_reference` — Your unique id — the idempotency key. Optional, but send it: it is what makes a retry safe. Max 48 chars, letters/digits/hyphen/underscore\n- `remarks` — string\n\n`request_id` is our identifier for the transfer — the literal string we return, currently 24 characters like `VVN178645657668598151B51`. Store it as opaque text and do not parse or pattern-match it; the shape is not part of the contract. \n\n**Send a `client_reference` and a timeout becomes safe to retry.** Re-sending the same value returns the _original_ transfer with `duplicate: true` and moves no further money — the uniqueness is enforced by a database index inside the same transaction as the wallet debit, so even two genuinely simultaneous requests can only ever produce one transfer. The reference is scoped to your account: another partner using the same string does not affect you. Omitting it still works for backwards compatibility, but then a retry _will_ send money twice — recover with `GET /transfer/by-client-reference/{client_reference}` or `GET /transactions` instead of resending.\n\nDocs: https://payonclick.in/developer/reference/dmt-transfer"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/transfer",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "transfer"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"sender_token\": \"a3f1c8...\",\n  \"beneficiary_id\": 17,\n  \"amount\": 500.00,\n  \"tpin\": \"{{tpin}}\",\n  \"client_reference\": \"ORD-2026-000123\",\n  \"remarks\": \"Family support\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"request_id\": \"VVN178645657668598151B51\",\n    \"client_reference\": \"ORD-2026-000123\",\n    \"amount\": 500.00,\n    \"charge\": 5.00,\n    \"total_debit\": 505.00,\n    \"status\": \"pending\",\n    \"duplicate\": false,\n    \"message\": \"Transfer request submitted successfully\"\n  }\n}"
                },
                {
                  "name": "200 OK · replayed",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/transfer",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "transfer"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"sender_token\": \"a3f1c8...\",\n  \"beneficiary_id\": 17,\n  \"amount\": 500.00,\n  \"tpin\": \"{{tpin}}\",\n  \"client_reference\": \"ORD-2026-000123\",\n  \"remarks\": \"Family support\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"request_id\": \"VVN178645657668598151B51\",\n    \"client_reference\": \"ORD-2026-000123\",\n    \"status\": \"pending\",\n    \"amount\": 500.00,\n    \"duplicate\": true,\n    \"message\": \"Duplicate client_reference — returning the original transfer\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Get Transfer Status",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/transfer/:request_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "transfer",
                    ":request_id"
                  ],
                  "variable": [
                    {
                      "key": "request_id",
                      "value": "VVN178645657668598151B51",
                      "description": "From POST /transfer"
                    }
                  ]
                },
                "description": "Poll a single transfer\n\n**Key permission:** any valid API key\n\nStatuses: `pending`, `assigned`, `completed`, `failed`, `refunded`, `cancelled`.\n\nDocs: https://payonclick.in/developer/reference/dmt-transfer-status"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/transfer/:request_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "transfer",
                        ":request_id"
                      ],
                      "variable": [
                        {
                          "key": "request_id",
                          "value": "VVN178645657668598151B51",
                          "description": "From POST /transfer"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"request_id\": \"VVN178645657668598151B51\",\n    \"status\": \"completed\",\n    \"amount\": 500.00,\n    \"charge_amount\": 5.00,\n    \"total_debit\": 505.00,\n    \"utr_number\": \"512345678901\",\n    \"beneficiary_name\": \"Suresh Sharma\",\n    \"beneficiary_account_masked\": \"****0123\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Get Transfer by Client Reference",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/transfer/by-client-reference/:client_reference",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "transfer",
                    "by-client-reference",
                    ":client_reference"
                  ],
                  "variable": [
                    {
                      "key": "client_reference",
                      "value": "ORD-2026-000123",
                      "description": "The value you sent to POST /transfer"
                    }
                  ]
                },
                "description": "Look up a transfer by your own idempotency key\n\n**Key permission:** any valid API key\n\nThe safe way to answer \"did my transfer go through?\" after a timeout — it submits nothing. Returns `404 NOT_FOUND` if that reference never reached us, which means you may send it again.\n\nDocs: https://payonclick.in/developer/reference/dmt-transfer-by-client-ref"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/transfer/by-client-reference/:client_reference",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "transfer",
                        "by-client-reference",
                        ":client_reference"
                      ],
                      "variable": [
                        {
                          "key": "client_reference",
                          "value": "ORD-2026-000123",
                          "description": "The value you sent to POST /transfer"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"request_id\": \"VVN178645657668598151B51\",\n    \"client_reference\": \"ORD-2026-000123\",\n    \"status\": \"completed\",\n    \"amount\": 500.00,\n    \"charge_amount\": 5.00,\n    \"total_debit\": 505.00,\n    \"utr_number\": \"512345678901\",\n    \"beneficiary_name\": \"Suresh Sharma\",\n    \"beneficiary_account_masked\": \"****0123\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Transfer History",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/transactions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "transactions"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Optional. Default 1",
                      "disabled": true
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Optional. Default 20, max 100",
                      "disabled": true
                    },
                    {
                      "key": "status",
                      "value": "",
                      "description": "Optional. Filter by status",
                      "disabled": true
                    },
                    {
                      "key": "from_date",
                      "value": "2026-09-01",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    },
                    {
                      "key": "to_date",
                      "value": "2026-09-30",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    }
                  ]
                },
                "description": "Paginated transfer history\n\n**Key permission:** any valid API key\n\nDocs: https://payonclick.in/developer/reference/dmt-transactions"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/transactions",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "transactions"
                      ],
                      "query": [
                        {
                          "key": "page",
                          "value": "1",
                          "description": "Optional. Default 1",
                          "disabled": true
                        },
                        {
                          "key": "per_page",
                          "value": "20",
                          "description": "Optional. Default 20, max 100",
                          "disabled": true
                        },
                        {
                          "key": "status",
                          "value": "",
                          "description": "Optional. Filter by status",
                          "disabled": true
                        },
                        {
                          "key": "from_date",
                          "value": "2026-09-01",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        },
                        {
                          "key": "to_date",
                          "value": "2026-09-30",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"transactions\": [ /* ... */ ],\n    \"pagination\": { \"total\": 124, \"page\": 1, \"per_page\": 20, \"pages\": 7 }\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Balance & Charges",
          "item": [
            {
              "name": "Preview Charge",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/charges",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "charges"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"amount\": 1000.00\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Preview the charge before transferring\n\n**Key permission:** any valid API key\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `amount` (required) — Amount you intend to transfer\n\nDocs: https://payonclick.in/developer/reference/dmt-charges"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/charges",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "charges"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"amount\": 1000.00\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"amount\": 1000.00,\n    \"charge\": 10.00,\n    \"total_debit\": 1010.00\n  }\n}"
                }
              ]
            },
            {
              "name": "DMT Balance & Limits",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/dmt/balance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "dmt",
                    "balance"
                  ]
                },
                "description": "AEPS wallet balance and transfer limits\n\n**Key permission:** any valid API key\n\nRead these before every transfer rather than caching them. They come from operator-editable config, so a value that was right this morning can be wrong this afternoon.\n\nDocs: https://payonclick.in/developer/reference/dmt-balance"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/dmt/balance",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "dmt",
                        "balance"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"aeps_balance\": 10000.00,\n    \"currency\": \"INR\",\n    \"min_transfer\": 100,\n    \"max_transfer\": 50000,\n    \"daily_limit_per_beneficiary\": 200000\n  }\n}"
                }
              ]
            }
          ]
        }
      ],
      "description": "Domestic money transfer over IMPS. The remitter is verified by OTP once, which yields a sender_token used for beneficiary and transfer calls.\n\n**Free DMT works with selected banks only** — This is not a universal IMPS rail. Each bank is switched on individually by an operator, and at present only a handful are — so most IFSCs are refused. Start your integration at `GET /ext/v1/dmt/banks` and let your user pick from that list; `POST /beneficiary/add` rejects anything else with `422 BANK_NOT_SUPPORTED`, before a rupee moves.\n\n**Read the limits, don't hard-code them** — The per-transfer range and the per-beneficiary daily limit are set by the operator and can change without a version bump. `GET /ext/v1/dmt/balance` returns the values in force right now (`min_transfer`, `max_transfer`, `daily_limit_per_beneficiary`) — validate against those rather than the figures printed above.\n\nDocs: https://payonclick.in/developer/reference/dmt-overview"
    },
    {
      "name": "BBPS",
      "item": [
        {
          "name": "Biller Catalogue",
          "item": [
            {
              "name": "List Categories",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/categories",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "categories"
                  ]
                },
                "description": "All live categories with biller counts\n\n**Key permission:** any valid API key\n\n`is_available: false` means an operator has temporarily disabled that category; `unavailable_reason` carries the message to show your user. Safe to cache.\n\nDocs: https://payonclick.in/developer/reference/bbps-categories"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/categories",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "categories"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"categories\": [\n      {\n        \"slug\": \"broadband\",\n        \"name\": \"Broadband Postpaid\",\n        \"biller_count\": 380,\n        \"is_available\": true,\n        \"unavailable_reason\": null\n      },\n      {\n        \"slug\": \"cable-tv\",\n        \"name\": \"Cable TV\",\n        \"biller_count\": 67,\n        \"is_available\": true,\n        \"unavailable_reason\": null\n      }\n      /* ... 28 more */\n    ]\n  }\n}"
                }
              ]
            },
            {
              "name": "Search Billers",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/billers?category=electricity",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "billers"
                  ],
                  "query": [
                    {
                      "key": "category",
                      "value": "electricity",
                      "description": "Required. Category slug from /categories",
                      "disabled": false
                    },
                    {
                      "key": "q",
                      "value": "",
                      "description": "Optional. Filter by biller name",
                      "disabled": true
                    },
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Optional. Default 1",
                      "disabled": true
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Optional. Default 50, max 200",
                      "disabled": true
                    }
                  ]
                },
                "description": "Search billers inside a category\n\n**Key permission:** any valid API key\n\nDocs: https://payonclick.in/developer/reference/bbps-billers"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/billers?category=electricity",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "billers"
                      ],
                      "query": [
                        {
                          "key": "category",
                          "value": "electricity",
                          "description": "Required. Category slug from /categories",
                          "disabled": false
                        },
                        {
                          "key": "q",
                          "value": "",
                          "description": "Optional. Filter by biller name",
                          "disabled": true
                        },
                        {
                          "key": "page",
                          "value": "1",
                          "description": "Optional. Default 1",
                          "disabled": true
                        },
                        {
                          "key": "per_page",
                          "value": "20",
                          "description": "Optional. Default 50, max 200",
                          "disabled": true
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"category\": { \"slug\": \"electricity\", \"name\": \"Electricity\" },\n    \"billers\": [\n      {\n        \"biller_id\": \"RELI00000MUM03\",\n        \"biller_name\": \"Adani Electricity Mumbai Limited\",\n        \"adhoc\": false,\n        \"fetch_requirement\": \"MANDATORY\",\n        \"payment_exactness\": \"Exact\"\n      },\n      {\n        \"biller_id\": \"AVVNL0000RAJ01\",\n        \"biller_name\": \"Ajmer Vidyut Vitran Nigam Limited (AVVNL)\",\n        \"adhoc\": false,\n        \"fetch_requirement\": \"MANDATORY\",\n        \"payment_exactness\": \"Exact\"\n      }\n    ],\n    \"pagination\": { \"total\": 81, \"page\": 1, \"per_page\": 50, \"pages\": 2 }\n  }\n}"
                }
              ]
            },
            {
              "name": "Get Biller Details",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/biller/:biller_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "biller",
                    ":biller_id"
                  ],
                  "variable": [
                    {
                      "key": "biller_id",
                      "value": "RELI00000MUM03",
                      "description": "Biller id from /billers"
                    }
                  ]
                },
                "description": "The exact input fields this biller requires\n\n**Key permission:** any valid API key\n\n**Never skip this call.** Every biller names its fields differently — Adani wants a 9-digit `Consumer number`, AVVNL a 12-digit `K Number`. Echo each `param_name` verbatim into `/bill/fetch`, or Bharat Connect returns `E135`. The `adhoc` flag decides the whole downstream flow.\n\nDocs: https://payonclick.in/developer/reference/bbps-biller"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/biller/:biller_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "biller",
                        ":biller_id"
                      ],
                      "variable": [
                        {
                          "key": "biller_id",
                          "value": "RELI00000MUM03",
                          "description": "Biller id from /billers"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"biller_id\": \"RELI00000MUM03\",\n    \"biller_name\": \"Adani Electricity Mumbai Limited\",\n    \"category\": \"Electricity\",\n    \"category_slug\": \"electricity\",\n    \"adhoc\": false,\n    \"fetch_requirement\": \"MANDATORY\",\n    \"payment_exactness\": \"Exact\",\n    \"payment_channel\": \"AGT\",\n    \"payment_mode\": \"Cash\",\n    \"supports_agent_channel\": true,\n    \"is_available\": true,\n    \"unavailable_reason\": null,\n    \"input_params\": [\n      {\n        \"param_name\": \"Consumer number\",\n        \"data_type\": \"NUMERIC\",\n        \"is_optional\": false,\n        \"min_length\": 9,\n        \"max_length\": 9,\n        \"allowed_values\": []\n      }\n    ]\n  }\n}"
                },
                {
                  "name": "200 OK · ad-hoc biller",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/biller/:biller_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "biller",
                        ":biller_id"
                      ],
                      "variable": [
                        {
                          "key": "biller_id",
                          "value": "RELI00000MUM03",
                          "description": "Biller id from /billers"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"biller_id\": \"TATASKY00NAT01\",\n    \"biller_name\": \"TATA Play\",\n    \"category_slug\": \"dth\",\n    \"adhoc\": true,\n    \"fetch_requirement\": \"NOT_SUPPORTED\",\n    \"payment_channel\": \"AGT\",\n    \"is_available\": true,\n    \"input_params\": [\n      { \"param_name\": \"Mobile Number\",     \"data_type\": \"NUMERIC\", \"is_optional\": true, \"min_length\": 10, \"max_length\": 10 },\n      { \"param_name\": \"Subscriber Number\", \"data_type\": \"NUMERIC\", \"is_optional\": true, \"min_length\": 10, \"max_length\": 10 }\n    ]\n  }\n}"
                }
              ]
            },
            {
              "name": "BBPS Balance & Limits",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/balance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "balance"
                  ]
                },
                "description": "MAIN wallet balance and payment limits\n\n**Key permission:** any valid API key\n\nDocs: https://payonclick.in/developer/reference/bbps-balance"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/balance",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "balance"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"main_balance\": 45230.50,\n    \"currency\": \"INR\",\n    \"min_amount\": 1.0,\n    \"max_amount\": 200000.0\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Fetch & Pay",
          "item": [
            {
              "name": "Fetch Bill",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/bill/fetch",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "bill",
                    "fetch"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"biller_id\": \"RELI00000MUM03\",\n  \"customer_params\": [\n    { \"paramName\": \"Consumer number\", \"paramValue\": \"123456789\" }\n  ],\n  \"mobile_number\": \"9876543210\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Fetch the live bill and open a payment context\n\n**Key permission:** `bills` or `transfer`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `biller_id` (required) — From /billers\n- `customer_params` (required) — [{ paramName, paramValue }] matching /biller/{id}\n- `mobile_number` (required) — Customer 10-digit mobile\n\nAn ad-hoc biller still issues a `bill_token` with `allow_manual_amount: true` — supply your own amount at payment. A _mandatory-fetch_ biller with no bill returns `422 BILL_FETCH_FAILED` and no token, so it can never be paid blind.\n\nDocs: https://payonclick.in/developer/reference/bbps-bill-fetch"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/bill/fetch",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "bill",
                        "fetch"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"biller_id\": \"RELI00000MUM03\",\n  \"customer_params\": [\n    { \"paramName\": \"Consumer number\", \"paramValue\": \"123456789\" }\n  ],\n  \"mobile_number\": \"9876543210\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"bill_token\": \"64f8b07e69bfe3bc4ad59771...\",\n    \"fetch_status\": \"SUCCESS\",\n    \"biller_id\": \"RELI00000MUM03\",\n    \"biller_name\": \"Adani Electricity Mumbai Limited\",\n    \"category_slug\": \"electricity\",\n    \"payment_exactness\": \"Exact\",\n    \"allow_manual_amount\": false,\n    \"bill\": {\n      \"customer_name\": \"RAMESH KUMAR\",\n      \"bill_amount\": 1102.50,\n      \"bill_number\": \"PB/2026/07/8891\",\n      \"bill_date\": \"2026-07-05\",\n      \"bill_period\": \"JUL-2026\",\n      \"due_date\": \"2026-07-25\",\n      \"minimum_due\": \"\",\n      \"amount_options\": [],\n      \"additional_info\": [\n        { \"name\": \"Meter Number\", \"value\": \"MTR8891\" }\n      ]\n    },\n    \"expires_in\": 900\n  }\n}"
                },
                {
                  "name": "200 OK · ad-hoc biller",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/bill/fetch",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "bill",
                        "fetch"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"biller_id\": \"RELI00000MUM03\",\n  \"customer_params\": [\n    { \"paramName\": \"Consumer number\", \"paramValue\": \"123456789\" }\n  ],\n  \"mobile_number\": \"9876543210\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"bill_token\": \"64f8b07e69bfe3bc4ad59771311909dd...\",\n    \"fetch_status\": \"FAILED\",\n    \"error_code\": \"BRP046\",\n    \"message\": \"Fetch Request not supported, only QuickPay permitted\",\n    \"biller_id\": \"TATASKY00NAT01\",\n    \"biller_name\": \"TATA Play\",\n    \"category_slug\": \"dth\",\n    \"allow_manual_amount\": true,\n    \"bill\": null,\n    \"expires_in\": 900\n  }\n}"
                }
              ]
            },
            {
              "name": "Pay Bill",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/bill/pay",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "bill",
                    "pay"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"bill_token\": \"64f8b07e69bfe3bc4ad59771...\",\n  \"amount\": 1102.50,\n  \"tpin\": \"{{tpin}}\",\n  \"client_reference\": \"ORD-2026-000123\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Pay against the bill_token — TPIN and idempotency key required\n\n**Key permission:** `bills` or `transfer`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `bill_token` (required) — From /bill/fetch, valid 15 minutes\n- `amount` (required) — ₹1 – ₹2,00,000\n- `tpin` (required) — Your account TPIN\n- `client_reference` (required) — Your unique id — the idempotency key\n\nRe-sending the same `client_reference` returns the **original** transaction with `duplicate: true` — it never pays twice. On a timeout, always retry with the same value.\n\nDocs: https://payonclick.in/developer/reference/bbps-bill-pay"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/bill/pay",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "bill",
                        "pay"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"bill_token\": \"64f8b07e69bfe3bc4ad59771...\",\n  \"amount\": 1102.50,\n  \"tpin\": \"{{tpin}}\",\n  \"client_reference\": \"ORD-2026-000123\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"BBPSA2026072918301291a3f1\",\n    \"client_reference\": \"ORD-2026-000123\",\n    \"status\": \"SUCCESS\",\n    \"bbps_txn_id\": \"CC016103CBAC64888712\",\n    \"approval_ref\": \"335645594921971\",\n    \"amount\": 1102.50,\n    \"biller_id\": \"RELI00000MUM03\",\n    \"biller_name\": \"Adani Electricity Mumbai Limited\",\n    \"customer_reference\": \"123456789\",\n    \"message\": \"Successful\",\n    \"refunded\": false,\n    \"duplicate\": false\n  }\n}"
                },
                {
                  "name": "200 OK · replayed",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/bill/pay",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "bill",
                        "pay"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"bill_token\": \"64f8b07e69bfe3bc4ad59771...\",\n  \"amount\": 1102.50,\n  \"tpin\": \"{{tpin}}\",\n  \"client_reference\": \"ORD-2026-000123\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"BBPSA2026072918301291a3f1\",\n    \"client_reference\": \"ORD-2026-000123\",\n    \"status\": \"SUCCESS\",\n    \"duplicate\": true\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Status, History & Complaints",
          "item": [
            {
              "name": "Get Transaction",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/transaction/:reference_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "transaction",
                    ":reference_id"
                  ],
                  "variable": [
                    {
                      "key": "reference_id",
                      "value": "BBPSA2026072918301291a3f1",
                      "description": "From POST /bill/pay"
                    }
                  ]
                },
                "description": "Single transaction — re-checks the biller while PENDING\n\n**Key permission:** any valid API key\n\nWhile the transaction is PENDING this endpoint re-queries Bharat Connect — but only once the payment is **at least 120 seconds old**. Bharat Connect does not register a transaction instantly, and an earlier check can come back \"no record\", which classifies as FAILED and would refund a payment the biller later accepts. So a poll inside the first two minutes returns the stored PENDING row without contacting the biller: **wait 120s before your first poll**, then poll every 30–60s. If the biller reports failure the wallet refund is issued _before_ the response returns FAILED.\n\nDocs: https://payonclick.in/developer/reference/bbps-transaction"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/transaction/:reference_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "transaction",
                        ":reference_id"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "BBPSA2026072918301291a3f1",
                          "description": "From POST /bill/pay"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"BBPSA2026072918301291a3f1\",\n    \"client_reference\": \"ORD-2026-000123\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 1102.50,\n    \"biller_id\": \"RELI00000MUM03\",\n    \"biller_name\": \"Adani Electricity Mumbai Limited\",\n    \"bbps_txn_id\": \"CC016103CBAC64888712\",\n    \"approval_ref\": \"335645594921971\",\n    \"response_code\": \"000\",\n    \"message\": \"Successful\",\n    \"refunded\": false,\n    \"created_at\": \"2026-07-29T18:30:12\",\n    \"updated_at\": \"2026-07-29T18:30:15\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Get Transaction by Client Reference",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/transaction/by-client-reference/:client_reference",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "transaction",
                    "by-client-reference",
                    ":client_reference"
                  ],
                  "variable": [
                    {
                      "key": "client_reference",
                      "value": "ORD-2026-000123",
                      "description": "The key you sent to /bill/pay"
                    }
                  ]
                },
                "description": "Look up by your own idempotency key\n\n**Key permission:** any valid API key\n\nDocs: https://payonclick.in/developer/reference/bbps-transaction-by-client-ref"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/transaction/by-client-reference/:client_reference",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "transaction",
                        "by-client-reference",
                        ":client_reference"
                      ],
                      "variable": [
                        {
                          "key": "client_reference",
                          "value": "ORD-2026-000123",
                          "description": "The key you sent to /bill/pay"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"BBPSA2026072918301291a3f1\",\n    \"client_reference\": \"ORD-2026-000123\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 1102.50\n  }\n}"
                }
              ]
            },
            {
              "name": "Bill Payment History",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/transactions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "transactions"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Optional. Default 1",
                      "disabled": true
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Optional. Default 20, max 100",
                      "disabled": true
                    },
                    {
                      "key": "status",
                      "value": "",
                      "description": "Optional. PENDING | SUCCESS | FAILED | REFUNDED",
                      "disabled": true
                    },
                    {
                      "key": "from_date",
                      "value": "2026-09-01",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    },
                    {
                      "key": "to_date",
                      "value": "2026-09-30",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    }
                  ]
                },
                "description": "Paginated bill payment history\n\n**Key permission:** any valid API key\n\nDocs: https://payonclick.in/developer/reference/bbps-transactions"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/transactions",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "transactions"
                      ],
                      "query": [
                        {
                          "key": "page",
                          "value": "1",
                          "description": "Optional. Default 1",
                          "disabled": true
                        },
                        {
                          "key": "per_page",
                          "value": "20",
                          "description": "Optional. Default 20, max 100",
                          "disabled": true
                        },
                        {
                          "key": "status",
                          "value": "",
                          "description": "Optional. PENDING | SUCCESS | FAILED | REFUNDED",
                          "disabled": true
                        },
                        {
                          "key": "from_date",
                          "value": "2026-09-01",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        },
                        {
                          "key": "to_date",
                          "value": "2026-09-30",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"transactions\": [\n      {\n        \"reference_id\": \"BBPS202604131443435\",\n        \"client_reference\": null,\n        \"status\": \"SUCCESS\",\n        \"amount\": 639.0,\n        \"biller_id\": \"DHBVN0000HAR01\",\n        \"biller_name\": \"Dakshin Haryana Bijli Vitran Nigam (DHBVN)\",\n        \"category\": \"Electricity\",\n        \"bbps_txn_id\": \"CC016103CBAC64888712\",\n        \"approval_ref\": \"335645594921971\",\n        \"response_code\": \"000\",\n        \"message\": \"Successful\",\n        \"refunded\": false,\n        \"created_at\": \"2026-04-13T14:43:43\"\n      }\n    ],\n    \"pagination\": { \"total\": 6, \"page\": 1, \"per_page\": 20, \"pages\": 1 }\n  }\n}"
                }
              ]
            },
            {
              "name": "Raise Complaint",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/complaint",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "complaint"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"reference_id\": \"BBPSA2026072918301291a3f1\",\n  \"complaint_type\": \"amount_not_adjusted\",\n  \"description\": \"Amount debited but bill still shows due\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Raise a Bharat Connect complaint on a SUCCESS transaction\n\n**Key permission:** `bills` or `transfer`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `reference_id` (required) — Your transaction reference\n- `complaint_type` (required) — See the note below\n- `description` (required) — Max 255 characters\n\nValid `complaint_type`: `amount_not_adjusted`, `duplicate_payment`, `wrong_amount`, `wrong_account`, `service_not_received`, `service_disconnected`.\n\nDocs: https://payonclick.in/developer/reference/bbps-complaint"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/complaint",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "complaint"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"reference_id\": \"BBPSA2026072918301291a3f1\",\n  \"complaint_type\": \"amount_not_adjusted\",\n  \"description\": \"Amount debited but bill still shows due\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"complaint_id\": \"CMP123456789\",\n    \"assigned_to\": \"BILLER\",\n    \"reference_id\": \"BBPSA2026072918301291a3f1\",\n    \"bbps_txn_id\": \"CC016103CBAC64888712\",\n    \"message\": \"Complaint registered successfully\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Track Complaint",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/bbps/complaint/:complaint_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "bbps",
                    "complaint",
                    ":complaint_id"
                  ],
                  "variable": [
                    {
                      "key": "complaint_id",
                      "value": "CMP123456789",
                      "description": "From POST /complaint"
                    }
                  ]
                },
                "description": "Track a registered complaint\n\n**Key permission:** any valid API key\n\nDocs: https://payonclick.in/developer/reference/bbps-complaint-status"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/bbps/complaint/:complaint_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "bbps",
                        "complaint",
                        ":complaint_id"
                      ],
                      "variable": [
                        {
                          "key": "complaint_id",
                          "value": "CMP123456789",
                          "description": "From POST /complaint"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"complaint_id\": \"CMP123456789\",\n    \"complaint_status\": \"RESOLVED\",\n    \"remarks\": \"Amount credited to consumer account\",\n    \"assigned_to\": \"BILLER\"\n  }\n}"
                }
              ]
            }
          ]
        }
      ],
      "description": "Bharat Connect bill payments across 30 categories and 22,000+ billers. Read the biller catalogue, fetch the live bill, then pay against the token the fetch returns.\n\n**PENDING is not a failure** — Bharat Connect does not register a transaction the instant it is submitted. Never re-send a PENDING payment under a new `client_reference` — poll `/transaction/{reference_id}` instead. A FAILED payment is refunded automatically under `REV-<reference_id>`, so nothing is owed.\n\nDocs: https://payonclick.in/developer/reference/bbps-overview"
    },
    {
      "name": "Recharge",
      "item": [
        {
          "name": "Operators & Quote",
          "item": [
            {
              "name": "List Operators",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/recharge/operators",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "recharge",
                    "operators"
                  ],
                  "query": [
                    {
                      "key": "service",
                      "value": "PREPAID",
                      "description": "Optional. PREPAID or DTH. Both when omitted",
                      "disabled": true
                    }
                  ]
                },
                "description": "Every operator you can recharge, with its operator_id\n\n**Key permission:** any valid API key\n\nRead `operator_id` from this list; never hard-code it from this page. The IDs above are examples. `is_available: false` means the operator cannot be recharged right now, or that the service is not enabled on your account. `unavailable_reason` carries the message to show. The list changes rarely, so cache it for a few minutes and re-read it when a recharge answers `OPERATOR_UNAVAILABLE`.\n\nDocs: https://payonclick.in/developer/reference/recharge-operators"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/recharge/operators",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "recharge",
                        "operators"
                      ],
                      "query": [
                        {
                          "key": "service",
                          "value": "PREPAID",
                          "description": "Optional. PREPAID or DTH. Both when omitted",
                          "disabled": true
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"operators\": [\n      {\n        \"operator_id\": 1,\n        \"name\": \"Airtel\",\n        \"service\": \"PREPAID\",\n        \"is_available\": true,\n        \"unavailable_reason\": null\n      },\n      {\n        \"operator_id\": 2,\n        \"name\": \"Jio\",\n        \"service\": \"PREPAID\",\n        \"is_available\": true,\n        \"unavailable_reason\": null\n      },\n      {\n        \"operator_id\": 101,\n        \"name\": \"Airtel Digital TV\",\n        \"service\": \"DTH\",\n        \"is_available\": true,\n        \"unavailable_reason\": null\n      }\n      /* ... */\n    ],\n    \"count\": 12\n  }\n}"
                }
              ]
            },
            {
              "name": "Preview Debit",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/recharge/quote?operator_id=2&amount=199",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "recharge",
                    "quote"
                  ],
                  "query": [
                    {
                      "key": "operator_id",
                      "value": "2",
                      "description": "Required. From /operators",
                      "disabled": false
                    },
                    {
                      "key": "amount",
                      "value": "199",
                      "description": "Required. Recharge amount in whole rupees",
                      "disabled": false
                    }
                  ]
                },
                "description": "What a recharge would debit from your MAIN wallet\n\n**Key permission:** any valid API key\n\nComputed by the same function the recharge itself uses, so `total_debit` is exactly what `POST /recharge` will debit. `charge` is any charge on your plan. Any commission on your plan is credited to MAIN after the recharge succeeds. Calling this is optional; it moves no money.\n\nDocs: https://payonclick.in/developer/reference/recharge-quote"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/recharge/quote?operator_id=2&amount=199",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "recharge",
                        "quote"
                      ],
                      "query": [
                        {
                          "key": "operator_id",
                          "value": "2",
                          "description": "Required. From /operators",
                          "disabled": false
                        },
                        {
                          "key": "amount",
                          "value": "199",
                          "description": "Required. Recharge amount in whole rupees",
                          "disabled": false
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"operator_id\": 2,\n    \"operator_name\": \"Jio\",\n    \"service\": \"PREPAID\",\n    \"amount\": 199.0,\n    \"charge\": 0.0,\n    \"total_debit\": 199.0,\n    \"wallet_balance\": 45230.50,\n    \"sufficient\": true\n  }\n}"
                }
              ]
            },
            {
              "name": "Recharge Balance & Limits",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/recharge/balance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "recharge",
                    "balance"
                  ]
                },
                "description": "MAIN wallet balance and recharge limits\n\n**Key permission:** any valid API key\n\nRecharges are debited from the **MAIN** wallet, the same wallet BBPS uses. `GET /ext/v1/balance` returns every wallet and every product in one call.\n\nDocs: https://payonclick.in/developer/reference/recharge-balance"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/recharge/balance",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "recharge",
                        "balance"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"main_balance\": 45230.50,\n    \"currency\": \"INR\",\n    \"min_amount\": 1,\n    \"max_amount\": 50000\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Recharge",
          "item": [
            {
              "name": "Recharge Mobile / DTH",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/recharge/recharge",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "recharge",
                    "recharge"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"operator_id\": 2,\n  \"number\": \"9876543210\",\n  \"amount\": 199,\n  \"tpin\": \"{{tpin}}\",\n  \"client_reference\": \"RC-2026-000123\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Recharge a prepaid mobile or a DTH account. Needs your TPIN and an idempotency key\n\n**Key permission:** `recharge`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `operator_id` (required) — From /operators. It also decides PREPAID or DTH\n- `number` (required) — PREPAID: 10-digit mobile (+91 / 0 prefix is stripped). DTH: subscriber / customer ID, 4–20 letters or digits\n- `amount` (required) — ₹1 – ₹50,000, whole rupees\n- `tpin` (required) — Your account TPIN\n- `client_reference` (required) — Your unique id and the idempotency key. 1–64 characters: letters, digits, hyphen, underscore\n\n**Retry a timeout with the same `client_reference`.** Re-sending it returns the _original_ recharge with `duplicate: true` and recharges nothing. The key is claimed by a database unique index _before_ your wallet is touched, so even two simultaneous requests produce one recharge. It is scoped to your account. \n\nThe HTTP status tells you the outcome: `201` for SUCCESS and PENDING, and `200` for FAILED, which is still `success: true` because the request itself was handled. `reference_id` is our id for the recharge; store it as opaque text. `operator_ref` is the reference from the operator network; quote it in a customer dispute. It can be `null` until the operator confirms. Requests that fail validation (`INVALID_NUMBER`, `INVALID_AMOUNT`, `INSUFFICIENT_BALANCE`, `INVALID_TPIN`) create no recharge and debit nothing.\n\nDocs: https://payonclick.in/developer/reference/recharge-submit"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/recharge/recharge",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "recharge",
                        "recharge"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"operator_id\": 2,\n  \"number\": \"9876543210\",\n  \"amount\": 199,\n  \"tpin\": \"{{tpin}}\",\n  \"client_reference\": \"RC-2026-000123\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"RCG2451789212345A1B2C3\",\n    \"client_reference\": \"RC-2026-000123\",\n    \"status\": \"SUCCESS\",\n    \"service\": \"PREPAID\",\n    \"operator_id\": 2,\n    \"operator_name\": \"Jio\",\n    \"number\": \"9876543210\",\n    \"amount\": 199.0,\n    \"total_debit\": 199.0,\n    \"operator_ref\": \"BR000CXYZ12345\",\n    \"message\": \"Recharge successful\",\n    \"failure_code\": null,\n    \"refunded\": false,\n    \"created_at\": \"2026-09-12T11:25:45\",\n    \"updated_at\": \"2026-09-12T11:25:48\",\n    \"duplicate\": false\n  }\n}"
                },
                {
                  "name": "200 OK · replayed",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/recharge/recharge",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "recharge",
                        "recharge"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"operator_id\": 2,\n  \"number\": \"9876543210\",\n  \"amount\": 199,\n  \"tpin\": \"{{tpin}}\",\n  \"client_reference\": \"RC-2026-000123\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"RCG2451789212345A1B2C3\",\n    \"client_reference\": \"RC-2026-000123\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 199.0,\n    \"duplicate\": true\n    /* ... the original recharge, unchanged ... */\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Status & History",
          "item": [
            {
              "name": "Get Recharge",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/recharge/transaction/:reference_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "recharge",
                    "transaction",
                    ":reference_id"
                  ],
                  "variable": [
                    {
                      "key": "reference_id",
                      "value": "RCG2451789212345A1B2C3",
                      "description": "From POST /recharge"
                    }
                  ]
                },
                "description": "One recharge and its current status\n\n**Key permission:** any valid API key\n\n`status` is `SUCCESS`, `PENDING` or `FAILED`. This endpoint reads the stored state and never calls the operator. Operator callbacks update a recharge within seconds, and every PENDING recharge is re-checked every 2 minutes, so polling more often than every 30 seconds gains nothing. `refunded: true` on a FAILED recharge means the debit is back in your MAIN wallet, or was never taken. \n\n**`failure_code`** (FAILED only) is stable and safe to branch on: `INVALID_NUMBER` (wrong number or operator), `INVALID_AMOUNT` (plan or denomination not accepted), `DUPLICATE_RECHARGE` (the same number and amount were recharged moments ago; wait before retrying), `OPERATOR_UNAVAILABLE` (the operator is down; retry later), `INSUFFICIENT_BALANCE`, `NOT_SUBMITTED` (never reached the operator) and `OPERATOR_FAILED` (any other operator decline). After a FAILED recharge a fresh attempt needs a _new_ `client_reference`.\n\nDocs: https://payonclick.in/developer/reference/recharge-transaction"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/recharge/transaction/:reference_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "recharge",
                        "transaction",
                        ":reference_id"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "RCG2451789212345A1B2C3",
                          "description": "From POST /recharge"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"RCG2451789212345A1B2C3\",\n    \"client_reference\": \"RC-2026-000123\",\n    \"status\": \"SUCCESS\",\n    \"service\": \"PREPAID\",\n    \"operator_id\": 2,\n    \"operator_name\": \"Jio\",\n    \"number\": \"9876543210\",\n    \"amount\": 199.0,\n    \"total_debit\": 199.0,\n    \"operator_ref\": \"BR000CXYZ12345\",\n    \"message\": \"Recharge successful\",\n    \"failure_code\": null,\n    \"refunded\": false,\n    \"created_at\": \"2026-09-12T11:25:45\",\n    \"updated_at\": \"2026-09-12T11:25:48\"\n  }\n}"
                },
                {
                  "name": "200 OK · failed recharge",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/recharge/transaction/:reference_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "recharge",
                        "transaction",
                        ":reference_id"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "RCG2451789212345A1B2C3",
                          "description": "From POST /recharge"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"RCG2451789212399F0E1D2\",\n    \"client_reference\": \"RC-2026-000124\",\n    \"status\": \"FAILED\",\n    \"service\": \"DTH\",\n    \"operator_id\": 104,\n    \"operator_name\": \"Tata Sky\",\n    \"number\": \"1234567890\",\n    \"amount\": 350.0,\n    \"total_debit\": 350.0,\n    \"operator_ref\": null,\n    \"message\": \"The operator rejected this number. Check the number and the operator.\",\n    \"failure_code\": \"INVALID_NUMBER\",\n    \"refunded\": true,\n    \"created_at\": \"2026-09-12T11:31:02\",\n    \"updated_at\": \"2026-09-12T11:31:04\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Get Recharge by Client Reference",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/recharge/transaction/by-client-reference/:client_reference",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "recharge",
                    "transaction",
                    "by-client-reference",
                    ":client_reference"
                  ],
                  "variable": [
                    {
                      "key": "client_reference",
                      "value": "RC-2026-000123",
                      "description": "The value you sent to POST /recharge"
                    }
                  ]
                },
                "description": "Look up a recharge by your own idempotency key\n\n**Key permission:** any valid API key\n\nThe safe answer to \"did my recharge go through?\" after a timeout. It submits nothing. `404 NOT_FOUND` means that reference never reached us, so you may send it again.\n\nDocs: https://payonclick.in/developer/reference/recharge-transaction-by-client-ref"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/recharge/transaction/by-client-reference/:client_reference",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "recharge",
                        "transaction",
                        "by-client-reference",
                        ":client_reference"
                      ],
                      "variable": [
                        {
                          "key": "client_reference",
                          "value": "RC-2026-000123",
                          "description": "The value you sent to POST /recharge"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"RCG2451789212345A1B2C3\",\n    \"client_reference\": \"RC-2026-000123\",\n    \"status\": \"PENDING\",\n    \"amount\": 199.0,\n    \"total_debit\": 199.0,\n    \"message\": \"Recharge is being processed by the operator\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Recharge History",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/recharge/transactions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "recharge",
                    "transactions"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Optional. Default 1",
                      "disabled": true
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Optional. Default 20, max 100",
                      "disabled": true
                    },
                    {
                      "key": "status",
                      "value": "",
                      "description": "Optional. SUCCESS | PENDING | FAILED",
                      "disabled": true
                    },
                    {
                      "key": "service",
                      "value": "PREPAID",
                      "description": "Optional. PREPAID | DTH",
                      "disabled": true
                    },
                    {
                      "key": "number",
                      "value": "",
                      "description": "Optional. Exact mobile number or subscriber ID",
                      "disabled": true
                    },
                    {
                      "key": "from_date",
                      "value": "2026-09-01",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    },
                    {
                      "key": "to_date",
                      "value": "2026-09-30",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    }
                  ]
                },
                "description": "Paginated recharge history\n\n**Key permission:** any valid API key\n\nNewest first. Includes recharges made from the Payonclick panel on the same account; those carry `client_reference: null`.\n\nDocs: https://payonclick.in/developer/reference/recharge-transactions"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/recharge/transactions",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "recharge",
                        "transactions"
                      ],
                      "query": [
                        {
                          "key": "page",
                          "value": "1",
                          "description": "Optional. Default 1",
                          "disabled": true
                        },
                        {
                          "key": "per_page",
                          "value": "20",
                          "description": "Optional. Default 20, max 100",
                          "disabled": true
                        },
                        {
                          "key": "status",
                          "value": "",
                          "description": "Optional. SUCCESS | PENDING | FAILED",
                          "disabled": true
                        },
                        {
                          "key": "service",
                          "value": "PREPAID",
                          "description": "Optional. PREPAID | DTH",
                          "disabled": true
                        },
                        {
                          "key": "number",
                          "value": "",
                          "description": "Optional. Exact mobile number or subscriber ID",
                          "disabled": true
                        },
                        {
                          "key": "from_date",
                          "value": "2026-09-01",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        },
                        {
                          "key": "to_date",
                          "value": "2026-09-30",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"transactions\": [\n      {\n        \"reference_id\": \"RCG2451789212345A1B2C3\",\n        \"client_reference\": \"RC-2026-000123\",\n        \"status\": \"SUCCESS\",\n        \"service\": \"PREPAID\",\n        \"operator_name\": \"Jio\",\n        \"number\": \"9876543210\",\n        \"amount\": 199.0,\n        \"operator_ref\": \"BR000CXYZ12345\",\n        \"refunded\": false,\n        \"created_at\": \"2026-09-12T11:25:45\"\n      }\n    ],\n    \"pagination\": { \"total\": 1, \"page\": 1, \"per_page\": 20, \"pages\": 1 }\n  }\n}"
                }
              ]
            }
          ]
        }
      ],
      "description": "Prepaid mobile and DTH recharge across the major Indian operators, paid from your MAIN wallet. Pick an operator, preview the debit, recharge with your own idempotency key, then read the status or take the webhook.\n\n**PENDING is not a failure** — Most recharges are confirmed by the operator within seconds; some take a few minutes. A PENDING recharge is already with the operator, so never send it again under a new `client_reference` — that recharges the number twice. Poll `/transaction/{reference_id}` every 30–60 seconds or subscribe to the `recharge.*` webhooks. It always settles to SUCCESS or FAILED, and the debit of a FAILED recharge is released back to your MAIN wallet automatically.\n\n**You choose the operator** — The API recharges the operator and amount you send. It does not detect a number's operator or circle, and it does not list plans. A number that was ported (MNP) must be sent with its _current_ operator; otherwise the operator rejects it with `failure_code: INVALID_NUMBER` and the debit is released.\n\nDocs: https://payonclick.in/developer/reference/recharge-overview"
    },
    {
      "name": "AEPS",
      "item": [
        {
          "name": "Reference & Wallet",
          "item": [
            {
              "name": "List AEPS Banks",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/banks",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "banks"
                  ]
                },
                "description": "Banks that support AEPS, with the bank_iin every transaction needs\n\n**Key permission:** any valid API key\n\nSend the customer’s bank as `bank_iin`. Read it from this list and cache it for a day; never hard-code IINs from this page.\n\nDocs: https://payonclick.in/developer/reference/aeps-banks"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/banks",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "banks"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"banks\": [\n      { \"bank_iin\": \"607094\", \"name\": \"State Bank of India\" },\n      { \"bank_iin\": \"608001\", \"name\": \"Punjab National Bank\" },\n      { \"bank_iin\": \"508534\", \"name\": \"ICICI Bank\" }\n      /* ... */\n    ],\n    \"count\": 160\n  }\n}"
                }
              ]
            },
            {
              "name": "List States",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/states",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "states"
                  ]
                },
                "description": "State codes used when onboarding a merchant\n\n**Key permission:** any valid API key\n\n`state_code` and `shop_state_code` on `POST /merchants` must be one of these codes.\n\nDocs: https://payonclick.in/developer/reference/aeps-states"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/states",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "states"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"states\": [\n      { \"state_code\": 4, \"name\": \"Bihar\" },\n      { \"state_code\": 30, \"name\": \"Delhi\" },\n      { \"state_code\": 27, \"name\": \"Uttar Pradesh\" }\n      /* ... */\n    ],\n    \"count\": 36\n  }\n}"
                }
              ]
            },
            {
              "name": "Get PidOptions",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/pid-options?purpose=TXN&auth_mode=FP",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "pid-options"
                  ],
                  "query": [
                    {
                      "key": "purpose",
                      "value": "TXN",
                      "description": "Optional. TXN (default), DAILY_AUTH or EKYC",
                      "disabled": false
                    },
                    {
                      "key": "auth_mode",
                      "value": "FP",
                      "description": "Optional. FP (default), IRIS, or FACE (DAILY_AUTH only)",
                      "disabled": false
                    }
                  ]
                },
                "description": "The exact PidOptions XML to capture with on the RD service\n\n**Key permission:** any valid API key\n\nPOST this XML to the RD service’s `/rd/capture` (or pass it to its Android intent) and send the PidData it returns as `pid_data`. **eKYC needs `purpose=EKYC`**: its `wadh` is different, and a transaction-style capture is rejected at eKYC. For a CW or AP above ₹5,000 use `pid_options_with_otp` and replace `{OTP}` with the OTP the customer received.\n\nDocs: https://payonclick.in/developer/reference/aeps-pid-options"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/pid-options?purpose=TXN&auth_mode=FP",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "pid-options"
                      ],
                      "query": [
                        {
                          "key": "purpose",
                          "value": "TXN",
                          "description": "Optional. TXN (default), DAILY_AUTH or EKYC",
                          "disabled": false
                        },
                        {
                          "key": "auth_mode",
                          "value": "FP",
                          "description": "Optional. FP (default), IRIS, or FACE (DAILY_AUTH only)",
                          "disabled": false
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"purpose\": \"TXN\",\n    \"auth_mode\": \"FP\",\n    \"wadh\": \"\",\n    \"pid_options\": \"<?xml version=\\\"1.0\\\"?><PidOptions ver=\\\"1.0\\\"><Opts fCount=\\\"1\\\" fType=\\\"2\\\" iCount=\\\"0\\\" pCount=\\\"0\\\" format=\\\"0\\\" pidVer=\\\"2.0\\\" timeout=\\\"20000\\\" posh=\\\"UNKNOWN\\\" env=\\\"P\\\" wadh=\\\"\\\" /><CustOpts><Param name=\\\"mantrakey\\\" value=\\\"\\\" /></CustOpts></PidOptions>\",\n    \"pid_options_with_otp\": \"<?xml ...><Opts ... wadh=\\\"\\\" otp=\\\"{OTP}\\\" />...</PidOptions>\"\n  }\n}"
                }
              ]
            },
            {
              "name": "AEPS Balance & Limits",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/balance",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "balance"
                  ]
                },
                "description": "Your AEPS and MAIN wallet balances, and the AEPS limits\n\n**Key permission:** any valid API key\n\nCW and AP are credited to your **AEPS** wallet; CD, and any BE/MS charge, are debited from it. A daily-authentication charge is taken from AEPS, or from MAIN when AEPS is short.\n\nDocs: https://payonclick.in/developer/reference/aeps-balance"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/balance",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "balance"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"aeps_balance\": 48210.75,\n    \"main_balance\": 1520.00,\n    \"currency\": \"INR\",\n    \"limits\": {\n      \"CW\": { \"min_amount\": 100, \"max_amount\": 10000, \"multiple_of\": 50 },\n      \"AP\": { \"min_amount\": 1, \"max_amount\": 50000 },\n      \"CD\": { \"min_amount\": 100, \"max_amount\": 10000, \"whole_rupees\": true }\n    },\n    \"otp_above\": 5000\n  }\n}"
                }
              ]
            },
            {
              "name": "Preview Charges",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/charges?service=CW&amount=2500",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "charges"
                  ],
                  "query": [
                    {
                      "key": "service",
                      "value": "CW",
                      "description": "Required. CW, BE, MS, AP, CD or DAILY_AUTH",
                      "disabled": false
                    },
                    {
                      "key": "amount",
                      "value": "2500",
                      "description": "Optional. Required for CW, AP and CD",
                      "disabled": false
                    }
                  ]
                },
                "description": "Charge, commission and wallet impact of a transaction on your plan\n\n**Key permission:** any valid API key\n\nComputed by the same function the transaction uses. `wallet_impact` is the signed change to your AEPS wallet on success (positive = credit). Moves no money.\n\nDocs: https://payonclick.in/developer/reference/aeps-charges"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/charges?service=CW&amount=2500",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "charges"
                      ],
                      "query": [
                        {
                          "key": "service",
                          "value": "CW",
                          "description": "Required. CW, BE, MS, AP, CD or DAILY_AUTH",
                          "disabled": false
                        },
                        {
                          "key": "amount",
                          "value": "2500",
                          "description": "Optional. Required for CW, AP and CD",
                          "disabled": false
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"service\": \"CW\",\n    \"amount\": 2500.0,\n    \"charge\": 0.0,\n    \"commission\": 6.25,\n    \"wallet_impact\": 2506.25,\n    \"otp_required\": false\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Merchant Onboarding",
          "item": [
            {
              "name": "Onboard Merchant",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"first_name\": \"Ramesh\",\n  \"last_name\": \"Kumar\",\n  \"mobile\": \"9876543210\",\n  \"email\": \"ramesh@example.com\",\n  \"pan\": \"ABCDE1234F\",\n  \"aadhaar\": \"234123412346\",\n  \"shop_name\": \"Ramesh Telecom\",\n  \"address_line1\": \"12 Main Road\",\n  \"address_line2\": \"Near Bus Stand\",\n  \"city\": \"Patna\",\n  \"state_code\": 4,\n  \"pincode\": \"800001\",\n  \"bank_account_number\": \"12345678906789\",\n  \"bank_ifsc\": \"SBIN0001234\",\n  \"bank_name\": \"State Bank of India\",\n  \"bank_account_name\": \"Ramesh Kumar\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Register one of your outlets as an AEPS merchant (step 1)\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `merchant_ref` (required) — Your id for the outlet. 1–48 chars: letters, digits, hyphen, underscore. Unique per account\n- `first_name` (required) — Owner’s first name as on Aadhaar. Letters only\n- `middle_name` — Letters only\n- `last_name` (required) — Letters only; must differ from first_name\n- `mobile` (required) — Owner’s 10-digit mobile — linked to their Aadhaar (eKYC OTP goes here)\n- `email` — Owner’s email\n- `pan` (required) — Owner’s PAN, e.g. ABCDE1234F\n- `aadhaar` (required) — Owner’s 12-digit Aadhaar. Only the last 4 digits are stored\n- `shop_name` (required) — Outlet / business name\n- `address_line1` (required) — Owner’s address, line 1\n- `address_line2` (required) — Address, line 2 (locality / landmark)\n- `city` (required) — City\n- `district` — Defaults to city\n- `state_code` (required) — From GET /states\n- `pincode` (required) — 6-digit PIN code\n- `shop_address` — Outlet address, if different. Also shop_city, shop_district, shop_state_code, shop_pincode\n- `bank_account_number` (required) — Owner’s settlement bank account (6–20 digits)\n- `bank_ifsc` (required) — IFSC, e.g. SBIN0001234\n- `bank_name` (required) — Bank name (special characters are removed)\n- `bank_account_name` (required) — Account holder name\n- `gstin` — 15 characters, if registered\n- `latitude` (required) — Outlet GPS latitude\n- `longitude` (required) — Outlet GPS longitude\n- `pan_image` — Base64 JPEG/PNG of the PAN card, under 500 KB. Also aadhaar_image, shop_image\n\nOnboarding is synchronous: `201` means the outlet is registered and `next_step` is `EKYC`. Sending the same `merchant_ref` again for a registered outlet returns it with `duplicate: true` and changes nothing. After `ONBOARDING_FAILED`, or when a later step answers `REONBOARD_REQUIRED` (the bank account could not be verified), fix the details and send `POST /merchants` again with the _same_ `merchant_ref`. Use the owner’s own Aadhaar-linked mobile and own bank account: eKYC verifies both against Aadhaar.\n\nDocs: https://payonclick.in/developer/reference/aeps-merchant-onboard"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"first_name\": \"Ramesh\",\n  \"last_name\": \"Kumar\",\n  \"mobile\": \"9876543210\",\n  \"email\": \"ramesh@example.com\",\n  \"pan\": \"ABCDE1234F\",\n  \"aadhaar\": \"234123412346\",\n  \"shop_name\": \"Ramesh Telecom\",\n  \"address_line1\": \"12 Main Road\",\n  \"address_line2\": \"Near Bus Stand\",\n  \"city\": \"Patna\",\n  \"state_code\": 4,\n  \"pincode\": \"800001\",\n  \"bank_account_number\": \"12345678906789\",\n  \"bank_ifsc\": \"SBIN0001234\",\n  \"bank_name\": \"State Bank of India\",\n  \"bank_account_name\": \"Ramesh Kumar\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"merchant_code\": \"POCAP1001M27\",\n    \"name\": \"Ramesh Kumar\",\n    \"shop_name\": \"Ramesh Telecom\",\n    \"mobile\": \"9876543210\",\n    \"aadhaar\": \"XXXXXXXX2346\",\n    \"bank_account\": \"XXXX6789\",\n    \"bank_ifsc\": \"SBIN0001234\",\n    \"status\": \"EKYC_PENDING\",\n    \"status_message\": null,\n    \"ekyc\": { \"status\": \"PENDING\", \"completed_at\": null },\n    \"bank_ekyc\": { \"status\": \"PENDING\", \"completed_at\": null },\n    \"otp_pending\": null,\n    \"daily_auth\": {\n      \"AEPS\": { \"done_today\": false, \"authenticated_at\": null },\n      \"AP\": { \"done_today\": false, \"authenticated_at\": null }\n    },\n    \"next_step\": \"EKYC\",\n    \"created_at\": \"2026-10-08T11:02:10\",\n    \"updated_at\": \"2026-10-08T11:02:14\",\n    \"duplicate\": false\n  }\n}"
                },
                {
                  "name": "422 · not accepted",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"first_name\": \"Ramesh\",\n  \"last_name\": \"Kumar\",\n  \"mobile\": \"9876543210\",\n  \"email\": \"ramesh@example.com\",\n  \"pan\": \"ABCDE1234F\",\n  \"aadhaar\": \"234123412346\",\n  \"shop_name\": \"Ramesh Telecom\",\n  \"address_line1\": \"12 Main Road\",\n  \"address_line2\": \"Near Bus Stand\",\n  \"city\": \"Patna\",\n  \"state_code\": 4,\n  \"pincode\": \"800001\",\n  \"bank_account_number\": \"12345678906789\",\n  \"bank_ifsc\": \"SBIN0001234\",\n  \"bank_name\": \"State Bank of India\",\n  \"bank_account_name\": \"Ramesh Kumar\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 422,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ONBOARDING_FAILED\",\n    \"message\": \"Invalid IFSC code\",\n    \"merchant\": { \"merchant_ref\": \"OUTLET-1001\", \"status\": \"ONBOARDING_FAILED\", \"next_step\": \"ONBOARD\" /* ... */ }\n  }\n}"
                }
              ]
            },
            {
              "name": "Get Merchant",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "The value you onboarded the outlet with"
                    }
                  ]
                },
                "description": "An outlet’s onboarding state, today’s daily authentication and next step\n\n**Key permission:** any valid API key\n\n`status`: `ONBOARDING_FAILED`, `EKYC_PENDING`, `BANK_EKYC_PENDING`, `ACTIVE`, `REONBOARD_REQUIRED` or `BLOCKED`. `next_step`: `ONBOARD`, `EKYC`, `BANK_EKYC`, `DAILY_AUTH` or `READY`. Daily authentication resets at midnight IST.\n\nDocs: https://payonclick.in/developer/reference/aeps-merchant-get"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "The value you onboarded the outlet with"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"merchant_code\": \"POCAP1001M27\",\n    \"name\": \"Ramesh Kumar\",\n    \"status\": \"ACTIVE\",\n    \"ekyc\": { \"status\": \"COMPLETED\", \"completed_at\": \"2026-10-08T11:06:40\" },\n    \"bank_ekyc\": { \"status\": \"COMPLETED\", \"completed_at\": \"2026-10-08T11:09:02\" },\n    \"otp_pending\": null,\n    \"daily_auth\": {\n      \"AEPS\": { \"done_today\": true, \"authenticated_at\": \"2026-10-08T09:15:22\" },\n      \"AP\": { \"done_today\": false, \"authenticated_at\": null }\n    },\n    \"next_step\": \"READY\"\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "List Merchants",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Optional. Default 1",
                      "disabled": true
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Optional. Default 20, max 100",
                      "disabled": true
                    }
                  ]
                },
                "description": "Every outlet on your account, newest first\n\n**Key permission:** any valid API key\n\nDocs: https://payonclick.in/developer/reference/aeps-merchants"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants"
                      ],
                      "query": [
                        {
                          "key": "page",
                          "value": "1",
                          "description": "Optional. Default 1",
                          "disabled": true
                        },
                        {
                          "key": "per_page",
                          "value": "20",
                          "description": "Optional. Default 20, max 100",
                          "disabled": true
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"merchants\": [\n      { \"merchant_ref\": \"OUTLET-1001\", \"status\": \"ACTIVE\", \"next_step\": \"READY\" /* ... */ }\n    ],\n    \"pagination\": { \"total\": 1, \"page\": 1, \"per_page\": 20, \"pages\": 1 }\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "eKYC",
          "item": [
            {
              "name": "eKYC · Send OTP",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/ekyc/send-otp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref",
                    "ekyc",
                    "send-otp"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "The onboarded outlet"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"aadhaar\": \"234123412346\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Send the eKYC OTP to the merchant’s Aadhaar-linked mobile (step 2a)\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `aadhaar` (required) — Merchant’s 12-digit Aadhaar (must match onboarding)\n- `latitude` (required) — Outlet GPS latitude\n- `longitude` (required) — Outlet GPS longitude\n- `device_imei` — Biometric device serial number\n\nThe OTP session is kept on our side — you never handle its reference. If the merchant’s eKYC is already complete, the reply is `already_completed: true` with `otp_sent: false`; go straight to Bank eKYC.\n\nDocs: https://payonclick.in/developer/reference/aeps-ekyc-send-otp"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/ekyc/send-otp",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref",
                        "ekyc",
                        "send-otp"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "The onboarded outlet"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"aadhaar\": \"234123412346\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"stage\": \"EKYC\",\n    \"otp_sent\": true,\n    \"masked_mobile\": \"98******10\",\n    \"resend_after\": 30,\n    \"message\": \"OTP sent to the merchant's Aadhaar-linked mobile number.\"\n  }\n}"
                }
              ]
            },
            {
              "name": "eKYC · Resend OTP",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/ekyc/resend-otp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref",
                    "ekyc",
                    "resend-otp"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "The onboarded outlet"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Send the eKYC OTP again (30 s after the last one)\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\nDocs: https://payonclick.in/developer/reference/aeps-ekyc-resend-otp"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/ekyc/resend-otp",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref",
                        "ekyc",
                        "resend-otp"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "The onboarded outlet"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"stage\": \"EKYC\",\n    \"otp_sent\": true,\n    \"masked_mobile\": \"98******10\",\n    \"resend_after\": 30,\n    \"message\": \"OTP sent again.\"\n  }\n}"
                }
              ]
            },
            {
              "name": "eKYC · Verify OTP",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/ekyc/verify-otp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref",
                    "ekyc",
                    "verify-otp"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "The onboarded outlet"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"otp\": \"482913\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Verify the OTP the merchant received (step 2b)\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `otp` (required) — The 4–8 digit OTP\n\nDocs: https://payonclick.in/developer/reference/aeps-ekyc-verify-otp"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/ekyc/verify-otp",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref",
                        "ekyc",
                        "verify-otp"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "The onboarded outlet"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"otp\": \"482913\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"stage\": \"EKYC\",\n    \"otp_verified\": true,\n    \"message\": \"OTP verified. Submit the biometric next.\"\n  }\n}"
                }
              ]
            },
            {
              "name": "eKYC · Biometric",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/ekyc/biometric",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref",
                    "ekyc",
                    "biometric"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "The onboarded outlet"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"aadhaar\": \"234123412346\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Complete eKYC with the merchant’s own fingerprint (step 2c)\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `aadhaar` (required) — Merchant’s 12-digit Aadhaar\n- `pid_data` (required) — PidData XML from the RD service, captured with GET /pid-options?purpose=EKYC\n- `device_imei` — Biometric device serial number\n\nCapture with `GET /pid-options?purpose=EKYC`; the eKYC `wadh` differs from transactions. A rejected fingerprint answers `EKYC_FAILED` — capture again and resubmit; the verified OTP stays valid for a few minutes. `REONBOARD_REQUIRED` means the bank account given at onboarding did not match: re-submit `POST /merchants`.\n\nDocs: https://payonclick.in/developer/reference/aeps-ekyc-biometric"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/ekyc/biometric",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref",
                        "ekyc",
                        "biometric"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "The onboarded outlet"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"aadhaar\": \"234123412346\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"stage\": \"EKYC\",\n    \"completed\": true,\n    \"message\": \"eKYC completed.\",\n    \"merchant\": { \"merchant_ref\": \"OUTLET-1001\", \"status\": \"BANK_EKYC_PENDING\", \"next_step\": \"BANK_EKYC\" /* ... */ }\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Bank eKYC",
          "item": [
            {
              "name": "Bank eKYC · Send OTP",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/bank-ekyc/send-otp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref",
                    "bank-ekyc",
                    "send-otp"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "An outlet whose eKYC is complete"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"aadhaar\": \"234123412346\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Second (bank) eKYC required by RBI — send the OTP (step 3a)\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `aadhaar` (required) — Merchant’s 12-digit Aadhaar\n- `latitude` (required) — Outlet GPS latitude\n- `longitude` (required) — Outlet GPS longitude\n\nIdentical to eKYC, under `/bank-ekyc/`. Allowed only after eKYC is complete; otherwise `EKYC_REQUIRED`.\n\nDocs: https://payonclick.in/developer/reference/aeps-bank-ekyc-send-otp"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/bank-ekyc/send-otp",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref",
                        "bank-ekyc",
                        "send-otp"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "An outlet whose eKYC is complete"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"aadhaar\": \"234123412346\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"stage\": \"BANK_EKYC\",\n    \"otp_sent\": true,\n    \"masked_mobile\": \"98******10\",\n    \"resend_after\": 30,\n    \"message\": \"OTP sent to the merchant's Aadhaar-linked mobile number.\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Bank eKYC · Resend OTP",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/bank-ekyc/resend-otp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref",
                    "bank-ekyc",
                    "resend-otp"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "The outlet"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Send the Bank eKYC OTP again\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\nDocs: https://payonclick.in/developer/reference/aeps-bank-ekyc-resend-otp"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/bank-ekyc/resend-otp",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref",
                        "bank-ekyc",
                        "resend-otp"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "The outlet"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": { \"stage\": \"BANK_EKYC\", \"otp_sent\": true, \"resend_after\": 30 }\n}"
                }
              ]
            },
            {
              "name": "Bank eKYC · Verify OTP",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/bank-ekyc/verify-otp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref",
                    "bank-ekyc",
                    "verify-otp"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "The outlet"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"otp\": \"771204\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Verify the Bank eKYC OTP (step 3b)\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `otp` (required) — The 4–8 digit OTP\n\nDocs: https://payonclick.in/developer/reference/aeps-bank-ekyc-verify-otp"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/bank-ekyc/verify-otp",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref",
                        "bank-ekyc",
                        "verify-otp"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "The outlet"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"otp\": \"771204\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": { \"stage\": \"BANK_EKYC\", \"otp_verified\": true, \"message\": \"OTP verified. Submit the biometric next.\" }\n}"
                }
              ]
            },
            {
              "name": "Bank eKYC · Biometric",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/bank-ekyc/biometric",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref",
                    "bank-ekyc",
                    "biometric"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "The outlet"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"aadhaar\": \"234123412346\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Complete Bank eKYC with the merchant’s fingerprint (step 3c)\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `aadhaar` (required) — Merchant’s 12-digit Aadhaar\n- `pid_data` (required) — PidData XML, captured with GET /pid-options?purpose=EKYC\n\nAfter this the outlet is `ACTIVE`. If a later daily authentication or transaction answers `BANK_EKYC_REQUIRED`, run these three steps again.\n\nDocs: https://payonclick.in/developer/reference/aeps-bank-ekyc-biometric"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/bank-ekyc/biometric",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref",
                        "bank-ekyc",
                        "biometric"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "The outlet"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"aadhaar\": \"234123412346\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"stage\": \"BANK_EKYC\",\n    \"completed\": true,\n    \"message\": \"Bank eKYC completed.\",\n    \"merchant\": { \"merchant_ref\": \"OUTLET-1001\", \"status\": \"ACTIVE\", \"next_step\": \"DAILY_AUTH\" /* ... */ }\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Daily Authentication",
          "item": [
            {
              "name": "Daily Authentication (2FA)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/daily-auth",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "merchants",
                    ":merchant_ref",
                    "daily-auth"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "An ACTIVE outlet"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"service\": \"AEPS\",\n  \"aadhaar\": \"234123412346\",\n  \"auth_mode\": \"FP\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "The outlet owner’s biometric, once a day per service (step 4)\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `service` (required) — AEPS (unlocks CW, BE, MS, CD) or AP (unlocks Aadhaar Pay)\n- `aadhaar` (required) — Merchant’s own 12-digit Aadhaar\n- `pid_data` (required) — PidData XML, captured with GET /pid-options?purpose=DAILY_AUTH\n- `auth_mode` — FP (default), IRIS or FACE\n- `latitude` (required) — Outlet GPS latitude\n- `longitude` (required) — Outlet GPS longitude\n- `device_imei` — Biometric device serial number\n\nRequired by the bank network every day, separately for `AEPS` and `AP`; it expires at midnight IST. Calling it again the same day answers `already_done: true` and charges nothing. If a transaction later answers `failure_code: DAILY_AUTH_REQUIRED` (for example, the biometric device changed), authenticate again. Any daily-authentication charge on your plan applies per attempt.\n\nDocs: https://payonclick.in/developer/reference/aeps-daily-auth"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/merchants/:merchant_ref/daily-auth",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "merchants",
                        ":merchant_ref",
                        "daily-auth"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "An ACTIVE outlet"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"service\": \"AEPS\",\n  \"aadhaar\": \"234123412346\",\n  \"auth_mode\": \"FP\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"service\": \"AEPS\",\n    \"status\": \"SUCCESS\",\n    \"already_done\": false,\n    \"charge\": 0.0,\n    \"bank_rrn\": \"528109876543\",\n    \"valid_until\": \"2026-10-08T23:59:59\",\n    \"message\": \"Daily authentication successful.\"\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Transactions",
          "item": [
            {
              "name": "Aadhaar OTP (above ₹5,000)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/otp",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "otp"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"service\": \"CW\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"amount\": 8000,\n  \"customer_mobile\": \"9123456789\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "NPCI-mandated customer OTP for a CW or AP above ₹5,000 — before capture\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `merchant_ref` (required) — The outlet\n- `service` (required) — CW or AP\n- `aadhaar` (required) — Customer’s 12-digit Aadhaar\n- `bank_iin` (required) — From GET /banks\n- `amount` (required) — Must be above ₹5,000\n- `customer_mobile` (required) — Customer’s 10-digit mobile\n- `latitude` (required) — Outlet GPS latitude\n- `longitude` (required) — Outlet GPS longitude\n\nThe OTP goes to the mobile registered with the _customer’s_ Aadhaar. Put it into the capture’s PidOptions (`pid_options_with_otp`, `otp=\"…\"`) — it travels sealed inside the PID block and is never sent to us — then send `otp_reference` with the transaction. Amounts of ₹5,000 or less need no OTP.\n\nDocs: https://payonclick.in/developer/reference/aeps-otp"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/otp",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "otp"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"service\": \"CW\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"amount\": 8000,\n  \"customer_mobile\": \"9123456789\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"otp_reference\": \"PT1234567890ABC\",\n    \"service\": \"CW\",\n    \"amount\": 8000.0,\n    \"masked_mobile\": \"91******89\",\n    \"resend_after\": 30,\n    \"message\": \"OTP sent to the customer's Aadhaar-registered mobile number.\"\n  }\n}"
                }
              ]
            },
            {
              "name": "Cash Withdrawal",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/cash-withdrawal",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "cash-withdrawal"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"CW-2026-000123\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"amount\": 2500,\n  \"customer_mobile\": \"9123456789\",\n  \"auth_mode\": \"FP\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Customer withdraws cash; your AEPS wallet is credited\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `merchant_ref` (required) — An ACTIVE outlet with today’s AEPS daily authentication\n- `client_reference` (required) — Your unique id and the idempotency key. 1–64 chars: letters, digits, hyphen, underscore\n- `aadhaar` (required) — Customer’s 12-digit Aadhaar\n- `bank_iin` (required) — Customer’s bank, from GET /banks\n- `amount` (required) — ₹100 – ₹10,000, multiple of ₹50\n- `customer_mobile` — Customer’s 10-digit mobile\n- `pid_data` (required) — Customer’s PidData XML (GET /pid-options?purpose=TXN)\n- `auth_mode` — FP (default) or IRIS\n- `otp_reference` — From POST /otp — required above ₹5,000\n- `latitude` (required) — Outlet GPS latitude\n- `longitude` (required) — Outlet GPS longitude\n- `device_imei` — Biometric device serial number\n\n**Hand over cash only on `SUCCESS`.** `201` carries SUCCESS or PENDING; a FAILED transaction returns `200` with `success: true` (the request was handled) and a `failure_code`. Re-sending the same `client_reference` returns the original transaction with `duplicate: true` and never reaches the bank again — retry a timeout that way. `reference_id` is our id (store it as text); `bank_rrn` is the bank’s reference for a customer dispute; `account_balance` is the customer’s balance after the withdrawal. One transaction per outlet at a time.\n\nDocs: https://payonclick.in/developer/reference/aeps-cash-withdrawal"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/cash-withdrawal",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "cash-withdrawal"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"CW-2026-000123\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"amount\": 2500,\n  \"customer_mobile\": \"9123456789\",\n  \"auth_mode\": \"FP\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"9f1c2a7b3d4e5f60718a\",\n    \"client_reference\": \"CW-2026-000123\",\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"service\": \"CW\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 2500.0,\n    \"aadhaar\": \"XXXXXXXX9870\",\n    \"bank_iin\": \"607094\",\n    \"bank_name\": \"State Bank of India\",\n    \"customer_mobile\": \"9123456789\",\n    \"bank_rrn\": \"528112345678\",\n    \"account_balance\": 18240.55,\n    \"charge\": 0.0,\n    \"commission\": 6.25,\n    \"wallet_impact\": 2506.25,\n    \"auth_mode\": \"FP\",\n    \"failure_code\": null,\n    \"bank_response_code\": null,\n    \"message\": \"Transaction successful\",\n    \"created_at\": \"2026-10-08T11:20:41\",\n    \"duplicate\": false\n  }\n}"
                },
                {
                  "name": "201 Created · pending",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/cash-withdrawal",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "cash-withdrawal"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"CW-2026-000123\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"amount\": 2500,\n  \"customer_mobile\": \"9123456789\",\n  \"auth_mode\": \"FP\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"9f1c2a7b3d4e5f60718a\",\n    \"client_reference\": \"CW-2026-000123\",\n    \"status\": \"PENDING\",\n    \"amount\": 2500.0,\n    \"wallet_impact\": 0.0,\n    \"message\": \"Awaiting bank confirmation. Do NOT retry — the status settles automatically.\",\n    \"duplicate\": false\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "Balance Enquiry",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/balance-enquiry",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "balance-enquiry"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"BE-2026-000124\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Customer’s bank account balance\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `merchant_ref` (required) — An ACTIVE outlet with today’s AEPS daily authentication\n- `client_reference` (required) — Your unique idempotency key\n- `aadhaar` (required) — Customer’s Aadhaar\n- `bank_iin` (required) — From GET /banks\n- `pid_data` (required) — Customer’s PidData XML\n- `auth_mode` — FP or IRIS\n- `customer_mobile` — 10-digit mobile\n- `latitude` (required) — GPS latitude\n- `longitude` (required) — GPS longitude\n\nDocs: https://payonclick.in/developer/reference/aeps-balance-enquiry"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/balance-enquiry",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "balance-enquiry"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"BE-2026-000124\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"0a7d33e1c9b24f6e8d11\",\n    \"client_reference\": \"BE-2026-000124\",\n    \"service\": \"BE\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 0.0,\n    \"bank_name\": \"State Bank of India\",\n    \"bank_rrn\": \"528112349911\",\n    \"account_balance\": 20740.55,\n    \"charge\": 0.0,\n    \"commission\": 0.0,\n    \"wallet_impact\": 0.0,\n    \"duplicate\": false\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "Mini Statement",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/mini-statement",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "mini-statement"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"MS-2026-000125\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Customer’s last transactions and balance\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `merchant_ref` (required) — An ACTIVE outlet with today’s AEPS daily authentication\n- `client_reference` (required) — Your unique idempotency key\n- `aadhaar` (required) — Customer’s Aadhaar\n- `bank_iin` (required) — From GET /banks\n- `pid_data` (required) — Customer’s PidData XML\n- `auth_mode` — FP or IRIS\n- `latitude` (required) — GPS latitude\n- `longitude` (required) — GPS longitude\n\n`mini_statement` is returned in this response only (banks return up to 10 lines); a replay or a later status read does not repeat it, so store it if you need to print it again.\n\nDocs: https://payonclick.in/developer/reference/aeps-mini-statement"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/mini-statement",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "mini-statement"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"MS-2026-000125\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"5c2e81f0aa9d4b7c9e02\",\n    \"service\": \"MS\",\n    \"status\": \"SUCCESS\",\n    \"account_balance\": 20740.55,\n    \"charge\": 0.0,\n    \"commission\": 1.0,\n    \"wallet_impact\": 1.0,\n    \"mini_statement\": [\n      { \"date\": \"05/10\", \"type\": \"D\", \"amount\": 2000.0, \"narration\": \"ATM WDL\" },\n      { \"date\": \"03/10\", \"type\": \"C\", \"amount\": 15000.0, \"narration\": \"NEFT SALARY\" }\n    ],\n    \"duplicate\": false\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "Aadhaar Pay",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/aadhaar-pay",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "aadhaar-pay"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"AP-2026-000126\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"amount\": 1250,\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Customer pays the outlet from their bank account; your AEPS wallet is credited\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `merchant_ref` (required) — An ACTIVE outlet with today’s **AP** daily authentication\n- `client_reference` (required) — Your unique idempotency key\n- `aadhaar` (required) — Customer’s Aadhaar\n- `bank_iin` (required) — From GET /banks\n- `amount` (required) — ₹1 – ₹50,000\n- `pid_data` (required) — Customer’s PidData XML\n- `auth_mode` — FP or IRIS\n- `otp_reference` — From POST /otp — required above ₹5,000\n- `customer_mobile` — 10-digit mobile\n- `latitude` (required) — GPS latitude\n- `longitude` (required) — GPS longitude\n\nAadhaar Pay needs its own daily authentication: `POST /merchants/{merchant_ref}/daily-auth` with `\"service\": \"AP\"`. PENDING and replay behave as for Cash Withdrawal.\n\nDocs: https://payonclick.in/developer/reference/aeps-aadhaar-pay"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/aadhaar-pay",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "aadhaar-pay"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"AP-2026-000126\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"amount\": 1250,\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"e44b0c9d2f1a4c3b8a77\",\n    \"service\": \"AP\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 1250.0,\n    \"bank_rrn\": \"528112352200\",\n    \"charge\": 0.0,\n    \"commission\": 0.0,\n    \"wallet_impact\": 1250.0,\n    \"duplicate\": false\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "Cash Deposit",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/cash-deposit",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "cash-deposit"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"CD-2026-000127\",\n  \"tpin\": \"{{tpin}}\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"amount\": 3000,\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Customer deposits cash into their bank account; your AEPS wallet is debited\n\n**Key permission:** `aeps`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `merchant_ref` (required) — An ACTIVE outlet with today’s AEPS daily authentication\n- `client_reference` (required) — Your unique idempotency key\n- `tpin` (required) — Your account TPIN\n- `aadhaar` (required) — Customer’s Aadhaar\n- `bank_iin` (required) — From GET /banks\n- `amount` (required) — ₹100 – ₹10,000, whole rupees\n- `pid_data` (required) — Customer’s PidData XML\n- `auth_mode` — FP or IRIS\n- `customer_mobile` — 10-digit mobile\n- `latitude` (required) — GPS latitude\n- `longitude` (required) — GPS longitude\n\n`amount + charge` is debited from your AEPS wallet _before_ the bank call (`INSUFFICIENT_BALANCE` sends nothing). A declined deposit is refunded automatically (`refunded: true`); a PENDING one keeps the amount held until the bank confirms. NPCI does not allow a deposit within 30 minutes of a withdrawal for the same customer and bank (`CD_COOLDOWN`).\n\nDocs: https://payonclick.in/developer/reference/aeps-cash-deposit"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/cash-deposit",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "cash-deposit"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"CD-2026-000127\",\n  \"tpin\": \"{{tpin}}\",\n  \"aadhaar\": \"987698769870\",\n  \"bank_iin\": \"607094\",\n  \"amount\": 3000,\n  \"pid_data\": \"<PidData>... the XML the RD service returned ...</PidData>\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"b18f0e2c7d6a4e9f8c33\",\n    \"service\": \"CD\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 3000.0,\n    \"bank_rrn\": \"528112360011\",\n    \"charge\": 0.0,\n    \"commission\": 0.0,\n    \"wallet_impact\": -3000.0,\n    \"refunded\": false,\n    \"duplicate\": false\n    /* ... */\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Status & History",
          "item": [
            {
              "name": "Get Transaction",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/transaction/:reference_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "transaction",
                    ":reference_id"
                  ],
                  "variable": [
                    {
                      "key": "reference_id",
                      "value": "9f1c2a7b3d4e5f60718a",
                      "description": "From the transaction response"
                    }
                  ]
                },
                "description": "One AEPS transaction and its current status\n\n**Key permission:** any valid API key\n\nA PENDING withdrawal, Aadhaar Pay or deposit older than 90 seconds is re-checked with the bank when you read it (at most once a minute); all of them are also re-checked automatically in the background. \n\n**`failure_code`** (FAILED only): `BANK_DECLINED` (the bank refused — `bank_response_code` and `message` say why: wrong fingerprint, insufficient funds, daily limit…), `DAILY_AUTH_REQUIRED` (authenticate the outlet again), `BANK_EKYC_REQUIRED`, `INSUFFICIENT_BALANCE` (CD: your wallet), `NOT_SUBMITTED` (never reached the bank) and `SERVICE_UNAVAILABLE`. A new attempt needs a _new_ `client_reference`.\n\nDocs: https://payonclick.in/developer/reference/aeps-transaction"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/transaction/:reference_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "transaction",
                        ":reference_id"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "9f1c2a7b3d4e5f60718a",
                          "description": "From the transaction response"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"9f1c2a7b3d4e5f60718a\",\n    \"client_reference\": \"CW-2026-000123\",\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"service\": \"CW\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 2500.0,\n    \"bank_rrn\": \"528112345678\",\n    \"wallet_impact\": 2506.25,\n    \"failure_code\": null,\n    \"message\": \"Transaction successful\",\n    \"created_at\": \"2026-10-08T11:20:41\"\n    /* ... */\n  }\n}"
                },
                {
                  "name": "200 OK · failed",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/transaction/:reference_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "transaction",
                        ":reference_id"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "9f1c2a7b3d4e5f60718a",
                          "description": "From the transaction response"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"71c0de44e2a94bb08f15\",\n    \"client_reference\": \"CW-2026-000130\",\n    \"service\": \"CW\",\n    \"status\": \"FAILED\",\n    \"amount\": 3000.0,\n    \"wallet_impact\": 0.0,\n    \"failure_code\": \"BANK_DECLINED\",\n    \"bank_response_code\": \"U3\",\n    \"message\": \"Biometric data did not match\"\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "Get Transaction by Client Reference",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/transaction/by-client-reference/:client_reference",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "transaction",
                    "by-client-reference",
                    ":client_reference"
                  ],
                  "variable": [
                    {
                      "key": "client_reference",
                      "value": "CW-2026-000123",
                      "description": "The value you sent with the transaction"
                    }
                  ]
                },
                "description": "Look up a transaction by your own idempotency key\n\n**Key permission:** any valid API key\n\nThe safe answer to “did it go through?” after a timeout. `404 NOT_FOUND` means the reference never reached us, so you may send it.\n\nDocs: https://payonclick.in/developer/reference/aeps-transaction-by-client-ref"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/transaction/by-client-reference/:client_reference",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "transaction",
                        "by-client-reference",
                        ":client_reference"
                      ],
                      "variable": [
                        {
                          "key": "client_reference",
                          "value": "CW-2026-000123",
                          "description": "The value you sent with the transaction"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"9f1c2a7b3d4e5f60718a\",\n    \"client_reference\": \"CW-2026-000123\",\n    \"status\": \"PENDING\",\n    \"amount\": 2500.0\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "Transaction History",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/aeps/transactions?status=SUCCESS&service=CW&merchant_ref=OUTLET-1001",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "aeps",
                    "transactions"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Optional. Default 1",
                      "disabled": true
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Optional. Default 20, max 100",
                      "disabled": true
                    },
                    {
                      "key": "status",
                      "value": "SUCCESS",
                      "description": "Optional. SUCCESS | PENDING | FAILED",
                      "disabled": false
                    },
                    {
                      "key": "service",
                      "value": "CW",
                      "description": "Optional. CW | BE | MS | AP | CD",
                      "disabled": false
                    },
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "Optional. One outlet only",
                      "disabled": false
                    },
                    {
                      "key": "from_date",
                      "value": "2026-09-01",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    },
                    {
                      "key": "to_date",
                      "value": "2026-09-30",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    }
                  ]
                },
                "description": "Paginated AEPS history across your outlets\n\n**Key permission:** any valid API key\n\nNewest first. Lists API transactions only.\n\nDocs: https://payonclick.in/developer/reference/aeps-transactions"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/aeps/transactions?status=SUCCESS&service=CW&merchant_ref=OUTLET-1001",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "aeps",
                        "transactions"
                      ],
                      "query": [
                        {
                          "key": "page",
                          "value": "1",
                          "description": "Optional. Default 1",
                          "disabled": true
                        },
                        {
                          "key": "per_page",
                          "value": "20",
                          "description": "Optional. Default 20, max 100",
                          "disabled": true
                        },
                        {
                          "key": "status",
                          "value": "SUCCESS",
                          "description": "Optional. SUCCESS | PENDING | FAILED",
                          "disabled": false
                        },
                        {
                          "key": "service",
                          "value": "CW",
                          "description": "Optional. CW | BE | MS | AP | CD",
                          "disabled": false
                        },
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "Optional. One outlet only",
                          "disabled": false
                        },
                        {
                          "key": "from_date",
                          "value": "2026-09-01",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        },
                        {
                          "key": "to_date",
                          "value": "2026-09-30",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"transactions\": [\n      { \"reference_id\": \"9f1c2a7b3d4e5f60718a\", \"merchant_ref\": \"OUTLET-1001\", \"service\": \"CW\", \"status\": \"SUCCESS\", \"amount\": 2500.0 /* ... */ }\n    ],\n    \"pagination\": { \"total\": 1, \"page\": 1, \"per_page\": 20, \"pages\": 1 }\n  }\n}"
                }
              ]
            }
          ]
        }
      ],
      "description": "Offer Aadhaar-based cash withdrawal, balance enquiry, mini statement, Aadhaar Pay and cash deposit at your own retail outlets. Onboard each outlet once, complete its eKYC and Bank eKYC, authenticate it every day, then transact with the customer’s fingerprint or iris. Every rupee settles in your AEPS wallet.\n\n**One outlet = one merchant** — Every retail outlet you serve is onboarded once as a **merchant** under your account, identified by _your_ `merchant_ref`. Its owner’s Aadhaar, PAN and bank account are verified by eKYC and Bank eKYC, and the owner must complete a fingerprint **daily authentication** each day before that outlet can transact. Read `next_step` on `GET /merchants/{merchant_ref}` — it always tells you what to call next.\n\n**PENDING is not a failure — never pay out twice** — A cash withdrawal the bank has not confirmed within the call is returned as `PENDING`. The money may already have left the customer’s account, so do **not** retry it under a new `client_reference`. Every pending transaction is re-checked with the bank automatically and settles to SUCCESS or FAILED; poll `/transaction/{reference_id}` every 60 seconds or subscribe to the `aeps.*` webhooks. Hand the customer cash only on `SUCCESS`.\n\n**Biometric: send the RD service’s XML as it is** — Capture with a UIDAI-registered L1 RD device (Mantra, Morpho, Startek, iris…) using the `PidOptions` from `GET /pid-options`, and send the PidData XML it returns, unchanged, in `pid_data`. eKYC uses a different PidOptions (`wadh`) from transactions and daily authentication. Face authentication is accepted for daily authentication only.\n\n**Timeouts, concurrency and volume** — A transaction waits for the bank and can take up to a minute: set your HTTP client timeout to **90 seconds**, and if it still times out, read `/transaction/by-client-reference/{client_reference}` instead of sending it again. Different outlets transact in parallel; one outlet runs one transaction at a time (`TRANSACTION_IN_PROGRESS`). Each API key has a per-minute request limit (60 by default) — when you serve many outlets, ask us to raise it for your key, and use webhooks rather than frequent polling.\n\n**Charges and commission** — Charges and commission come from your API plan: CW and AP credit `amount − charge + commission` to your AEPS wallet; BE and MS debit their charge (if any); CD debits `amount + charge` before the bank call and refunds it automatically if the bank declines; daily authentication may carry a small charge per attempt. `GET /charges` shows the exact figures and every transaction reports its `wallet_impact`.\n\nDocs: https://payonclick.in/developer/reference/aeps-overview"
    },
    {
      "name": "UPI Cash Point",
      "item": [
        {
          "name": "Rules & Outlet",
          "item": [
            {
              "name": "Rules & Hours",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/upicw/info",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "upicw",
                    "info"
                  ]
                },
                "description": "Amount rules, the daily closed window and whether it is closed now\n\n**Key permission:** any valid API key\n\nTimes are IST. The bank network refuses every QR in the closed window, so hide the option at your outlets while `closed_now` is true.\n\nDocs: https://payonclick.in/developer/reference/upicw-info"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/upicw/info",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "upicw",
                        "info"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"min_amount\": 100,\n    \"max_amount\": 5000,\n    \"amount_step\": 100,\n    \"closed_now\": false,\n    \"closed_window\": { \"from\": \"23:30\", \"to\": \"05:00\" },\n    \"max_live_qrs_per_outlet\": 3\n  }\n}"
                }
              ]
            },
            {
              "name": "Preview Charges",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/upicw/charges?amount=1000",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "upicw",
                    "charges"
                  ],
                  "query": [
                    {
                      "key": "amount",
                      "value": "1000",
                      "description": "Required. ₹100 – ₹5,000, multiple of ₹100",
                      "disabled": false
                    }
                  ]
                },
                "description": "Charge, commission and wallet credit for an amount on your plan\n\n**Key permission:** any valid API key\n\n`wallet_impact` is what a successful QR of this amount credits to your AEPS wallet. Moves no money.\n\nDocs: https://payonclick.in/developer/reference/upicw-charges"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/upicw/charges?amount=1000",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "upicw",
                        "charges"
                      ],
                      "query": [
                        {
                          "key": "amount",
                          "value": "1000",
                          "description": "Required. ₹100 – ₹5,000, multiple of ₹100",
                          "disabled": false
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"amount\": 1000.0,\n    \"charge\": 0.0,\n    \"commission\": 2.5,\n    \"wallet_impact\": 1002.5\n  }\n}"
                }
              ]
            },
            {
              "name": "Outlet UPI Cash Status",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/upicw/merchants/:merchant_ref",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "upicw",
                    "merchants",
                    ":merchant_ref"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "An outlet onboarded via /ext/v1/aeps/merchants"
                    }
                  ]
                },
                "description": "Whether an outlet can mint a UPI Cash QR\n\n**Key permission:** any valid API key\n\n`upi_cash`: `ENABLED` (a QR was minted before), `UNKNOWN` (never tried — mint one to find out), `AWAITING_ENABLEMENT` (the bank network is still enabling it), `NOT_READY` (finish onboarding / eKYC; `reason` says which) or `BLOCKED`.\n\nDocs: https://payonclick.in/developer/reference/upicw-outlet"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/upicw/merchants/:merchant_ref",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "upicw",
                        "merchants",
                        ":merchant_ref"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "An outlet onboarded via /ext/v1/aeps/merchants"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"merchant_code\": \"POCAP1001M27\",\n    \"upi_cash\": \"ENABLED\",\n    \"reason\": null,\n    \"message\": \"UPI Cash works for this outlet.\",\n    \"last_checked_at\": \"2026-10-08T11:40:02\",\n    \"closed_now\": false\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "QR",
          "item": [
            {
              "name": "Create UPI Cash QR",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/upicw/qr",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "upicw",
                    "qr"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"UPI-2026-000123\",\n  \"amount\": 1000,\n  \"customer_mobile\": \"9123456789\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Mint a QR for the amount the customer wants in cash\n\n**Key permission:** `upicw`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `merchant_ref` (required) — The outlet paying out the cash\n- `client_reference` (required) — Your unique id and the idempotency key. 1–64 characters: letters, digits, hyphen, underscore\n- `amount` (required) — ₹100 – ₹5,000, multiple of ₹100\n- `customer_mobile` (required) — Customer’s 10-digit mobile — the only way to identify them in a dispute\n- `latitude` (required) — Outlet GPS latitude\n- `longitude` (required) — Outlet GPS longitude\n\nShow `qr.image_base64` as a PNG (`data:image/png;base64,…`) at the outlet — it is the bank's own QR, so draw it at full size without smoothing. Re-sending the same `client_reference` returns the original with `duplicate: true` (the QR image is not repeated) and never mints a second QR. A `202` with `qr: null` means the bank network did not answer in time: poll the reference — do not mint another QR for the same customer. At most 3 unpaid QRs per outlet at a time (`TOO_MANY_OPEN_QRS`); refused during the closed window (`SERVICE_CLOSED`).\n\nDocs: https://payonclick.in/developer/reference/upicw-qr"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/upicw/qr",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "upicw",
                        "qr"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"UPI-2026-000123\",\n  \"amount\": 1000,\n  \"customer_mobile\": \"9123456789\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"UPAP178901234567800\",\n    \"client_reference\": \"UPI-2026-000123\",\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"status\": \"PENDING\",\n    \"amount\": 1000.0,\n    \"customer_mobile\": \"9123456789\",\n    \"merchant_vpa\": \"14657855693@nsdlpbl\",\n    \"payer_vpa\": null,\n    \"bank_rrn\": null,\n    \"wallet_impact\": 0.0,\n    \"failure_code\": null,\n    \"message\": \"Waiting for the customer to pay. Do NOT hand over cash until the status is SUCCESS.\",\n    \"qr_expires_at\": \"2026-10-08T11:41:05\",\n    \"qr\": {\n      \"image_base64\": \"iVBORw0KGgoAAAANSUhEUgAA...\",\n      \"image_type\": \"image/png\",\n      \"vpa\": \"14657855693@nsdlpbl\",\n      \"expires_in\": 60,\n      \"expires_at\": \"2026-10-08T11:41:05\",\n      \"poll_after\": 30,\n      \"poll_every\": 20\n    },\n    \"duplicate\": false\n  }\n}"
                },
                {
                  "name": "422 · QR not created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/upicw/qr",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "upicw",
                        "qr"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"UPI-2026-000123\",\n  \"amount\": 1000,\n  \"customer_mobile\": \"9123456789\",\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 422,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"QR_NOT_CREATED\",\n    \"message\": \"Your account is being validated, please try after sometime\",\n    \"failure_code\": \"OUTLET_NOT_ENABLED\",\n    \"bank_response_code\": \"FP071\",\n    \"reference_id\": \"UPAP178901234567801\"\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Status & History",
          "item": [
            {
              "name": "Get UPI Cash Transaction",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/upicw/transaction/:reference_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "upicw",
                    "transaction",
                    ":reference_id"
                  ],
                  "variable": [
                    {
                      "key": "reference_id",
                      "value": "UPAP178901234567800",
                      "description": "From POST /qr"
                    }
                  ]
                },
                "description": "A QR’s current status — hand over cash on SUCCESS\n\n**Key permission:** any valid API key\n\nA PENDING QR older than 25 seconds is re-checked with the bank when you read it (at most every 15 seconds); every QR is also settled in the background. \n\n**`failure_code`** (FAILED only): `QR_EXPIRED` (not paid in time), `PAYER_BANK_DECLINED`, `PAYER_DEBIT_FAILED`, `OUTLET_NOT_ENABLED`, `OUTLET_BLOCKED`, `OUTLET_DAILY_LIMIT`, `SERVICE_CLOSED`, `INVALID_LOCATION`, `NOT_SUBMITTED` and `DECLINED`. A new attempt needs a new `client_reference`.\n\nDocs: https://payonclick.in/developer/reference/upicw-transaction"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/upicw/transaction/:reference_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "upicw",
                        "transaction",
                        ":reference_id"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "UPAP178901234567800",
                          "description": "From POST /qr"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"UPAP178901234567800\",\n    \"client_reference\": \"UPI-2026-000123\",\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 1000.0,\n    \"customer_mobile\": \"9123456789\",\n    \"merchant_vpa\": \"14657855693@nsdlpbl\",\n    \"payer_vpa\": \"91******89@ybl\",\n    \"payer_name\": \"RAHUL SHARMA\",\n    \"bank_rrn\": \"528114567890\",\n    \"charge\": 0.0,\n    \"commission\": 2.5,\n    \"wallet_impact\": 1002.5,\n    \"failure_code\": null,\n    \"bank_response_code\": null,\n    \"message\": \"Payment received — hand over the cash.\",\n    \"qr_expires_at\": \"2026-10-08T11:41:05\",\n    \"created_at\": \"2026-10-08T11:40:05\",\n    \"updated_at\": \"2026-10-08T11:40:41\"\n  }\n}"
                },
                {
                  "name": "200 OK · not paid",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/upicw/transaction/:reference_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "upicw",
                        "transaction",
                        ":reference_id"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "UPAP178901234567800",
                          "description": "From POST /qr"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"UPAP178901234567802\",\n    \"status\": \"FAILED\",\n    \"amount\": 2000.0,\n    \"wallet_impact\": 0.0,\n    \"failure_code\": \"QR_EXPIRED\",\n    \"bank_response_code\": \"QN\",\n    \"message\": \"Payment was not completed.\"\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "Get by Client Reference",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/upicw/transaction/by-client-reference/:client_reference",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "upicw",
                    "transaction",
                    "by-client-reference",
                    ":client_reference"
                  ],
                  "variable": [
                    {
                      "key": "client_reference",
                      "value": "UPI-2026-000123",
                      "description": "The value you sent to POST /qr"
                    }
                  ]
                },
                "description": "Look a QR up by your own idempotency key\n\n**Key permission:** any valid API key\n\nThe safe answer after a timeout. `404 NOT_FOUND` means the reference never reached us, so you may send it.\n\nDocs: https://payonclick.in/developer/reference/upicw-transaction-by-client-ref"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/upicw/transaction/by-client-reference/:client_reference",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "upicw",
                        "transaction",
                        "by-client-reference",
                        ":client_reference"
                      ],
                      "variable": [
                        {
                          "key": "client_reference",
                          "value": "UPI-2026-000123",
                          "description": "The value you sent to POST /qr"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"UPAP178901234567800\",\n    \"client_reference\": \"UPI-2026-000123\",\n    \"status\": \"PENDING\",\n    \"amount\": 1000.0\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "UPI Cash History",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/upicw/transactions?status=SUCCESS&merchant_ref=OUTLET-1001",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "upicw",
                    "transactions"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Optional. Default 1",
                      "disabled": true
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Optional. Default 20, max 100",
                      "disabled": true
                    },
                    {
                      "key": "status",
                      "value": "SUCCESS",
                      "description": "Optional. SUCCESS | PENDING | FAILED",
                      "disabled": false
                    },
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "Optional. One outlet only",
                      "disabled": false
                    },
                    {
                      "key": "from_date",
                      "value": "2026-09-01",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    },
                    {
                      "key": "to_date",
                      "value": "2026-09-30",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    }
                  ]
                },
                "description": "Paginated UPI Cash history across your outlets\n\n**Key permission:** any valid API key\n\nNewest first. Lists QRs created through the API only.\n\nDocs: https://payonclick.in/developer/reference/upicw-transactions"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/upicw/transactions?status=SUCCESS&merchant_ref=OUTLET-1001",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "upicw",
                        "transactions"
                      ],
                      "query": [
                        {
                          "key": "page",
                          "value": "1",
                          "description": "Optional. Default 1",
                          "disabled": true
                        },
                        {
                          "key": "per_page",
                          "value": "20",
                          "description": "Optional. Default 20, max 100",
                          "disabled": true
                        },
                        {
                          "key": "status",
                          "value": "SUCCESS",
                          "description": "Optional. SUCCESS | PENDING | FAILED",
                          "disabled": false
                        },
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "Optional. One outlet only",
                          "disabled": false
                        },
                        {
                          "key": "from_date",
                          "value": "2026-09-01",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        },
                        {
                          "key": "to_date",
                          "value": "2026-09-30",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"transactions\": [\n      { \"reference_id\": \"UPAP178901234567800\", \"merchant_ref\": \"OUTLET-1001\", \"status\": \"SUCCESS\", \"amount\": 1000.0 /* ... */ }\n    ],\n    \"pagination\": { \"total\": 1, \"page\": 1, \"per_page\": 20, \"pages\": 1 }\n  }\n}"
                }
              ]
            }
          ]
        }
      ],
      "description": "Cash withdrawal with nothing but a UPI app: your outlet shows a QR for the amount, the customer scans and pays from any UPI app (PhonePe, Google Pay, Paytm, BHIM…), and the outlet hands over the cash. No card, no fingerprint device. The amount, less any charge, is credited to your AEPS wallet.\n\n**Hand over cash only on SUCCESS** — A QR is `PENDING` until the customer's bank confirms the payment. Never pay out on the customer's word or on a screenshot of their UPI app. Poll `/transaction/{reference_id}` from `qr.poll_after` seconds, every `qr.poll_every` seconds, or subscribe to `upicw.success`. An unpaid QR expires in about a minute and becomes `FAILED` with `failure_code: QR_EXPIRED`.\n\n**Each outlet uses its own merchant** — The QR is created under the outlet's own merchant, onboarded and eKYC'd through `/ext/v1/aeps/merchants` (the `upicw` permission is enough for those calls; Bank eKYC and daily authentication are not needed for UPI Cash). The bank network enables UPI Cash per merchant, which can take a few days after eKYC; until then `/qr` answers `QR_NOT_CREATED` with `failure_code: OUTLET_NOT_ENABLED`. It is safe to retry later with a new `client_reference`.\n\n**If the payer’s bank declines** — A repeat payment from the same customer to the same outlet within about 30 minutes is very often declined by the customer's own bank as a risk check (`PAYER_BANK_DECLINED`). Ask the customer to wait or to pay from a different UPI app or bank account — retrying at once rarely helps.\n\nDocs: https://payonclick.in/developer/reference/upicw-overview"
    },
    {
      "name": "Micro ATM",
      "item": [
        {
          "name": "Rules & Outlet",
          "item": [
            {
              "name": "Rules & Devices",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/matm/info",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "matm",
                    "info"
                  ]
                },
                "description": "Amount rules, supported card readers and launch limits\n\n**Key permission:** any valid API key\n\nMoves no money.\n\nDocs: https://payonclick.in/developer/reference/matm-info"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/matm/info",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "matm",
                        "info"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"services\": {\n      \"CW\": { \"min_amount\": 100, \"max_amount\": 10000, \"multiple_of\": 100 },\n      \"BE\": { \"amount\": 0 },\n      \"MS\": { \"amount\": 0 }\n    },\n    \"devices\": [\"MOREFUN\", \"NEWLAND\", \"PAX\"],\n    \"launch_valid_minutes\": 15,\n    \"max_open_per_outlet\": 3\n  }\n}"
                }
              ]
            },
            {
              "name": "Preview Charges",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/matm/charges?service=CW&amount=2000",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "matm",
                    "charges"
                  ],
                  "query": [
                    {
                      "key": "service",
                      "value": "CW",
                      "description": "Required. CW | BE | MS",
                      "disabled": false
                    },
                    {
                      "key": "amount",
                      "value": "2000",
                      "description": "Optional. CW only: ₹100 – ₹10,000, multiple of ₹100",
                      "disabled": false
                    }
                  ]
                },
                "description": "Charge, commission and wallet impact for a service on your plan\n\n**Key permission:** any valid API key\n\n`wallet_impact` is what a successful transaction posts to your AEPS wallet: `amount - charge + commission` for CW, `commission - charge` for BE and MS. Moves no money.\n\nDocs: https://payonclick.in/developer/reference/matm-charges"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/matm/charges?service=CW&amount=2000",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "matm",
                        "charges"
                      ],
                      "query": [
                        {
                          "key": "service",
                          "value": "CW",
                          "description": "Required. CW | BE | MS",
                          "disabled": false
                        },
                        {
                          "key": "amount",
                          "value": "2000",
                          "description": "Optional. CW only: ₹100 – ₹10,000, multiple of ₹100",
                          "disabled": false
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"service\": \"CW\",\n    \"amount\": 2000.0,\n    \"charge\": 0.0,\n    \"commission\": 6.0,\n    \"wallet_impact\": 2006.0\n  }\n}"
                }
              ]
            },
            {
              "name": "Outlet Micro ATM Status",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/matm/merchants/:merchant_ref",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "matm",
                    "merchants",
                    ":merchant_ref"
                  ],
                  "variable": [
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "An outlet onboarded via /ext/v1/aeps/merchants"
                    }
                  ]
                },
                "description": "Whether an outlet can start Micro ATM transactions\n\n**Key permission:** any valid API key\n\n`micro_atm` is `READY` or `NOT_READY`; `reason` then says which step is missing (`ONBOARDING_REQUIRED`, `EKYC_REQUIRED`, `MERCHANT_BLOCKED`).\n\nDocs: https://payonclick.in/developer/reference/matm-outlet"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/matm/merchants/:merchant_ref",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "matm",
                        "merchants",
                        ":merchant_ref"
                      ],
                      "variable": [
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "An outlet onboarded via /ext/v1/aeps/merchants"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"merchant_code\": \"POCAP1001M27\",\n    \"micro_atm\": \"READY\",\n    \"reason\": null,\n    \"message\": \"Micro ATM can be started for this outlet.\",\n    \"transactions\": 42,\n    \"successful\": 39,\n    \"last_confirmed_at\": \"2026-10-08T12:10:44\"\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Transactions",
          "item": [
            {
              "name": "Start Transaction",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/matm/transactions",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "matm",
                    "transactions"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"MATM-2026-000123\",\n  \"service\": \"CW\",\n  \"amount\": 2000,\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376,\n  \"device\": \"MOREFUN\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Create a transaction and get the SDK launch values\n\n**Key permission:** `matm`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `merchant_ref` (required) — The outlet where the card is read\n- `client_reference` (required) — Your unique id and the idempotency key. 1–64 characters: letters, digits, hyphen, underscore\n- `service` (required) — CW (cash withdrawal) | BE (balance enquiry) | MS (mini statement)\n- `amount` — CW only: ₹100 – ₹10,000, multiple of ₹100\n- `latitude` (required) — Outlet GPS latitude\n- `longitude` (required) — Outlet GPS longitude\n- `device` — MOREFUN | PAX | NEWLAND — fills sdk.MICROATM_MANUFACTURER\n\nPut every key of `sdk` on the SDK intent as an extra of the same name and type (strings stay strings; `TYPE` and `MICROATM_MANUFACTURER` are ints, `LATITUDE`/`LONGITUDE` doubles, `AMOUNT_EDITABLE` a boolean) — see Android SDK Integration. `TXN_ID` is the `reference_id`: it ties the bank network's confirmation to this transaction, so never change it. Treat `sdk` as a secret: pass it from your server to your app over your own authenticated channel and do not log it. Launch within `launch_before`. Re-sending the same `client_reference` returns the original with `duplicate: true` and `sdk: null`. At most 3 unfinished transactions per outlet at a time (`TOO_MANY_OPEN`).\n\nDocs: https://payonclick.in/developer/reference/matm-start"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/matm/transactions",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "matm",
                        "transactions"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"merchant_ref\": \"OUTLET-1001\",\n  \"client_reference\": \"MATM-2026-000123\",\n  \"service\": \"CW\",\n  \"amount\": 2000,\n  \"latitude\": 25.5941,\n  \"longitude\": 85.1376,\n  \"device\": \"MOREFUN\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"MAPI1789012345678\",\n    \"client_reference\": \"MATM-2026-000123\",\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"service\": \"CW\",\n    \"status\": \"PENDING\",\n    \"amount\": 2000.0,\n    \"wallet_impact\": 0.0,\n    \"confirmed_by_bank_network\": false,\n    \"message\": \"Waiting for the bank network to confirm. Do NOT pay out cash again for this customer until the status is final.\",\n    \"sdk\": {\n      \"SUPER_MERCHANTID\": \"1234\",\n      \"MERCHANT_USERID\": \"POCAP1001M27\",\n      \"MERCHANT_PASSWORD\": \"******\",\n      \"MOBILE_NUMBER\": \"9876543210\",\n      \"AMOUNT\": \"2000\",\n      \"AMOUNT_EDITABLE\": false,\n      \"TYPE\": 2,\n      \"TXN_ID\": \"MAPI1789012345678\",\n      \"REMARKS\": \"MATMCW\",\n      \"LATITUDE\": 25.5941,\n      \"LONGITUDE\": 85.1376,\n      \"MICROATM_MANUFACTURER\": 2\n    },\n    \"launch_before\": \"2026-10-08T12:25:00\",\n    \"duplicate\": false\n  }\n}"
                }
              ]
            },
            {
              "name": "Report SDK Result",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/matm/transaction/:reference_id/result",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "matm",
                    "transaction",
                    ":reference_id",
                    "result"
                  ],
                  "variable": [
                    {
                      "key": "reference_id",
                      "value": "MAPI1789012345678",
                      "description": "From POST /transactions"
                    }
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": true,\n  \"message\": \"Transaction Successful\",\n  \"response_code\": \"00\",\n  \"rrn\": \"528112345678\",\n  \"provider_txn_id\": \"MACA1234567890\",\n  \"card_number\": \"XXXXXXXXXXXX4321\",\n  \"card_type\": \"RUPAY\",\n  \"bank_name\": \"State Bank of India\",\n  \"balance\": 15230.45,\n  \"terminal_id\": \"FP123456\",\n  \"device\": \"MOREFUN\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Tell us what the SDK returned on the phone — send PayonclickMatmResult.toReportJson()\n\n**Key permission:** `matm`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `status` (required) — The SDK’s TRANS_STATUS (true / false), or \"CANCELLED\" / \"NO_RESPONSE\" when the SDK gave no result\n- `message` — MESSAGE\n- `response_code` — RESPONSE_CODE (or STATUS_CODE)\n- `rrn` — RRN\n- `provider_txn_id` — The provider transaction id (PayonclickMatmResult.providerTxnId)\n- `card_number` — CARD_NUM (masked by the SDK)\n- `card_type` — CARD_TYPE\n- `bank_name` — BANK_NAME\n- `balance` — BALANCE_AMOUNT\n- `terminal_id` — TERMINAL_ID\n- `device` — The card reader model\n- `device_serial` — The card reader serial number\n- `mini_statement` — MS: the LIST rows as {date, txnType, amount, narration}\n\nAlways report, also when the SDK was cancelled or returned nothing — it is what support reads in a dispute. A reported `true` keeps the transaction `PENDING` until the bank network confirms it; a reported failure makes it `FAILED`, and if the bank network later confirms it anyway, it still becomes `SUCCESS` and is credited. A report on a transaction that is already final answers `recorded: false`.\n\nDocs: https://payonclick.in/developer/reference/matm-report"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/matm/transaction/:reference_id/result",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "matm",
                        "transaction",
                        ":reference_id",
                        "result"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "MAPI1789012345678",
                          "description": "From POST /transactions"
                        }
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"status\": true,\n  \"message\": \"Transaction Successful\",\n  \"response_code\": \"00\",\n  \"rrn\": \"528112345678\",\n  \"provider_txn_id\": \"MACA1234567890\",\n  \"card_number\": \"XXXXXXXXXXXX4321\",\n  \"card_type\": \"RUPAY\",\n  \"bank_name\": \"State Bank of India\",\n  \"balance\": 15230.45,\n  \"terminal_id\": \"FP123456\",\n  \"device\": \"MOREFUN\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"MAPI1789012345678\",\n    \"status\": \"PENDING\",\n    \"message\": \"Waiting for the bank network to confirm. Do NOT pay out cash again for this customer until the status is final.\",\n    \"recorded\": true\n    /* ... */\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Status & History",
          "item": [
            {
              "name": "Get Micro ATM Transaction",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/matm/transaction/:reference_id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "matm",
                    "transaction",
                    ":reference_id"
                  ],
                  "variable": [
                    {
                      "key": "reference_id",
                      "value": "MAPI1789012345678",
                      "description": "From POST /transactions"
                    }
                  ]
                },
                "description": "A transaction’s current status and, once final, its bank details\n\n**Key permission:** any valid API key\n\n**`failure_code`** (FAILED only): `INCORRECT_PIN`, `INSUFFICIENT_FUNDS`, `CANCELLED` and `DECLINED` (anything else; `bank_response_code` and `message` carry the detail). `mini_statement` (MS only) lists up to 20 rows of `{date, type, amount, narration}`. A new attempt needs a new `client_reference`.\n\nDocs: https://payonclick.in/developer/reference/matm-transaction"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/matm/transaction/:reference_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "matm",
                        "transaction",
                        ":reference_id"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "MAPI1789012345678",
                          "description": "From POST /transactions"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"MAPI1789012345678\",\n    \"client_reference\": \"MATM-2026-000123\",\n    \"merchant_ref\": \"OUTLET-1001\",\n    \"service\": \"CW\",\n    \"status\": \"SUCCESS\",\n    \"amount\": 2000.0,\n    \"card\": \"XXXX-XXXX-XXXX-4321\",\n    \"card_type\": \"RUPAY\",\n    \"bank_name\": \"State Bank of India\",\n    \"bank_rrn\": \"528112345678\",\n    \"account_balance\": 15230.45,\n    \"mini_statement\": null,\n    \"charge\": 0.0,\n    \"commission\": 6.0,\n    \"wallet_impact\": 2006.0,\n    \"confirmed_by_bank_network\": true,\n    \"failure_code\": null,\n    \"bank_response_code\": null,\n    \"message\": \"Bank network confirmed the withdrawal.\",\n    \"created_at\": \"2026-10-08T12:10:05\",\n    \"updated_at\": \"2026-10-08T12:10:44\"\n  }\n}"
                },
                {
                  "name": "200 OK · declined",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/matm/transaction/:reference_id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "matm",
                        "transaction",
                        ":reference_id"
                      ],
                      "variable": [
                        {
                          "key": "reference_id",
                          "value": "MAPI1789012345678",
                          "description": "From POST /transactions"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"MAPI1789012345679\",\n    \"service\": \"CW\",\n    \"status\": \"FAILED\",\n    \"amount\": 3000.0,\n    \"wallet_impact\": 0.0,\n    \"failure_code\": \"INCORRECT_PIN\",\n    \"bank_response_code\": \"55\",\n    \"message\": \"Incorrect PIN\"\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "Get by Client Reference",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/matm/transaction/by-client-reference/:client_reference",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "matm",
                    "transaction",
                    "by-client-reference",
                    ":client_reference"
                  ],
                  "variable": [
                    {
                      "key": "client_reference",
                      "value": "MATM-2026-000123",
                      "description": "The value you sent to POST /transactions"
                    }
                  ]
                },
                "description": "Look a transaction up by your own idempotency key\n\n**Key permission:** any valid API key\n\nThe safe answer after a timeout. `404 NOT_FOUND` means the reference never reached us, so you may send it.\n\nDocs: https://payonclick.in/developer/reference/matm-transaction-by-client-ref"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/matm/transaction/by-client-reference/:client_reference",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "matm",
                        "transaction",
                        "by-client-reference",
                        ":client_reference"
                      ],
                      "variable": [
                        {
                          "key": "client_reference",
                          "value": "MATM-2026-000123",
                          "description": "The value you sent to POST /transactions"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"reference_id\": \"MAPI1789012345678\",\n    \"client_reference\": \"MATM-2026-000123\",\n    \"status\": \"PENDING\",\n    \"amount\": 2000.0\n    /* ... */\n  }\n}"
                }
              ]
            },
            {
              "name": "Micro ATM History",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/matm/transactions?status=SUCCESS&service=CW&merchant_ref=OUTLET-1001",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "matm",
                    "transactions"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Optional. Default 1",
                      "disabled": true
                    },
                    {
                      "key": "per_page",
                      "value": "20",
                      "description": "Optional. Default 20, max 100",
                      "disabled": true
                    },
                    {
                      "key": "status",
                      "value": "SUCCESS",
                      "description": "Optional. SUCCESS | PENDING | FAILED",
                      "disabled": false
                    },
                    {
                      "key": "service",
                      "value": "CW",
                      "description": "Optional. CW | BE | MS",
                      "disabled": false
                    },
                    {
                      "key": "merchant_ref",
                      "value": "OUTLET-1001",
                      "description": "Optional. One outlet only",
                      "disabled": false
                    },
                    {
                      "key": "from_date",
                      "value": "2026-09-01",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    },
                    {
                      "key": "to_date",
                      "value": "2026-09-30",
                      "description": "Optional. YYYY-MM-DD",
                      "disabled": true
                    }
                  ]
                },
                "description": "Paginated Micro ATM history across your outlets\n\n**Key permission:** any valid API key\n\nNewest first. Lists transactions started through the API only.\n\nDocs: https://payonclick.in/developer/reference/matm-transactions"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/matm/transactions?status=SUCCESS&service=CW&merchant_ref=OUTLET-1001",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "matm",
                        "transactions"
                      ],
                      "query": [
                        {
                          "key": "page",
                          "value": "1",
                          "description": "Optional. Default 1",
                          "disabled": true
                        },
                        {
                          "key": "per_page",
                          "value": "20",
                          "description": "Optional. Default 20, max 100",
                          "disabled": true
                        },
                        {
                          "key": "status",
                          "value": "SUCCESS",
                          "description": "Optional. SUCCESS | PENDING | FAILED",
                          "disabled": false
                        },
                        {
                          "key": "service",
                          "value": "CW",
                          "description": "Optional. CW | BE | MS",
                          "disabled": false
                        },
                        {
                          "key": "merchant_ref",
                          "value": "OUTLET-1001",
                          "description": "Optional. One outlet only",
                          "disabled": false
                        },
                        {
                          "key": "from_date",
                          "value": "2026-09-01",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        },
                        {
                          "key": "to_date",
                          "value": "2026-09-30",
                          "description": "Optional. YYYY-MM-DD",
                          "disabled": true
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"transactions\": [\n      { \"reference_id\": \"MAPI1789012345678\", \"merchant_ref\": \"OUTLET-1001\", \"service\": \"CW\", \"status\": \"SUCCESS\", \"amount\": 2000.0 /* ... */ }\n    ],\n    \"pagination\": { \"total\": 1, \"page\": 1, \"per_page\": 20, \"pages\": 1 }\n  }\n}"
                }
              ]
            }
          ]
        }
      ],
      "description": "Debit-card cash withdrawal, balance enquiry and mini statement at your own outlets on a Bluetooth card reader. The card and PIN are read by our Micro ATM SDK inside your Android app; this API starts each transaction, hands the SDK its launch values and tells you the bank network’s final answer. A withdrawal, less any charge, is credited to your AEPS wallet.\n\n**The bank network decides SUCCESS — not the phone** — The SDK result on the outlet's phone is recorded as evidence, but a transaction becomes `SUCCESS`, and a withdrawal is credited to your AEPS wallet, only when the bank network's own confirmation reaches Payonclick. Pay out cash when the SDK reports the withdrawal as successful — that is the moment the customer's account is debited — and never when it reports a failure or returns nothing. A transaction without a final answer stays `PENDING`; do not repeat it for the same customer.\n\n**Each outlet uses its own merchant** — Micro ATM runs under the outlet's own merchant, onboarded and eKYC'd through `/ext/v1/aeps/merchants` (the `matm` permission is enough for those calls). Bank eKYC and the daily fingerprint authentication are AEPS-only steps and are not needed for Micro ATM.\n\n**Getting the SDK** — The Payonclick Micro ATM SDK (v1.0.0) is an Android library: `payonclick-microatm-sdk-v1.0.0.aar` plus `payonclick-card-reader-v1.0.0.jar`. Ask your account manager for it and share your app's `applicationId`; the SDK runs only in apps enabled for your account. Card readers must be one of the supported models.\n\nDocs: https://payonclick.in/developer/reference/matm-overview"
    },
    {
      "name": "Verification",
      "item": [
        {
          "name": "Catalogue",
          "item": [
            {
              "name": "List Verification Services",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/verify/services",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "verify",
                    "services"
                  ]
                },
                "description": "What can be verified, the fields each needs, and live pricing\n\n**Key permission:** any valid API key\n\nRead this rather than hard-coding a service list — a verification that is switched on for your account appears here on its own, with the price in force. `available: false` means the service is not enabled for you yet.\n\nDocs: https://payonclick.in/developer/reference/verify-services"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/verify/services",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "verify",
                        "services"
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"currency\": \"INR\",\n    \"wallet\": \"MAIN\",\n    \"services\": [\n      {\n        \"service\": \"voter-id\",\n        \"label\": \"Voter ID (EPIC)\",\n        \"category\": \"Officially Valid Document\",\n        \"endpoint\": \"/ext/v1/verify/voter-id\",\n        \"charge\": 4.00,\n        \"available\": true,\n        \"fields\": [\n          { \"name\": \"epic_number\", \"required\": true,  \"description\": \"EPIC number exactly as printed on the card\" },\n          { \"name\": \"name\",        \"required\": false, \"description\": \"Name to match against the electoral record\" }\n        ]\n      }\n      /* ... one entry per verification ... */\n    ]\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Verifications",
          "item": [
            {
              "name": "Bank Account (penny-drop)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/verify/bank-account",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "verify",
                    "bank-account"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"account_number\": \"<account_number>\",\n  \"ifsc\": \"<ifsc>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Bank Account (penny-drop) · Financial\n\n**Key permission:** `verify`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `client_reference` (required) — Your unique idempotency key, max 64 chars\n- `account_number` (required) — Bank account number\n- `ifsc` (required) — 11-character IFSC of the branch\n\nDocs: https://payonclick.in/developer/reference/verify-bank-account"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/verify/bank-account",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "verify",
                        "bank-account"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"account_number\": \"<account_number>\",\n  \"ifsc\": \"<ifsc>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"client_reference\": \"KYC-2026-000123\",\n    \"service\": \"bank-account\",\n    \"verified\": true,\n    \"status\": \"VALID\",\n    \"charge\": 4.00,\n    \"provider_ref\": \"11545330\",\n    \"result\": { /* the record found, fields vary by document */ },\n    \"duplicate\": false\n  }\n}"
                }
              ]
            },
            {
              "name": "GSTIN Verification",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/verify/gstin",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "verify",
                    "gstin"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"gstin\": \"<gstin>\",\n  \"business_name\": \"<business_name>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "GSTIN Verification · Know Your Business\n\n**Key permission:** `verify`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `client_reference` (required) — Your unique idempotency key, max 64 chars\n- `gstin` (required) — 15-character GSTIN of the business\n- `business_name` — Business name to match against the GST record\n\nDocs: https://payonclick.in/developer/reference/verify-gstin"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/verify/gstin",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "verify",
                        "gstin"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"gstin\": \"<gstin>\",\n  \"business_name\": \"<business_name>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"client_reference\": \"KYC-2026-000123\",\n    \"service\": \"gstin\",\n    \"verified\": true,\n    \"status\": \"VALID\",\n    \"charge\": 4.00,\n    \"provider_ref\": \"11545330\",\n    \"result\": { /* the record found, fields vary by document */ },\n    \"duplicate\": false\n  }\n}"
                }
              ]
            },
            {
              "name": "PAN to GSTIN lookup",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/verify/pan-to-gstin",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "verify",
                    "pan-to-gstin"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"pan\": \"<pan>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "PAN to GSTIN lookup · Know Your Business\n\n**Key permission:** `verify`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `client_reference` (required) — Your unique idempotency key, max 64 chars\n- `pan` (required) — 10-character PAN of the business\n\nDocs: https://payonclick.in/developer/reference/verify-pan-to-gstin"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/verify/pan-to-gstin",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "verify",
                        "pan-to-gstin"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"pan\": \"<pan>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"client_reference\": \"KYC-2026-000123\",\n    \"service\": \"pan-to-gstin\",\n    \"verified\": true,\n    \"status\": \"VALID\",\n    \"charge\": 4.00,\n    \"provider_ref\": \"11545330\",\n    \"result\": { /* the record found, fields vary by document */ },\n    \"duplicate\": false\n  }\n}"
                }
              ]
            },
            {
              "name": "Driving Licence",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/verify/driving-licence",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "verify",
                    "driving-licence"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"dl_number\": \"<dl_number>\",\n  \"dob\": \"<dob>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Driving Licence · Officially Valid Document\n\n**Key permission:** `verify`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `client_reference` (required) — Your unique idempotency key, max 64 chars\n- `dl_number` (required) — Driving licence number\n- `dob` (required) — Date of birth on the licence, YYYY-MM-DD\n\nDocs: https://payonclick.in/developer/reference/verify-driving-licence"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/verify/driving-licence",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "verify",
                        "driving-licence"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"dl_number\": \"<dl_number>\",\n  \"dob\": \"<dob>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"client_reference\": \"KYC-2026-000123\",\n    \"service\": \"driving-licence\",\n    \"verified\": true,\n    \"status\": \"VALID\",\n    \"charge\": 4.00,\n    \"provider_ref\": \"11545330\",\n    \"result\": { /* the record found, fields vary by document */ },\n    \"duplicate\": false\n  }\n}"
                }
              ]
            },
            {
              "name": "Vehicle RC",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/verify/vehicle-rc",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "verify",
                    "vehicle-rc"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"vehicle_number\": \"<vehicle_number>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Vehicle RC · Officially Valid Document\n\n**Key permission:** `verify`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `client_reference` (required) — Your unique idempotency key, max 64 chars\n- `vehicle_number` (required) — Registration number, e.g. HR26DK8337\n\nDocs: https://payonclick.in/developer/reference/verify-vehicle-rc"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/verify/vehicle-rc",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "verify",
                        "vehicle-rc"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"vehicle_number\": \"<vehicle_number>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"client_reference\": \"KYC-2026-000123\",\n    \"service\": \"vehicle-rc\",\n    \"verified\": true,\n    \"status\": \"VALID\",\n    \"charge\": 4.00,\n    \"provider_ref\": \"11545330\",\n    \"result\": { /* the record found, fields vary by document */ },\n    \"duplicate\": false\n  }\n}"
                }
              ]
            },
            {
              "name": "Voter ID (EPIC)",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "url": {
                  "raw": "{{base_url}}/ext/v1/verify/voter-id",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "verify",
                    "voter-id"
                  ]
                },
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"epic_number\": \"<epic_number>\",\n  \"name\": \"<name>\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "description": "Voter ID (EPIC) · Officially Valid Document\n\n**Key permission:** `verify`\n\n**Live call** — acts on your real account (a payment, a charge, an OTP SMS or a saved record). There is no sandbox.\n\n**Body fields**\n- `client_reference` (required) — Your unique idempotency key, max 64 chars\n- `epic_number` (required) — EPIC number exactly as printed on the card\n- `name` — Name to match against the electoral record\n\nDocs: https://payonclick.in/developer/reference/verify-voter-id"
              },
              "response": [
                {
                  "name": "201 Created",
                  "originalRequest": {
                    "method": "POST",
                    "header": [
                      {
                        "key": "Content-Type",
                        "value": "application/json"
                      }
                    ],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/verify/voter-id",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "verify",
                        "voter-id"
                      ]
                    },
                    "body": {
                      "mode": "raw",
                      "raw": "{\n  \"client_reference\": \"KYC-2026-000123\",\n  \"epic_number\": \"<epic_number>\",\n  \"name\": \"<name>\"\n}",
                      "options": {
                        "raw": {
                          "language": "json"
                        }
                      }
                    }
                  },
                  "status": "Created",
                  "code": 201,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"client_reference\": \"KYC-2026-000123\",\n    \"service\": \"voter-id\",\n    \"verified\": true,\n    \"status\": \"VALID\",\n    \"charge\": 4.00,\n    \"provider_ref\": \"11545330\",\n    \"result\": { /* the record found, fields vary by document */ },\n    \"duplicate\": false\n  }\n}"
                }
              ]
            }
          ]
        },
        {
          "name": "Results",
          "item": [
            {
              "name": "Get Verification Result",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/ext/v1/verify/result/:client_reference",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "ext",
                    "v1",
                    "verify",
                    "result",
                    ":client_reference"
                  ],
                  "variable": [
                    {
                      "key": "client_reference",
                      "value": "KYC-2026-000123",
                      "description": "The key you sent with the verification"
                    }
                  ]
                },
                "description": "Re-read a verification you already ran\n\n**Key permission:** any valid API key\n\nResults are stored against your `client_reference`, so a verification never has to be paid for twice to be read again. Re-posting the same `client_reference` to the verification endpoint also returns the original result with `duplicate: true`, and is not charged.\n\nDocs: https://payonclick.in/developer/reference/verify-result"
              },
              "response": [
                {
                  "name": "200 OK",
                  "originalRequest": {
                    "method": "GET",
                    "header": [],
                    "url": {
                      "raw": "{{base_url}}/ext/v1/verify/result/:client_reference",
                      "host": [
                        "{{base_url}}"
                      ],
                      "path": [
                        "ext",
                        "v1",
                        "verify",
                        "result",
                        ":client_reference"
                      ],
                      "variable": [
                        {
                          "key": "client_reference",
                          "value": "KYC-2026-000123",
                          "description": "The key you sent with the verification"
                        }
                      ]
                    }
                  },
                  "status": "OK",
                  "code": 200,
                  "_postman_previewlanguage": "json",
                  "header": [
                    {
                      "key": "Content-Type",
                      "value": "application/json"
                    }
                  ],
                  "body": "{\n  \"success\": true,\n  \"data\": {\n    \"client_reference\": \"KYC-2026-000123\",\n    \"service\": \"voter-id\",\n    \"verified\": true,\n    \"status\": \"VALID\",\n    \"charge\": 4.00,\n    \"provider_ref\": \"11545330\",\n    \"result\": { \"name\": \"RAMESH KUMAR\", \"dob\": \"1985-04-12\" },\n    \"created_at\": \"2026-07-29T15:02:11\"\n  }\n}"
                }
              ]
            }
          ]
        }
      ],
      "description": "Identity and business verification against government sources — bank accounts, Voter ID, Driving Licence, Vehicle RC, GSTIN and PAN → GSTIN. One request shape for every document: post the fields the service lists, get a verified answer plus the record that was found.\n\n**You are charged for the lookup, not for a positive result** — A Voter ID that comes back `verified: false` still reached the government source and is billed. You are _not_ charged when the request is rejected before dispatch (bad format, missing field), nor when the provider errors or times out. Prices are per service — read them from `GET /ext/v1/verify/services`.\n\nDocs: https://payonclick.in/developer/reference/verify-overview"
    }
  ]
}