@ekoindia/eps-context-mcp 0.1.14 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/data/eps.json +1344 -779
  2. package/package.json +1 -1
package/data/eps.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "meta": {
3
3
  "org": "ekoindia",
4
4
  "apiVersion": "v3",
5
- "bundleVersion": "a5376048",
5
+ "bundleVersion": "be6a360c",
6
6
  "environments": [
7
7
  {
8
8
  "id": "sandbox",
@@ -5499,7 +5499,7 @@
5499
5499
  "summary": "Retrieve the list of supported BBPS biller categories (electricity, gas, DTH, etc.).",
5500
5500
  "category": "payment",
5501
5501
  "relevance": "M",
5502
- "description": "Returns all active biller categories available on the BBPS network. Use the returned category_id to filter the Get Operators call. Categories include electricity, gas, water, DTH, broadband, prepaid recharge, FASTag, insurance, EMI payments, LPG booking, credit card, and more.",
5502
+ "description": "Returns all BBPS biller categories. Pass an `operator_category_id` from here as the `category` filter on Get Operators, and as the `category` param on Fetch Bill and Pay Bill.\n\nCommon ids: 1 Broadband Postpaid · 2 Gas · 4 DTH · 5 Mobile Prepaid · 6 Tax · 7 Credit Card · 8 Electricity · 9 Landline Postpaid · 10 Mobile Postpaid · 11 Water · 12 Housing Society · 13 Subscription · 14 Education · 15 Municipal Taxes · 16 Clubs and Associations · 17 Cable TV · 18 LPG Cylinder · 19 Hospital · 20 Insurance · 21 Loan · 22 FASTag · 23 Municipal Services · 24 Rental Payment · 27+ eChallan, Agent Collection, EV Recharge and others.\n\n**Do not hard-code these ids** — the live response is authoritative and the list grows. The category list is returned under `param_attributes.list_elements`, not under `data`.",
5503
5503
  "bestFor": "Populating a category picker UI before letting the user choose a biller.",
5504
5504
  "docsUrl": "https://eps.eko.in/docs/bbps-get-categories",
5505
5505
  "headers": [
@@ -5583,24 +5583,44 @@
5583
5583
  "description": "API-specific response payload.",
5584
5584
  "children": [
5585
5585
  {
5586
- "name": "categories",
5587
- "type": "array",
5588
- "description": "List of all supported BBPS biller categories.",
5586
+ "name": "param_attributes",
5587
+ "type": "object",
5589
5588
  "imp": true,
5589
+ "description": "Wrapper for the category list — returned at the top level of the response, not under `data`.",
5590
5590
  "children": [
5591
5591
  {
5592
- "name": "id",
5593
- "type": "number",
5594
- "description": "Unique category identifier (category_id). Pass as the `category` query param when filtering operators.",
5595
- "imp": true,
5596
- "example": 5
5597
- },
5598
- {
5599
- "name": "category_name",
5600
- "type": "string",
5601
- "description": "Human-readable category label.",
5592
+ "name": "list_elements",
5593
+ "type": "array",
5602
5594
  "imp": true,
5603
- "example": "Electricity"
5595
+ "description": "One entry per BBPS biller category.",
5596
+ "children": [
5597
+ {
5598
+ "name": "operator_category_id",
5599
+ "type": "number",
5600
+ "description": "Category identifier. Pass as the `category` filter on Get Operators, and as `category` on Fetch Bill / Pay Bill.",
5601
+ "imp": true,
5602
+ "example": 8
5603
+ },
5604
+ {
5605
+ "name": "operator_category_name",
5606
+ "type": "string",
5607
+ "description": "Human-readable category name.",
5608
+ "imp": true,
5609
+ "example": "Electricity"
5610
+ },
5611
+ {
5612
+ "name": "operator_category_group",
5613
+ "type": "string",
5614
+ "description": "Grouping code for the category.",
5615
+ "example": "0"
5616
+ },
5617
+ {
5618
+ "name": "status",
5619
+ "type": "string",
5620
+ "description": "`1` = active.",
5621
+ "example": "1"
5622
+ }
5623
+ ]
5604
5624
  }
5605
5625
  ]
5606
5626
  }
@@ -5608,81 +5628,47 @@
5608
5628
  }
5609
5629
  ],
5610
5630
  "sampleSuccessResponse": {
5611
- "status": 0,
5612
5631
  "response_status_id": 0,
5613
- "message": "Success",
5614
- "response_type_id": 1388,
5615
- "data": {
5616
- "categories": [
5617
- {
5618
- "id": 1,
5619
- "category_name": "Prepaid"
5620
- },
5621
- {
5622
- "id": 2,
5623
- "category_name": "DTH"
5624
- },
5625
- {
5626
- "id": 4,
5627
- "category_name": "Postpaid"
5628
- },
5629
- {
5630
- "id": 5,
5631
- "category_name": "Electricity"
5632
- },
5633
- {
5634
- "id": 6,
5635
- "category_name": "Gas"
5636
- },
5637
- {
5638
- "id": 7,
5639
- "category_name": "Water"
5640
- },
5641
- {
5642
- "id": 8,
5643
- "category_name": "Broadband"
5644
- },
5645
- {
5646
- "id": 9,
5647
- "category_name": "Landline"
5648
- },
5649
- {
5650
- "id": 10,
5651
- "category_name": "Insurance"
5652
- },
5653
- {
5654
- "id": 11,
5655
- "category_name": "FASTag"
5656
- },
5657
- {
5658
- "id": 12,
5659
- "category_name": "LPG Booking"
5660
- },
5661
- {
5662
- "id": 13,
5663
- "category_name": "EMI Payments"
5664
- },
5632
+ "param_attributes": {
5633
+ "list_elements": [
5665
5634
  {
5666
- "id": 14,
5667
- "category_name": "Credit Card"
5635
+ "operator_category_name": "Broadband Postpaid",
5636
+ "operator_category_id": 1,
5637
+ "operator_category_group": "0",
5638
+ "status": "1"
5668
5639
  },
5669
5640
  {
5670
- "id": 15,
5671
- "category_name": "Education"
5641
+ "operator_category_name": "Electricity",
5642
+ "operator_category_id": 8,
5643
+ "operator_category_group": "0",
5644
+ "status": "1"
5672
5645
  },
5673
5646
  {
5674
- "id": 16,
5675
- "category_name": "Metro"
5647
+ "operator_category_name": "Water",
5648
+ "operator_category_id": 11,
5649
+ "operator_category_group": "0",
5650
+ "status": "1"
5676
5651
  },
5677
5652
  {
5678
- "id": 17,
5679
- "category_name": "Municipal Corp"
5653
+ "operator_category_name": "FASTag",
5654
+ "operator_category_id": 22,
5655
+ "operator_category_group": "0",
5656
+ "status": "1"
5680
5657
  }
5681
5658
  ]
5682
- }
5659
+ },
5660
+ "response_type_id": 2457,
5661
+ "message": "BBPS category fetch success",
5662
+ "status": 0
5683
5663
  },
5684
5664
  "errorScenarios": [],
5685
- "responseTypes": []
5665
+ "responseTypes": [
5666
+ {
5667
+ "id": 2457,
5668
+ "meaning": "Category list returned — pick one and list its billers.",
5669
+ "next": "bbps-get-operators"
5670
+ }
5671
+ ]
5686
5672
  },
5687
5673
  {
5688
5674
  "slug": "bbps-get-locations",
@@ -5694,7 +5680,7 @@
5694
5680
  "summary": "Retrieve the list of supported state/location IDs for filtering BBPS operators.",
5695
5681
  "category": "payment",
5696
5682
  "relevance": "M",
5697
- "description": "Returns all supported location (state) identifiers. Pass the returned location_id as the `location` query parameter in the Get Operators call to narrow results to a specific state or circle.",
5683
+ "description": "Returns every operating location (state / UT). Pass an `operator_location_id` from here as the `location` filter on Get Operators to narrow the biller list to one state.\n\n`operator_location_id` is a **zero-padded string** (`\"06\"`, `\"35\"`), not a number — keep it as a string when you pass it back. The list is returned under `param_attributes.list_elements`, not under `data`.",
5698
5684
  "bestFor": "Populating a state filter when displaying biller lists to end users.",
5699
5685
  "docsUrl": "https://eps.eko.in/docs/bbps-get-locations",
5700
5686
  "headers": [
@@ -5778,22 +5764,38 @@
5778
5764
  "description": "API-specific response payload.",
5779
5765
  "children": [
5780
5766
  {
5781
- "name": "locations",
5782
- "type": "array",
5783
- "description": "List of supported state/location entries.",
5767
+ "name": "param_attributes",
5768
+ "type": "object",
5769
+ "imp": true,
5770
+ "description": "Wrapper for the location list — returned at the top level of the response, not under `data`.",
5784
5771
  "children": [
5785
5772
  {
5786
- "name": "id",
5787
- "type": "number",
5788
- "description": "Location identifier to use as the `location` filter when querying operators.",
5773
+ "name": "list_elements",
5774
+ "type": "array",
5789
5775
  "imp": true,
5790
- "example": 7
5791
- },
5792
- {
5793
- "name": "location_name",
5794
- "type": "string",
5795
- "description": "State or circle name.",
5796
- "example": "Delhi"
5776
+ "description": "One entry per operating state / UT.",
5777
+ "children": [
5778
+ {
5779
+ "name": "operator_location_id",
5780
+ "type": "string",
5781
+ "description": "Zero-padded location identifier. Pass as the `location` filter on Get Operators.",
5782
+ "imp": true,
5783
+ "example": "06"
5784
+ },
5785
+ {
5786
+ "name": "operator_location_name",
5787
+ "type": "string",
5788
+ "description": "State / UT name.",
5789
+ "imp": true,
5790
+ "example": "Haryana"
5791
+ },
5792
+ {
5793
+ "name": "abbreviation",
5794
+ "type": "string",
5795
+ "description": "Two-letter state code.",
5796
+ "example": "HR"
5797
+ }
5798
+ ]
5797
5799
  }
5798
5800
  ]
5799
5801
  }
@@ -5801,57 +5803,38 @@
5801
5803
  }
5802
5804
  ],
5803
5805
  "sampleSuccessResponse": {
5804
- "status": 0,
5805
5806
  "response_status_id": 0,
5806
- "message": "Success",
5807
- "response_type_id": 1388,
5808
- "data": {
5809
- "locations": [
5810
- {
5811
- "id": 1,
5812
- "location_name": "Andhra Pradesh"
5813
- },
5814
- {
5815
- "id": 2,
5816
- "location_name": "Bihar"
5817
- },
5818
- {
5819
- "id": 3,
5820
- "location_name": "Gujarat"
5821
- },
5822
- {
5823
- "id": 4,
5824
- "location_name": "Karnataka"
5825
- },
5826
- {
5827
- "id": 5,
5828
- "location_name": "Maharashtra"
5829
- },
5830
- {
5831
- "id": 6,
5832
- "location_name": "Rajasthan"
5833
- },
5834
- {
5835
- "id": 7,
5836
- "location_name": "Delhi"
5837
- },
5807
+ "param_attributes": {
5808
+ "list_elements": [
5838
5809
  {
5839
- "id": 8,
5840
- "location_name": "Tamil Nadu"
5810
+ "operator_location_name": "Haryana",
5811
+ "operator_location_id": "06",
5812
+ "abbreviation": "HR"
5841
5813
  },
5842
5814
  {
5843
- "id": 9,
5844
- "location_name": "Uttar Pradesh"
5815
+ "operator_location_name": "Madhya Pradesh",
5816
+ "operator_location_id": "23",
5817
+ "abbreviation": "MP"
5845
5818
  },
5846
5819
  {
5847
- "id": 10,
5848
- "location_name": "West Bengal"
5820
+ "operator_location_name": "Andaman and Nicobar",
5821
+ "operator_location_id": "35",
5822
+ "abbreviation": "AN"
5849
5823
  }
5850
5824
  ]
5851
- }
5825
+ },
5826
+ "response_type_id": 2459,
5827
+ "message": "BBPS location fetch success",
5828
+ "status": 0
5852
5829
  },
5853
5830
  "errorScenarios": [],
5854
- "responseTypes": []
5831
+ "responseTypes": [
5832
+ {
5833
+ "id": 2459,
5834
+ "meaning": "Location list returned — use one as the `location` filter on Get Operators.",
5835
+ "next": "bbps-get-operators"
5836
+ }
5837
+ ]
5855
5838
  },
5856
5839
  {
5857
5840
  "slug": "bbps-get-operators",
@@ -5863,8 +5846,8 @@
5863
5846
  "summary": "List all active BBPS billers, optionally filtered by category and/or state.",
5864
5847
  "category": "payment",
5865
5848
  "relevance": "M",
5866
- "description": "Returns every currently active BBPS biller. Use `category` and `location` query parameters to narrow results. The `billFetchResponse` flag on each operator tells you whether the Fetch Bill step is mandatory before payment. Operators that are temporarily disabled are excluded from the response — poll this endpoint periodically to keep your list fresh.",
5867
- "bestFor": "Building a biller selection UI and determining which operators require a bill fetch before payment.",
5849
+ "description": "Returns the list of billers. Filter by `category`, `location`, or both, using the identifiers from Get Categories and Get Locations; omit both to list every biller.\n\nThe `operator_id` returned here is what you pass as **`phone_operator_code`** to Fetch Bill and Pay Bill — the names differ. `billFetchResponse` tells you whether the biller supports a live bill fetch. The list is returned under `param_attributes.list_elements`, not under `data`.",
5850
+ "bestFor": "Building a biller selection UI and determining which operators support a live bill fetch.",
5868
5851
  "docsUrl": "https://eps.eko.in/docs/bbps-get-operators",
5869
5852
  "headers": [
5870
5853
  {
@@ -5918,16 +5901,16 @@
5918
5901
  "name": "category",
5919
5902
  "type": "number",
5920
5903
  "required": false,
5921
- "description": "Filter by category — use the `id` from Get Categories.",
5922
- "example": 5,
5904
+ "description": "Filter by category — the `operator_category_id` from Get Categories.",
5905
+ "example": 11,
5923
5906
  "in": "query"
5924
5907
  },
5925
5908
  {
5926
5909
  "name": "location",
5927
5910
  "type": "number",
5928
5911
  "required": false,
5929
- "description": "Filter by state/circle — use the `id` from Get Locations.",
5930
- "example": 7,
5912
+ "description": "Filter by state / UT — the `operator_location_id` from Get Locations.",
5913
+ "example": 35,
5931
5914
  "in": "query"
5932
5915
  }
5933
5916
  ],
@@ -5963,42 +5946,63 @@
5963
5946
  "description": "API-specific response payload.",
5964
5947
  "children": [
5965
5948
  {
5966
- "name": "operators",
5967
- "type": "array",
5968
- "description": "List of active BBPS billers matching the filters.",
5949
+ "name": "param_attributes",
5950
+ "type": "object",
5951
+ "imp": true,
5952
+ "description": "Wrapper for the biller list — returned at the top level of the response, not under `data`.",
5969
5953
  "children": [
5970
5954
  {
5971
- "name": "operator_id",
5972
- "type": "number",
5973
- "description": "Unique operator identifier. Pass this value in Fetch Bill and Pay Bill requests.",
5974
- "imp": true,
5975
- "example": 83
5976
- },
5977
- {
5978
- "name": "operator_name",
5979
- "type": "string",
5980
- "description": "Display name of the biller.",
5981
- "imp": true,
5982
- "example": "BSES Rajdhani"
5983
- },
5984
- {
5985
- "name": "category_id",
5986
- "type": "number",
5987
- "description": "Category this operator belongs to.",
5988
- "example": 5
5989
- },
5990
- {
5991
- "name": "billFetchResponse",
5992
- "type": "number",
5993
- "description": "1 = must call Fetch Bill API before Pay Bill; 0 = can pay directly.",
5955
+ "name": "list_elements",
5956
+ "type": "array",
5994
5957
  "imp": true,
5995
- "example": 1
5996
- },
5997
- {
5998
- "name": "high_commission_channel",
5999
- "type": "number",
6000
- "description": "0 = instant settlement (default); 1 = delayed channel with higher commissions.",
6001
- "example": 0
5958
+ "description": "One entry per biller matching the filters.",
5959
+ "children": [
5960
+ {
5961
+ "name": "operator_id",
5962
+ "type": "number",
5963
+ "description": "Biller identifier. Pass as `phone_operator_code` to Fetch Bill and Pay Bill.",
5964
+ "imp": true,
5965
+ "example": 541
5966
+ },
5967
+ {
5968
+ "name": "name",
5969
+ "type": "string",
5970
+ "description": "Biller name.",
5971
+ "imp": true,
5972
+ "example": "Port Blair Municipal Council - Water"
5973
+ },
5974
+ {
5975
+ "name": "operator_category",
5976
+ "type": "number",
5977
+ "description": "Category this operator belongs to.",
5978
+ "example": 11
5979
+ },
5980
+ {
5981
+ "name": "location_id",
5982
+ "type": "number",
5983
+ "description": "Location this operator serves; `0` = pan-India.",
5984
+ "example": 35
5985
+ },
5986
+ {
5987
+ "name": "kyc_required",
5988
+ "type": "number",
5989
+ "description": "Whether customer KYC is required for this operator.",
5990
+ "example": 0
5991
+ },
5992
+ {
5993
+ "name": "billFetchResponse",
5994
+ "type": "number",
5995
+ "description": "Whether the operator supports live bill fetch (`1` = yes).",
5996
+ "imp": true,
5997
+ "example": 0
5998
+ },
5999
+ {
6000
+ "name": "high_commission_channel",
6001
+ "type": "number",
6002
+ "description": "Whether the biller is available on the higher-commission channel.",
6003
+ "example": 0
6004
+ }
6005
+ ]
6002
6006
  }
6003
6007
  ]
6004
6008
  }
@@ -6006,38 +6010,58 @@
6006
6010
  }
6007
6011
  ],
6008
6012
  "sampleSuccessResponse": {
6009
- "status": 0,
6010
6013
  "response_status_id": 0,
6011
- "message": "Success",
6012
- "response_type_id": 1388,
6013
- "data": {
6014
- "operators": [
6015
- {
6016
- "operator_id": 83,
6017
- "operator_name": "BSES Rajdhani",
6018
- "category_id": 5,
6019
- "billFetchResponse": 1,
6020
- "high_commission_channel": 0
6021
- },
6014
+ "param_attributes": {
6015
+ "list_elements": [
6022
6016
  {
6023
- "operator_id": 84,
6024
- "operator_name": "BSES Yamuna",
6025
- "category_id": 5,
6026
- "billFetchResponse": 1,
6027
- "high_commission_channel": 0
6017
+ "operator_id": 159,
6018
+ "name": "ACT Fibernet",
6019
+ "billFetchResponse": 0,
6020
+ "high_commission_channel": 0,
6021
+ "kyc_required": 1,
6022
+ "operator_category": 1,
6023
+ "location_id": 0
6028
6024
  },
6029
6025
  {
6030
- "operator_id": 87,
6031
- "operator_name": "Tata Power Delhi Distribution",
6032
- "category_id": 5,
6026
+ "operator_id": 541,
6027
+ "name": "Port Blair Municipal Council - Water",
6033
6028
  "billFetchResponse": 0,
6034
- "high_commission_channel": 0
6029
+ "high_commission_channel": 0,
6030
+ "kyc_required": 0,
6031
+ "operator_category": 11,
6032
+ "location_id": 35
6035
6033
  }
6036
6034
  ]
6037
- }
6035
+ },
6036
+ "response_type_id": 2461,
6037
+ "message": "BBPS operators fetch success",
6038
+ "status": 0
6038
6039
  },
6039
- "errorScenarios": [],
6040
- "responseTypes": []
6040
+ "errorScenarios": [
6041
+ {
6042
+ "scenario": "Invalid or missing initiator_id",
6043
+ "statusCode": 200,
6044
+ "example": {
6045
+ "response_status_id": 1,
6046
+ "invalid_params": {
6047
+ "initiator_id": "Merchant does not exist in system."
6048
+ },
6049
+ "data": {
6050
+ "csp_id": "7042769385"
6051
+ },
6052
+ "response_type_id": -1,
6053
+ "message": "Invalid Sender/Initiator",
6054
+ "status": 319
6055
+ }
6056
+ }
6057
+ ],
6058
+ "responseTypes": [
6059
+ {
6060
+ "id": 2461,
6061
+ "meaning": "Biller list returned — read the chosen operator's input fields next.",
6062
+ "next": "bbps-get-operator-parameters"
6063
+ }
6064
+ ]
6041
6065
  },
6042
6066
  {
6043
6067
  "slug": "bbps-get-operator-parameters",
@@ -6049,7 +6073,7 @@
6049
6073
  "summary": "Fetch the custom input fields required by a specific biller before payment.",
6050
6074
  "category": "payment",
6051
6075
  "relevance": "M",
6052
- "description": "Returns the operator-specific parameter schema — field names, labels, data types, and validation regex — needed to build a dynamic payment form. Also returns `fetchBill` (1 = mandatory Fetch Bill step) and `BBPS` (1 = show Bharat BillPay branding). Call this once per operator and cache the result.",
6076
+ "description": "Returns the input fields the chosen operator requires — field names, labels, types and validation regex — so you can render the bill-entry form dynamically.\n\n**`list_elements` is the source of truth for this operator's fields.** The documented parameters on Fetch Bill and Pay Bill are only the common set; every `param_name` returned here must also be sent to **both** calls, with identical values. Call this once per operator and cache the result.\n\nThe payload is returned under `param_attributes`, not under `data`.",
6053
6077
  "bestFor": "Rendering a dynamic bill payment form with correct validation for each biller.",
6054
6078
  "docsUrl": "https://eps.eko.in/docs/bbps-get-operator-parameters",
6055
6079
  "headers": [
@@ -6104,8 +6128,8 @@
6104
6128
  "name": "operator_id",
6105
6129
  "type": "number",
6106
6130
  "required": true,
6107
- "description": "The operator/biller ID from the Get Operators response.",
6108
- "example": 83,
6131
+ "description": "The `operator_id` from the Get Operators response.",
6132
+ "example": 5,
6109
6133
  "in": "path"
6110
6134
  }
6111
6135
  ],
@@ -6141,53 +6165,81 @@
6141
6165
  "description": "API-specific response payload.",
6142
6166
  "children": [
6143
6167
  {
6144
- "name": "fetchBill",
6145
- "type": "number",
6146
- "description": "1 = Fetch Bill API must be called before Pay Bill; 0 = direct payment allowed.",
6168
+ "name": "param_attributes",
6169
+ "type": "object",
6147
6170
  "imp": true,
6148
- "example": 1
6149
- },
6150
- {
6151
- "name": "BBPS",
6152
- "type": "number",
6153
- "description": "1 = biller is on the BBPS network; display the Bharat BillPay logo per NPCI guidelines.",
6154
- "example": 1
6155
- },
6156
- {
6157
- "name": "data",
6158
- "type": "array",
6159
- "description": "List of input parameters required by this biller.",
6171
+ "description": "Wrapper for the operator's parameter schema — returned at the top level of the response, not under `data`.",
6160
6172
  "children": [
6161
6173
  {
6162
- "name": "param_name",
6174
+ "name": "operator_name",
6163
6175
  "type": "string",
6164
- "description": "API field name to send in the Fetch Bill / Pay Bill request.",
6176
+ "description": "Display name of the operator.",
6165
6177
  "imp": true,
6166
- "example": "utility_acc_no"
6178
+ "example": "BSNL Prepaid"
6167
6179
  },
6168
6180
  {
6169
- "name": "param_label",
6170
- "type": "string",
6171
- "description": "UI label to display to the end user.",
6172
- "example": "Consumer Number"
6181
+ "name": "operator_id",
6182
+ "type": "number",
6183
+ "description": "The operator this schema belongs to.",
6184
+ "example": 5
6173
6185
  },
6174
6186
  {
6175
- "name": "param_type",
6176
- "type": "string",
6177
- "description": "Input type: Numeric, Decimal, AlphaNumeric, or List.",
6178
- "example": "Numeric"
6187
+ "name": "fetchBill",
6188
+ "type": "number",
6189
+ "description": "Whether live bill fetch is supported (`1` = yes).",
6190
+ "imp": true,
6191
+ "example": 0
6179
6192
  },
6180
6193
  {
6181
- "name": "regex",
6182
- "type": "string",
6183
- "description": "Regular expression to validate the user's input before submission.",
6184
- "example": "^[0-9]{10,12}$"
6194
+ "name": "BBPS",
6195
+ "type": "number",
6196
+ "description": "Whether the biller is on the BBPS network; display Bharat BillPay branding per NPCI guidelines.",
6197
+ "example": 0
6185
6198
  },
6186
6199
  {
6187
- "name": "error_message",
6188
- "type": "string",
6189
- "description": "Validation error message to show when the regex does not match.",
6190
- "example": "Please enter a valid 10-12 digit consumer number."
6200
+ "name": "list_elements",
6201
+ "type": "array",
6202
+ "imp": true,
6203
+ "description": "The input fields this operator requires. Send every `param_name` to BOTH Fetch Bill and Pay Bill.",
6204
+ "children": [
6205
+ {
6206
+ "name": "param_name",
6207
+ "type": "string",
6208
+ "description": "Field name to submit at bill-fetch / pay time.",
6209
+ "imp": true,
6210
+ "example": "utility_acc_no"
6211
+ },
6212
+ {
6213
+ "name": "param_label",
6214
+ "type": "string",
6215
+ "description": "Label to show the agent.",
6216
+ "example": "Mobile Number"
6217
+ },
6218
+ {
6219
+ "name": "param_id",
6220
+ "type": "string",
6221
+ "description": "Identifier for this field.",
6222
+ "example": "1"
6223
+ },
6224
+ {
6225
+ "name": "param_type",
6226
+ "type": "string",
6227
+ "description": "Field type — e.g. `Numeric`, `List`.",
6228
+ "example": "Numeric"
6229
+ },
6230
+ {
6231
+ "name": "regex",
6232
+ "type": "string",
6233
+ "description": "Client-side validation pattern.",
6234
+ "example": "^[0-9]{10}$"
6235
+ },
6236
+ {
6237
+ "name": "error_message",
6238
+ "type": "string",
6239
+ "description": "Validation message to show when the regex does not match.",
6240
+ "example": "Please enter a valid 10 digit Mobile Number (eg. 0940763946)"
6241
+ }
6242
+ ]
6191
6243
  }
6192
6244
  ]
6193
6245
  }
@@ -6195,40 +6247,385 @@
6195
6247
  }
6196
6248
  ],
6197
6249
  "sampleSuccessResponse": {
6198
- "status": 0,
6199
6250
  "response_status_id": 0,
6200
- "message": "Success",
6201
- "response_type_id": 1388,
6202
- "data": {
6203
- "fetchBill": 1,
6204
- "BBPS": 1,
6205
- "data": [
6251
+ "param_attributes": {
6252
+ "operator_name": "BSNL Prepaid",
6253
+ "list_elements": [
6206
6254
  {
6255
+ "param_label": "Mobile Number",
6207
6256
  "param_name": "utility_acc_no",
6208
- "param_label": "Consumer Number",
6257
+ "param_id": "1",
6209
6258
  "param_type": "Numeric",
6210
- "regex": "^[0-9]{10,12}$",
6211
- "error_message": "Please enter a valid 10-12 digit consumer number."
6259
+ "regex": "^[0-9]{10}$",
6260
+ "error_message": "Please enter a valid 10 digit Mobile Number (eg. 0940763946)"
6261
+ },
6262
+ {
6263
+ "param_label": "Recharge Type",
6264
+ "param_name": "Recharge Type",
6265
+ "param_id": "99",
6266
+ "param_type": "List",
6267
+ "regex": "1|3",
6268
+ "error_message": "Please enter valid Recharge Type"
6269
+ }
6270
+ ],
6271
+ "operator_id": 5,
6272
+ "fetchBill": 0,
6273
+ "BBPS": 0
6274
+ },
6275
+ "response_type_id": 2463,
6276
+ "message": "BBPS operator parameters fetch success",
6277
+ "status": 0
6278
+ },
6279
+ "errorScenarios": [],
6280
+ "responseTypes": [
6281
+ {
6282
+ "id": 2463,
6283
+ "meaning": "Parameter schema returned — collect these fields, then fetch the bill.",
6284
+ "next": "bbps-fetch-bill"
6285
+ }
6286
+ ]
6287
+ },
6288
+ {
6289
+ "slug": "bbps-district-discome",
6290
+ "productId": "bbps",
6291
+ "productName": "Bharat Bill Payment System (BBPS)",
6292
+ "name": "Get District Discome (UPPCL)",
6293
+ "method": "GET",
6294
+ "path": "/customer/payment/bbps/operators/190/district-discome",
6295
+ "summary": "Resolve the district-level distribution company code required by UPPCL (operator 190).",
6296
+ "category": "payment",
6297
+ "relevance": "L",
6298
+ "description": "Some electricity billers require a district-level distribution company (discome) code. This applies to **operator 190 (UPPCL) only** — no other biller needs it, and the path is fixed to `190` rather than parameterised.\n\nShow the agent each `label` and send the matching `value` as `district_discome` on both Fetch Bill and Pay Bill.\n\nThe list is returned under `param_attributes.list_elements`, not under `data`.",
6299
+ "bestFor": "Populating the district picker for UPPCL electricity bill payments.",
6300
+ "docsUrl": "https://eps.eko.in/docs/bbps-district-discome",
6301
+ "headers": [
6302
+ {
6303
+ "name": "developer_key",
6304
+ "in": "header",
6305
+ "type": "string",
6306
+ "required": true,
6307
+ "description": "Static API key issued to your account after KYC."
6308
+ },
6309
+ {
6310
+ "name": "secret-key",
6311
+ "in": "header",
6312
+ "type": "string",
6313
+ "required": true,
6314
+ "description": "Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key)))."
6315
+ },
6316
+ {
6317
+ "name": "secret-key-timestamp",
6318
+ "in": "header",
6319
+ "type": "string",
6320
+ "required": true,
6321
+ "description": "Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time."
6322
+ },
6323
+ {
6324
+ "name": "content-type",
6325
+ "in": "header",
6326
+ "type": "string",
6327
+ "required": true,
6328
+ "description": "application/json",
6329
+ "example": "application/json"
6330
+ }
6331
+ ],
6332
+ "requestParams": [
6333
+ {
6334
+ "name": "initiator_id",
6335
+ "type": "string",
6336
+ "required": true,
6337
+ "description": "Registered mobile number of the API user (see Platform Credentials).",
6338
+ "example": "9962981729",
6339
+ "in": "query"
6340
+ },
6341
+ {
6342
+ "name": "client_ref_id",
6343
+ "type": "string",
6344
+ "required": false,
6345
+ "description": "Unique reference ID per API call, generated by your system (max 20 characters).",
6346
+ "example": "2026010100123456789",
6347
+ "in": "query"
6348
+ }
6349
+ ],
6350
+ "sampleRequest": {},
6351
+ "responseFields": [
6352
+ {
6353
+ "name": "status",
6354
+ "type": "number",
6355
+ "description": "Primary success indicator (0 = success).",
6356
+ "example": 0
6357
+ },
6358
+ {
6359
+ "name": "message",
6360
+ "type": "string",
6361
+ "description": "Human-readable response / error message.",
6362
+ "example": "Verification successful"
6363
+ },
6364
+ {
6365
+ "name": "response_status_id",
6366
+ "type": "number",
6367
+ "description": "Granular status id; see the shared error-codes table.",
6368
+ "example": 0
6369
+ },
6370
+ {
6371
+ "name": "response_type_id",
6372
+ "type": "number",
6373
+ "description": "A unique id for every possible response shape (success or error) — useful for client logic branching and analytics.",
6374
+ "example": 1388
6375
+ },
6376
+ {
6377
+ "name": "data",
6378
+ "type": "object",
6379
+ "description": "API-specific response payload.",
6380
+ "children": [
6381
+ {
6382
+ "name": "param_attributes",
6383
+ "type": "object",
6384
+ "imp": true,
6385
+ "description": "Wrapper for the district list — returned at the top level of the response, not under `data`.",
6386
+ "children": [
6387
+ {
6388
+ "name": "list_elements",
6389
+ "type": "array",
6390
+ "imp": true,
6391
+ "description": "One entry per UPPCL district.",
6392
+ "children": [
6393
+ {
6394
+ "name": "label",
6395
+ "type": "string",
6396
+ "description": "District name to show the agent.",
6397
+ "imp": true,
6398
+ "example": "Lucknow"
6399
+ },
6400
+ {
6401
+ "name": "value",
6402
+ "type": "string",
6403
+ "description": "The `district_discome` value to pass to Fetch Bill and Pay Bill for operator 190.",
6404
+ "imp": true,
6405
+ "example": "Lucknow-MVVNL"
6406
+ }
6407
+ ]
6408
+ }
6409
+ ]
6212
6410
  }
6213
6411
  ]
6214
6412
  }
6413
+ ],
6414
+ "sampleSuccessResponse": {
6415
+ "response_status_id": 0,
6416
+ "param_attributes": {
6417
+ "list_elements": [
6418
+ {
6419
+ "label": "Agra",
6420
+ "value": "Agra-DVVNL"
6421
+ },
6422
+ {
6423
+ "label": "Lucknow",
6424
+ "value": "Lucknow-MVVNL"
6425
+ },
6426
+ {
6427
+ "label": "Kanpur Nagar",
6428
+ "value": "Kanpur Nagar-KESCO"
6429
+ },
6430
+ {
6431
+ "label": "Varanasi",
6432
+ "value": "Varanasi-PUVNL"
6433
+ }
6434
+ ]
6435
+ },
6436
+ "response_type_id": 2110,
6437
+ "message": "Success",
6438
+ "status": 0
6439
+ },
6440
+ "errorScenarios": [
6441
+ {
6442
+ "scenario": "Districts unavailable — note this still returns status 0, so branch on response_type_id",
6443
+ "statusCode": 200,
6444
+ "example": {
6445
+ "response_status_id": 0,
6446
+ "response_type_id": 2434,
6447
+ "message": "Failed to fetch districts",
6448
+ "status": 0
6449
+ }
6450
+ }
6451
+ ],
6452
+ "responseTypes": [
6453
+ {
6454
+ "id": 2110,
6455
+ "meaning": "District list returned — pass the chosen `value` as `district_discome` when fetching the bill.",
6456
+ "next": "bbps-fetch-bill"
6457
+ },
6458
+ {
6459
+ "id": 2434,
6460
+ "meaning": "Districts could not be fetched. The envelope still carries `status: 0`, so branch on this id rather than on `status`."
6461
+ }
6462
+ ]
6463
+ },
6464
+ {
6465
+ "slug": "bbps-operator-code-circle",
6466
+ "productId": "bbps",
6467
+ "productName": "Bharat Bill Payment System (BBPS)",
6468
+ "name": "Get Operator Code and Circle",
6469
+ "method": "GET",
6470
+ "path": "/customer/payment/bbps/recharge/{customer_mobile}/operator",
6471
+ "summary": "Auto-detect a mobile number's recharge operator code and telecom circle.",
6472
+ "category": "payment",
6473
+ "relevance": "M",
6474
+ "description": "Detects the telecom operator and circle for a customer mobile number, returned as name/value pairs under `dependent_params` at the top level of the response (not under `data`).\n\n**Watch the rename:** this endpoint returns `circle_area`, but Get Recharge Plans expects that value as the **`circleid`** query parameter. The `phone_operator_code` value carries over under the same name.",
6475
+ "bestFor": "Resolving operator and circle before fetching recharge plans.",
6476
+ "docsUrl": "https://eps.eko.in/docs/bbps-operator-code-circle",
6477
+ "headers": [
6478
+ {
6479
+ "name": "developer_key",
6480
+ "in": "header",
6481
+ "type": "string",
6482
+ "required": true,
6483
+ "description": "Static API key issued to your account after KYC."
6484
+ },
6485
+ {
6486
+ "name": "secret-key",
6487
+ "in": "header",
6488
+ "type": "string",
6489
+ "required": true,
6490
+ "description": "Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key)))."
6491
+ },
6492
+ {
6493
+ "name": "secret-key-timestamp",
6494
+ "in": "header",
6495
+ "type": "string",
6496
+ "required": true,
6497
+ "description": "Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time."
6498
+ },
6499
+ {
6500
+ "name": "content-type",
6501
+ "in": "header",
6502
+ "type": "string",
6503
+ "required": true,
6504
+ "description": "application/json",
6505
+ "example": "application/json"
6506
+ }
6507
+ ],
6508
+ "requestParams": [
6509
+ {
6510
+ "name": "initiator_id",
6511
+ "type": "string",
6512
+ "required": true,
6513
+ "description": "Registered mobile number of the API user (see Platform Credentials).",
6514
+ "example": "9962981729",
6515
+ "in": "query"
6516
+ },
6517
+ {
6518
+ "name": "client_ref_id",
6519
+ "type": "string",
6520
+ "required": false,
6521
+ "description": "Unique reference ID per API call, generated by your system (max 20 characters).",
6522
+ "example": "2026010100123456789",
6523
+ "in": "query"
6524
+ },
6525
+ {
6526
+ "name": "customer_mobile",
6527
+ "type": "string",
6528
+ "required": true,
6529
+ "description": "Customer's mobile number.",
6530
+ "example": "9876543210",
6531
+ "in": "path"
6532
+ }
6533
+ ],
6534
+ "sampleRequest": {},
6535
+ "responseFields": [
6536
+ {
6537
+ "name": "status",
6538
+ "type": "number",
6539
+ "description": "Primary success indicator (0 = success).",
6540
+ "example": 0
6541
+ },
6542
+ {
6543
+ "name": "message",
6544
+ "type": "string",
6545
+ "description": "Human-readable response / error message.",
6546
+ "example": "Verification successful"
6547
+ },
6548
+ {
6549
+ "name": "response_status_id",
6550
+ "type": "number",
6551
+ "description": "Granular status id; see the shared error-codes table.",
6552
+ "example": 0
6553
+ },
6554
+ {
6555
+ "name": "response_type_id",
6556
+ "type": "number",
6557
+ "description": "A unique id for every possible response shape (success or error) — useful for client logic branching and analytics.",
6558
+ "example": 1388
6559
+ },
6560
+ {
6561
+ "name": "data",
6562
+ "type": "object",
6563
+ "description": "API-specific response payload.",
6564
+ "children": [
6565
+ {
6566
+ "name": "dependent_params",
6567
+ "type": "array",
6568
+ "imp": true,
6569
+ "description": "Resolved operator/circle as name-value pairs (`phone_operator_code`, `circle_area`) — returned at the top level, not under `data`.",
6570
+ "children": [
6571
+ {
6572
+ "name": "name",
6573
+ "type": "string",
6574
+ "description": "Parameter name (`phone_operator_code` or `circle_area`).",
6575
+ "example": "phone_operator_code"
6576
+ },
6577
+ {
6578
+ "name": "value",
6579
+ "type": "number",
6580
+ "description": "Parameter value. Pass `circle_area`'s value on as `circleid` to Get Recharge Plans.",
6581
+ "example": 400
6582
+ }
6583
+ ]
6584
+ }
6585
+ ]
6586
+ }
6587
+ ],
6588
+ "sampleSuccessResponse": {
6589
+ "response_status_id": 0,
6590
+ "dependent_params": [
6591
+ {
6592
+ "name": "phone_operator_code",
6593
+ "value": 1
6594
+ },
6595
+ {
6596
+ "name": "circle_area",
6597
+ "value": "23"
6598
+ }
6599
+ ],
6600
+ "data": {
6601
+ "updates": ""
6602
+ },
6603
+ "response_type_id": 1804,
6604
+ "message": "success",
6605
+ "status": 0
6215
6606
  },
6216
6607
  "errorScenarios": [],
6217
- "responseTypes": []
6608
+ "responseTypes": [
6609
+ {
6610
+ "id": 1804,
6611
+ "meaning": "Operator and circle detected — list the plans available for them.",
6612
+ "next": "bbps-recharge-plans"
6613
+ }
6614
+ ]
6218
6615
  },
6219
6616
  {
6220
- "slug": "bbps-fetch-bill",
6617
+ "slug": "bbps-recharge-plans",
6221
6618
  "productId": "bbps",
6222
6619
  "productName": "Bharat Bill Payment System (BBPS)",
6223
- "name": "Fetch BBPS Bill",
6620
+ "name": "Get Recharge Plans",
6224
6621
  "method": "GET",
6225
- "path": "/customer/payment/bbps/bill",
6226
- "summary": "Retrieve outstanding bill details from a biller before processing payment.",
6622
+ "path": "/customer/payment/bbps/recharge/{customer_mobile}/operator/plans",
6623
+ "summary": "List the prepaid mobile / DTH recharge plans available for an operator and circle.",
6227
6624
  "category": "payment",
6228
- "relevance": "H",
6229
- "description": "Fetches the live bill for a customer from the biller's system. Required for operators where `billFetchResponse = 1`. The response includes the outstanding amount, due date, and a `billfetchresponse` token that must be forwarded verbatim in the subsequent Pay Bill call. Pass `hc_channel=1` to use the higher-commission delayed channel.",
6230
- "bestFor": "Showing the customer their outstanding bill amount and due date before confirming payment.",
6231
- "docsUrl": "https://eps.eko.in/docs/bbps-fetch-bill",
6625
+ "relevance": "M",
6626
+ "description": "Lists available recharge plans for an operator and circle. Plans arrive under `dependent_params` at the top level (not under `data`): the `req_list` entry's `value` array holds the plans, and its `type_metadata[].headers` describe which field is the price, the validity and the description.\n\n**`circleid` is the `circle_area` value** returned by Get Operator Code and Circle — the parameter is renamed between the two calls. Once the customer picks a plan, submit its `amount` through Pay Bill.",
6627
+ "bestFor": "Showing the customer the available recharge packs before submitting the recharge.",
6628
+ "docsUrl": "https://eps.eko.in/docs/bbps-recharge-plans",
6232
6629
  "headers": [
6233
6630
  {
6234
6631
  "name": "developer_key",
@@ -6278,83 +6675,310 @@
6278
6675
  "in": "query"
6279
6676
  },
6280
6677
  {
6281
- "name": "utility_acc_no",
6678
+ "name": "customer_mobile",
6282
6679
  "type": "string",
6283
6680
  "required": true,
6284
- "description": "Customer's account / consumer number with the biller.",
6285
- "example": "1234567890",
6681
+ "description": "Customer's mobile number.",
6682
+ "example": "9876543210",
6683
+ "in": "path"
6684
+ },
6685
+ {
6686
+ "name": "phone_operator_code",
6687
+ "type": "string",
6688
+ "required": true,
6689
+ "description": "Operator code from the Get Operator Code and Circle response.",
6690
+ "example": "400",
6286
6691
  "in": "query"
6287
6692
  },
6288
6693
  {
6289
- "name": "confirmation_mobile_no",
6694
+ "name": "circleid",
6290
6695
  "type": "string",
6291
6696
  "required": true,
6292
- "description": "Customer's mobile number for transaction confirmation.",
6293
- "example": "9999988888",
6697
+ "description": "Circle identifier — the value returned as `circle_area` by Get Operator Code and Circle. Note the name differs between the two endpoints.",
6698
+ "example": "5",
6294
6699
  "in": "query"
6700
+ }
6701
+ ],
6702
+ "sampleRequest": {},
6703
+ "responseFields": [
6704
+ {
6705
+ "name": "status",
6706
+ "type": "number",
6707
+ "description": "Primary success indicator (0 = success).",
6708
+ "example": 0
6295
6709
  },
6296
6710
  {
6297
- "name": "sender_name",
6711
+ "name": "message",
6712
+ "type": "string",
6713
+ "description": "Human-readable response / error message.",
6714
+ "example": "Verification successful"
6715
+ },
6716
+ {
6717
+ "name": "response_status_id",
6718
+ "type": "number",
6719
+ "description": "Granular status id; see the shared error-codes table.",
6720
+ "example": 0
6721
+ },
6722
+ {
6723
+ "name": "response_type_id",
6724
+ "type": "number",
6725
+ "description": "A unique id for every possible response shape (success or error) — useful for client logic branching and analytics.",
6726
+ "example": 1388
6727
+ },
6728
+ {
6729
+ "name": "data",
6730
+ "type": "object",
6731
+ "description": "API-specific response payload.",
6732
+ "children": [
6733
+ {
6734
+ "name": "dependent_params",
6735
+ "type": "array",
6736
+ "imp": true,
6737
+ "description": "Plan groups — returned at the top level, not under `data`. The entry named `req_list` carries the plans.",
6738
+ "children": [
6739
+ {
6740
+ "name": "name",
6741
+ "type": "string",
6742
+ "description": "Group name; `req_list` holds the plan list.",
6743
+ "example": "req_list"
6744
+ },
6745
+ {
6746
+ "name": "value",
6747
+ "type": "array",
6748
+ "imp": true,
6749
+ "description": "The available plans.",
6750
+ "children": [
6751
+ {
6752
+ "name": "amount",
6753
+ "type": "string",
6754
+ "description": "Plan price in rupees. Send this as `amount` to Pay Bill.",
6755
+ "imp": true,
6756
+ "example": "349"
6757
+ },
6758
+ {
6759
+ "name": "validity",
6760
+ "type": "string",
6761
+ "description": "How long the plan is valid for.",
6762
+ "imp": true,
6763
+ "example": "28 Days"
6764
+ },
6765
+ {
6766
+ "name": "plan_description",
6767
+ "type": "string",
6768
+ "description": "What the plan includes.",
6769
+ "imp": true,
6770
+ "example": "1.5 GB/day + Unlimited Calls ..."
6771
+ }
6772
+ ]
6773
+ },
6774
+ {
6775
+ "name": "type_metadata",
6776
+ "type": "array",
6777
+ "description": "Column metadata describing which plan field is the price, the validity and the description."
6778
+ }
6779
+ ]
6780
+ }
6781
+ ]
6782
+ }
6783
+ ],
6784
+ "sampleSuccessResponse": {
6785
+ "response_status_id": 0,
6786
+ "dependent_params": [
6787
+ {
6788
+ "type_metadata": [
6789
+ {
6790
+ "headers": [
6791
+ {
6792
+ "name": "amount",
6793
+ "value": "price"
6794
+ },
6795
+ {
6796
+ "name": "validity",
6797
+ "value": "validity"
6798
+ },
6799
+ {
6800
+ "name": "plan_description",
6801
+ "value": "plan_description"
6802
+ }
6803
+ ],
6804
+ "dependent_params": [
6805
+ {
6806
+ "name": "amount",
6807
+ "value": "amount"
6808
+ }
6809
+ ]
6810
+ }
6811
+ ],
6812
+ "name": "req_list",
6813
+ "value": [
6814
+ {
6815
+ "amount": "224",
6816
+ "validity": "30 Days",
6817
+ "plan_description": "Unlimited Calls + 4GB data ..."
6818
+ },
6819
+ {
6820
+ "amount": "349",
6821
+ "validity": "28 Days",
6822
+ "plan_description": "1.5 GB/day + Unlimited Calls ..."
6823
+ }
6824
+ ]
6825
+ }
6826
+ ],
6827
+ "response_type_id": 1804,
6828
+ "message": "success",
6829
+ "status": 0
6830
+ },
6831
+ "errorScenarios": [
6832
+ {
6833
+ "scenario": "Plans unavailable — note this still returns status 0, so branch on response_type_id",
6834
+ "statusCode": 200,
6835
+ "example": {
6836
+ "response_status_id": 0,
6837
+ "data": {
6838
+ "message": "Unable to fetch plans"
6839
+ },
6840
+ "response_type_id": 1805,
6841
+ "message": "fail to fetch details",
6842
+ "status": 0
6843
+ }
6844
+ }
6845
+ ],
6846
+ "responseTypes": [
6847
+ {
6848
+ "id": 1804,
6849
+ "meaning": "Plans returned — let the customer pick one, then submit its `amount` as the recharge.",
6850
+ "next": "bbps-pay-bill"
6851
+ },
6852
+ {
6853
+ "id": 1805,
6854
+ "meaning": "Plans could not be fetched. The envelope still carries `status: 0`, so branch on this id. The recharge can still proceed with an amount entered by the agent.",
6855
+ "next": "bbps-pay-bill"
6856
+ }
6857
+ ]
6858
+ },
6859
+ {
6860
+ "slug": "bbps-fetch-bill",
6861
+ "productId": "bbps",
6862
+ "productName": "Bharat Bill Payment System (BBPS)",
6863
+ "name": "Fetch BBPS Bill",
6864
+ "method": "GET",
6865
+ "path": "/customer/payment/bbps/bill",
6866
+ "summary": "Retrieve outstanding bill details from a biller before processing payment.",
6867
+ "category": "payment",
6868
+ "relevance": "H",
6869
+ "description": "Retrieves the live bill amount and customer name for a biller. Call this before Pay Bill so the agent can confirm the amount with the customer.\n\n**Carry `amount` and `utilitycustomername` from this response into Pay Bill**, and use the same `client_ref_id` for the matching Pay Bill call. Paying anything other than the fetched amount is rejected with status `208`.\n\n**Parameters vary by operator.** The fields listed below are the common set — call Get Operator Parameters first and treat its `list_elements` as the source of truth. Every additional `param_name` it returns must be sent here **and** to Pay Bill, with the same values in both.\n\nNote that `response_status_id` is `-1` on success for this endpoint. Branch on `status` and `response_type_id`, never on `response_status_id`.",
6870
+ "bestFor": "Showing the customer their outstanding bill amount and due date before confirming payment.",
6871
+ "docsUrl": "https://eps.eko.in/docs/bbps-fetch-bill",
6872
+ "headers": [
6873
+ {
6874
+ "name": "developer_key",
6875
+ "in": "header",
6298
6876
  "type": "string",
6299
6877
  "required": true,
6300
- "description": "Customer's full name.",
6301
- "example": "Ramesh Kumar",
6878
+ "description": "Static API key issued to your account after KYC."
6879
+ },
6880
+ {
6881
+ "name": "secret-key",
6882
+ "in": "header",
6883
+ "type": "string",
6884
+ "required": true,
6885
+ "description": "Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key)))."
6886
+ },
6887
+ {
6888
+ "name": "secret-key-timestamp",
6889
+ "in": "header",
6890
+ "type": "string",
6891
+ "required": true,
6892
+ "description": "Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time."
6893
+ },
6894
+ {
6895
+ "name": "content-type",
6896
+ "in": "header",
6897
+ "type": "string",
6898
+ "required": true,
6899
+ "description": "application/json",
6900
+ "example": "application/json"
6901
+ }
6902
+ ],
6903
+ "requestParams": [
6904
+ {
6905
+ "name": "initiator_id",
6906
+ "type": "string",
6907
+ "required": true,
6908
+ "description": "Registered mobile number of the API user (see Platform Credentials).",
6909
+ "example": "9962981729",
6302
6910
  "in": "query"
6303
6911
  },
6304
6912
  {
6305
- "name": "operator_id",
6913
+ "name": "phone_operator_code",
6306
6914
  "type": "string",
6307
6915
  "required": true,
6308
- "description": "Biller identifier from the Get Operators response.",
6309
- "example": "83",
6916
+ "description": "Biller identifier — the `operator_id` from the Get Operators response.",
6917
+ "example": "53",
6310
6918
  "in": "query"
6311
6919
  },
6312
6920
  {
6313
- "name": "source_ip",
6921
+ "name": "utility_acc_no",
6314
6922
  "type": "string",
6315
6923
  "required": true,
6316
- "description": "IP address of the agent or retailer making this request.",
6317
- "example": "192.168.1.1",
6924
+ "description": "Bill / account number for the biller.",
6925
+ "example": "3287820071",
6318
6926
  "in": "query"
6319
6927
  },
6320
6928
  {
6321
- "name": "latlong",
6929
+ "name": "confirmation_mobile_no",
6322
6930
  "type": "string",
6323
6931
  "required": true,
6324
- "description": "Agent's GPS coordinates as `latitude,longitude`. Mandatory for agent activation compliance.",
6325
- "example": "28.6139,77.2090",
6932
+ "description": "Customer mobile number linked with the bill.",
6933
+ "example": "9903457748",
6934
+ "in": "query"
6935
+ },
6936
+ {
6937
+ "name": "sender_name",
6938
+ "type": "string",
6939
+ "required": true,
6940
+ "description": "Customer name.",
6941
+ "example": "Asaad",
6326
6942
  "in": "query"
6327
6943
  },
6328
6944
  {
6329
- "name": "hc_channel",
6945
+ "name": "category",
6330
6946
  "type": "number",
6331
- "required": false,
6332
- "description": "Payment channel: 0 = Instant (default), 1 = Delayed (higher commissions).",
6333
- "example": 0,
6947
+ "required": true,
6948
+ "description": "The `operator_category_id` from Get Categories (e.g. `8` = Electricity).",
6949
+ "example": 8,
6334
6950
  "in": "query"
6335
6951
  },
6336
6952
  {
6337
- "name": "dob",
6953
+ "name": "client_ref_id",
6338
6954
  "type": "string",
6339
- "required": false,
6340
- "description": "Date of birth of the policy holder in DD/MM/YYYY format. Required for LIC policies.",
6341
- "example": "15/08/1985",
6955
+ "required": true,
6956
+ "description": "Unique partner reference for this request. Reuse the same value on the matching Pay Bill call; use a fresh one for every new payment attempt.",
6957
+ "example": "2026010100123456789",
6958
+ "in": "query"
6959
+ },
6960
+ {
6961
+ "name": "source_ip",
6962
+ "type": "string",
6963
+ "required": true,
6964
+ "description": "Originating client IP address.",
6965
+ "example": "192.168.1.1",
6342
6966
  "in": "query"
6343
6967
  },
6344
6968
  {
6345
- "name": "cycle_number",
6969
+ "name": "district_discome",
6346
6970
  "type": "string",
6347
6971
  "required": false,
6348
- "description": "Electricity bill cycle number. Required for MSEB billers.",
6349
- "example": "202406",
6972
+ "description": "District-level distribution company code. Required for **operator 190 (UPPCL) only** — resolve it via the District Discome endpoint.",
6973
+ "example": "Lucknow-MVVNL",
6350
6974
  "in": "query"
6351
6975
  },
6352
6976
  {
6353
- "name": "authenticator",
6977
+ "name": "state",
6354
6978
  "type": "string",
6355
6979
  "required": false,
6356
- "description": "MSEB portal password. Required for certain MSEB accounts.",
6357
- "example": "mypassword123",
6980
+ "description": "State code, where the operator requires it.",
6981
+ "example": "1",
6358
6982
  "in": "query"
6359
6983
  }
6360
6984
  ],
@@ -6390,86 +7014,129 @@
6390
7014
  "description": "API-specific response payload.",
6391
7015
  "children": [
6392
7016
  {
6393
- "name": "bill_amount",
7017
+ "name": "amount",
6394
7018
  "type": "string",
6395
- "description": "Outstanding bill amount in paise (divide by 100 for rupees).",
7019
+ "description": "Bill amount due, in rupees. Present this to the customer and send the exact same value to Pay Bill.",
6396
7020
  "imp": true,
6397
- "example": "135000"
7021
+ "example": "2870.0"
6398
7022
  },
6399
7023
  {
6400
- "name": "due_date",
7024
+ "name": "utilitycustomername",
6401
7025
  "type": "string",
6402
- "description": "Bill due date returned by the biller.",
7026
+ "description": "Customer name on the bill. Echo this back as `utilitycustomername` on Pay Bill.",
6403
7027
  "imp": true,
6404
- "example": "30/06/2024"
7028
+ "example": "Amit Kumar"
6405
7029
  },
6406
7030
  {
6407
- "name": "bill_number",
7031
+ "name": "billDueDate",
6408
7032
  "type": "string",
6409
- "description": "Biller-assigned bill or reference number.",
7033
+ "description": "Due date in `YYYYMMDD` format.",
6410
7034
  "imp": true,
6411
- "example": "BN20240601XYZ"
7035
+ "example": "20260728"
6412
7036
  },
6413
7037
  {
6414
- "name": "bill_date",
7038
+ "name": "customer_id",
6415
7039
  "type": "string",
6416
- "description": "Date the bill was generated.",
6417
- "example": "01/06/2024"
7040
+ "description": "Account / consumer number resolved by the biller.",
7041
+ "imp": true,
7042
+ "example": "3287820071"
6418
7043
  },
6419
7044
  {
6420
- "name": "customer_name",
7045
+ "name": "billdate",
6421
7046
  "type": "string",
6422
- "description": "Customer name as registered with the biller.",
6423
- "imp": true,
6424
- "example": "Ramesh Kumar"
7047
+ "description": "Date the bill was generated, where the biller returns it.",
7048
+ "example": "null"
6425
7049
  },
6426
7050
  {
6427
- "name": "billfetchresponse",
7051
+ "name": "billername",
6428
7052
  "type": "string",
6429
- "description": "Opaque token from the biller's system. Must be passed as-is in the Pay Bill request body when the operator requires it.",
6430
- "imp": true,
6431
- "example": "eyJhbGciOiJSUzI1NiJ9..."
7053
+ "description": "Biller name, where provided.",
7054
+ "example": ""
7055
+ },
7056
+ {
7057
+ "name": "bbpstrxnrefid",
7058
+ "type": "string",
7059
+ "description": "BBPS transaction reference, where provided.",
7060
+ "example": ""
7061
+ },
7062
+ {
7063
+ "name": "billDetailsList",
7064
+ "type": "array",
7065
+ "description": "Additional bill line items, where the biller returns them.",
7066
+ "example": []
7067
+ },
7068
+ {
7069
+ "name": "ifsc_status",
7070
+ "type": "number",
7071
+ "description": "Biller-side status flag.",
7072
+ "example": 1
7073
+ },
7074
+ {
7075
+ "name": "user_code",
7076
+ "type": "string",
7077
+ "description": "Agent's user code.",
7078
+ "example": "35739001"
6432
7079
  }
6433
7080
  ]
6434
7081
  }
6435
7082
  ],
6436
7083
  "sampleSuccessResponse": {
6437
- "status": 0,
6438
- "response_status_id": 0,
6439
- "message": "Bill fetched successfully",
6440
- "response_type_id": 1388,
7084
+ "response_status_id": -1,
6441
7085
  "data": {
6442
- "bill_amount": "135000",
6443
- "due_date": "30/06/2024",
6444
- "bill_number": "BN20240601XYZ",
6445
- "bill_date": "01/06/2024",
6446
- "customer_name": "Ramesh Kumar",
6447
- "billfetchresponse": "eyJhbGciOiJSUzI1NiJ9..."
6448
- }
7086
+ "amount": "2870.0",
7087
+ "utilitycustomername": "Amit Kumar",
7088
+ "ifsc_status": 1,
7089
+ "user_code": "35739001",
7090
+ "customer_id": "3287820071",
7091
+ "billDueDate": "20260728",
7092
+ "billdate": "null",
7093
+ "billDetailsList": [],
7094
+ "bbpstrxnrefid": "",
7095
+ "billername": ""
7096
+ },
7097
+ "response_type_id": 1052,
7098
+ "message": "Due Bill Amount For utility",
7099
+ "status": 0
6449
7100
  },
6450
7101
  "errorScenarios": [
6451
7102
  {
6452
- "scenario": "Invalid consumer number — biller returns no bill",
7103
+ "scenario": "Required field missing",
6453
7104
  "statusCode": 200,
6454
7105
  "example": {
6455
- "status": 1,
6456
- "response_status_id": 131,
6457
- "message": "Invalid account number. Please check and retry.",
6458
- "data": {}
7106
+ "response_status_id": 1,
7107
+ "invalid_params": {
7108
+ "utility_acc_no": "Please provide the value of the field {2} {3}"
7109
+ },
7110
+ "response_type_id": -1,
7111
+ "message": "Please provide the value of the field",
7112
+ "status": 97
6459
7113
  }
6460
7114
  },
6461
7115
  {
6462
- "scenario": "Biller system unavailable",
7116
+ "scenario": "Bill fetch failed at the biller",
6463
7117
  "statusCode": 200,
6464
7118
  "example": {
6465
- "status": 1,
6466
- "response_status_id": 151,
6467
- "message": "Biller system is temporarily unavailable. Please try again later.",
6468
- "data": {}
7119
+ "response_status_id": 1,
7120
+ "data": {
7121
+ "reason": "Please try again after some time."
7122
+ },
7123
+ "response_type_id": 1468,
7124
+ "message": "Unable to fetch bill",
7125
+ "status": 1468
6469
7126
  }
6470
7127
  }
6471
- ],
6472
- "responseTypes": []
7128
+ ],
7129
+ "responseTypes": [
7130
+ {
7131
+ "id": 1052,
7132
+ "meaning": "Bill fetched — confirm the amount with the customer, then pay it.",
7133
+ "next": "bbps-pay-bill"
7134
+ },
7135
+ {
7136
+ "id": 1468,
7137
+ "meaning": "Bill fetch failed. Verify the account details and retry after some time — do not proceed to payment."
7138
+ }
7139
+ ]
6473
7140
  },
6474
7141
  {
6475
7142
  "slug": "bbps-pay-bill",
@@ -6481,7 +7148,7 @@
6481
7148
  "summary": "Process a bill payment or recharge for any BBPS-connected biller.",
6482
7149
  "category": "payment",
6483
7150
  "relevance": "H",
6484
- "description": "The core money-debit API that executes a bill payment or prepaid recharge on the BBPS network. For operators where `billFetchResponse = 1`, the `billfetchresponse` token returned by the Fetch Bill API must be included. Parameter names sent here must exactly match the `param_name` values from Get Operator Parameters. Pass `hc_channel=1` to route through the high-commission channel, which can take up to 6 hours to settle on the biller side.",
7151
+ "description": "The money-debit call that pays a bill or submits a recharge on the BBPS network. For a bill payment, send the `amount` confirmed at Fetch Bill and the `utilitycustomername` it returned. A prepaid recharge skips Fetch Bill, so it sends the chosen plan's amount and omits `utilitycustomername`.\n\n**Pay the exact amount returned by Fetch Bill** — a mismatch is rejected with status `208`. On `208`, re-fetch the bill and retry with a **fresh** `client_ref_id`; a `client_ref_id` identifies one payment attempt and must never be reused across retries. Persist `tid` and your `client_ref_id` before any retry — status `208` still returns a `tid`.\n\n**Parameters vary by operator.** The fields below are the common set; pass every `param_name` returned by Get Operator Parameters as well. The parameter set sent here must match the set sent to Fetch Bill for the same operator.",
6485
7152
  "bestFor": "Executing utility bill payments and prepaid recharges for end customers.",
6486
7153
  "docsUrl": "https://eps.eko.in/docs/bbps-pay-bill",
6487
7154
  "financial": true,
@@ -6526,107 +7193,98 @@
6526
7193
  "in": "body"
6527
7194
  },
6528
7195
  {
6529
- "name": "client_ref_id",
7196
+ "name": "phone_operator_code",
6530
7197
  "type": "string",
6531
- "required": false,
6532
- "description": "Unique reference ID per API call, generated by your system (max 20 characters).",
6533
- "example": "2026010100123456789",
7198
+ "required": true,
7199
+ "description": "Biller identifier — the `operator_id` from the Get Operators response.",
7200
+ "example": "53",
6534
7201
  "in": "body"
6535
7202
  },
6536
7203
  {
6537
7204
  "name": "utility_acc_no",
6538
7205
  "type": "string",
6539
7206
  "required": true,
6540
- "description": "Customer's account or consumer number with the biller.",
6541
- "example": "1234567890",
7207
+ "description": "Bill / account number. For a prepaid recharge, the customer's mobile number.",
7208
+ "example": "3287820071",
6542
7209
  "in": "body"
6543
7210
  },
6544
7211
  {
6545
7212
  "name": "confirmation_mobile_no",
6546
7213
  "type": "string",
6547
7214
  "required": true,
6548
- "description": "Customer's mobile number for payment confirmation.",
6549
- "example": "9999988888",
7215
+ "description": "Customer mobile number.",
7216
+ "example": "9903457748",
6550
7217
  "in": "body"
6551
7218
  },
6552
7219
  {
6553
7220
  "name": "sender_name",
6554
7221
  "type": "string",
6555
7222
  "required": true,
6556
- "description": "Customer's full name.",
6557
- "example": "Ramesh Kumar",
7223
+ "description": "Customer name.",
7224
+ "example": "Asaad",
6558
7225
  "in": "body"
6559
7226
  },
6560
7227
  {
6561
- "name": "operator_id",
6562
- "type": "string",
7228
+ "name": "category",
7229
+ "type": "number",
6563
7230
  "required": true,
6564
- "description": "Biller identifier from the Get Operators response.",
6565
- "example": "83",
7231
+ "description": "The `operator_category_id` from Get Categories (e.g. `8` = Electricity).",
7232
+ "example": 8,
6566
7233
  "in": "body"
6567
7234
  },
6568
7235
  {
6569
7236
  "name": "amount",
6570
- "type": "string",
7237
+ "type": "number",
6571
7238
  "required": true,
6572
- "description": "Payment amount in rupees (e.g. '1350' for ₹1,350).",
6573
- "example": "1350",
7239
+ "description": "Amount to pay, in rupees. Must equal the `amount` returned by Fetch Bill.",
7240
+ "example": 2870,
6574
7241
  "in": "body"
6575
7242
  },
6576
7243
  {
6577
- "name": "source_ip",
7244
+ "name": "utilitycustomername",
6578
7245
  "type": "string",
6579
- "required": true,
6580
- "description": "IP address of the agent or retailer making this request.",
6581
- "example": "192.168.1.1",
7246
+ "required": false,
7247
+ "description": "Customer name as returned by Fetch Bill. Mandatory for bill payments where Bill Fetch is done. Not applicable to prepaid recharges, which skip Bill Fetch.",
7248
+ "example": "Amit Kumar",
6582
7249
  "in": "body"
6583
7250
  },
6584
7251
  {
6585
- "name": "latlong",
7252
+ "name": "client_ref_id",
6586
7253
  "type": "string",
6587
7254
  "required": true,
6588
- "description": "Agent's GPS coordinates as `latitude,longitude`. Mandatory for agent activation compliance.",
6589
- "example": "28.6139,77.2090",
7255
+ "description": "Unique partner reference for this payment attempt. Reuse the value sent to the matching Fetch Bill call; generate a fresh one for every retry.",
7256
+ "example": "2026010100123456789",
6590
7257
  "in": "body"
6591
7258
  },
6592
7259
  {
6593
- "name": "billfetchresponse",
7260
+ "name": "source_ip",
6594
7261
  "type": "string",
6595
- "required": false,
6596
- "description": "The opaque token returned by the Fetch Bill API. Required when the operator's `billFetchResponse = 1`.",
6597
- "example": "eyJhbGciOiJSUzI1NiJ9...",
7262
+ "required": true,
7263
+ "description": "Originating client IP address.",
7264
+ "example": "192.168.1.1",
6598
7265
  "in": "body"
6599
7266
  },
6600
7267
  {
6601
- "name": "dob",
7268
+ "name": "district_discome",
6602
7269
  "type": "string",
6603
7270
  "required": false,
6604
- "description": "Date of birth of the policy holder in DD/MM/YYYY format. Required for LIC policy payments.",
6605
- "example": "15/08/1985",
6606
- "in": "body"
6607
- },
6608
- {
6609
- "name": "postalcode",
6610
- "type": "number",
6611
- "required": false,
6612
- "description": "6-digit PIN code of the customer. Required for MSEB electricity payments.",
6613
- "example": 400001,
7271
+ "description": "District-level distribution company code. Required for **operator 190 (UPPCL) only** — pass the same value used at Fetch Bill.",
7272
+ "example": "Lucknow-MVVNL",
6614
7273
  "in": "body"
6615
7274
  }
6616
7275
  ],
6617
7276
  "sampleRequest": {
6618
7277
  "initiator_id": "9962981729",
7278
+ "phone_operator_code": "53",
7279
+ "utility_acc_no": "3287820071",
7280
+ "confirmation_mobile_no": "9903457748",
7281
+ "sender_name": "Asaad",
7282
+ "category": 8,
7283
+ "amount": 2870,
7284
+ "utilitycustomername": "Amit Kumar",
6619
7285
  "client_ref_id": "2026010100123456789",
6620
- "utility_acc_no": "1234567890",
6621
- "confirmation_mobile_no": "9999988888",
6622
- "sender_name": "Ramesh Kumar",
6623
- "operator_id": "83",
6624
- "amount": "1350",
6625
7286
  "source_ip": "192.168.1.1",
6626
- "latlong": "28.6139,77.2090",
6627
- "billfetchresponse": "eyJhbGciOiJSUzI1NiJ9...",
6628
- "dob": "15/08/1985",
6629
- "postalcode": 400001
7287
+ "district_discome": "Lucknow-MVVNL"
6630
7288
  },
6631
7289
  "responseFields": [
6632
7290
  {
@@ -6673,276 +7331,204 @@
6673
7331
  {
6674
7332
  "name": "tid",
6675
7333
  "type": "string",
6676
- "description": "Eko's unique transaction identifier. Use this for status enquiry and dispute resolution.",
7334
+ "description": "Eko transaction ID. Store it for reconciliation and dispute resolution — returned on failures too.",
6677
7335
  "imp": true,
6678
- "example": "1734567890"
7336
+ "example": "3570553488"
6679
7337
  },
6680
7338
  {
6681
- "name": "operator_ref_id",
7339
+ "name": "tx_status",
6682
7340
  "type": "string",
6683
- "description": "Reference number issued by the biller / BBPS network confirming receipt of payment.",
7341
+ "description": "Transaction status (`0` = success).",
6684
7342
  "imp": true,
6685
- "example": "BBPS202406011234"
7343
+ "example": "0"
7344
+ },
7345
+ {
7346
+ "name": "txstatus_desc",
7347
+ "type": "string",
7348
+ "description": "Human-readable transaction status.",
7349
+ "example": "Success"
7350
+ },
7351
+ {
7352
+ "name": "status_text",
7353
+ "type": "string",
7354
+ "description": "Status label from the biller.",
7355
+ "example": "SUCCESS"
6686
7356
  },
6687
7357
  {
6688
7358
  "name": "amount",
6689
7359
  "type": "string",
6690
- "description": "Amount debited for this transaction.",
7360
+ "description": "Amount paid.",
6691
7361
  "imp": true,
6692
- "example": "1350"
7362
+ "example": "2870.0"
6693
7363
  },
6694
7364
  {
6695
- "name": "balance",
7365
+ "name": "totalamount",
6696
7366
  "type": "string",
6697
- "description": "Remaining wallet balance of the agent after this transaction.",
6698
- "example": "4820.50"
7367
+ "description": "Total amount debited, including any fee.",
7368
+ "example": "2870.0"
6699
7369
  },
6700
7370
  {
6701
- "name": "utility_acc_no",
7371
+ "name": "fee",
6702
7372
  "type": "string",
6703
- "description": "Consumer/account number against which the payment was made.",
6704
- "example": "1234567890"
7373
+ "description": "Fee charged for this transaction.",
7374
+ "example": "0.0"
6705
7375
  },
6706
7376
  {
6707
- "name": "client_ref_id",
7377
+ "name": "tds",
6708
7378
  "type": "string",
6709
- "description": "Your reference ID echoed back.",
6710
- "example": "BBPS-20240601-001"
6711
- }
6712
- ]
6713
- }
6714
- ],
6715
- "sampleSuccessResponse": {
6716
- "status": 0,
6717
- "response_status_id": 0,
6718
- "message": "Bill payment successful",
6719
- "response_type_id": 333,
6720
- "tx_status": "0",
6721
- "txstatus_desc": "Success",
6722
- "data": {
6723
- "tid": "1734567890",
6724
- "operator_ref_id": "BBPS202406011234",
6725
- "amount": "1350",
6726
- "balance": "4820.50",
6727
- "utility_acc_no": "1234567890",
6728
- "client_ref_id": "BBPS-20240601-001"
6729
- }
6730
- },
6731
- "errorScenarios": [
6732
- {
6733
- "scenario": "Insufficient agent wallet balance",
6734
- "statusCode": 200,
6735
- "example": {
6736
- "status": 1,
6737
- "response_status_id": 347,
6738
- "message": "Insufficient balance.",
6739
- "tx_status": "1",
6740
- "txstatus_desc": "Fail",
6741
- "data": {}
6742
- }
6743
- },
6744
- {
6745
- "scenario": "Transaction awaited — biller not confirmed yet",
6746
- "statusCode": 200,
6747
- "example": {
6748
- "status": 0,
6749
- "response_status_id": 0,
6750
- "message": "Transaction is being processed.",
6751
- "tx_status": "2",
6752
- "txstatus_desc": "Response Awaited",
6753
- "data": {
6754
- "tid": "1734567891",
6755
- "amount": "1350"
6756
- }
6757
- }
6758
- },
6759
- {
6760
- "scenario": "Amount mismatch — pay amount differs from fetched bill",
6761
- "statusCode": 200,
6762
- "example": {
6763
- "status": 1,
6764
- "response_status_id": 148,
6765
- "message": "Amount mismatch. Please fetch the bill again and retry.",
6766
- "tx_status": "1",
6767
- "txstatus_desc": "Fail",
6768
- "data": {}
6769
- }
6770
- }
6771
- ],
6772
- "responseTypes": []
6773
- },
6774
- {
6775
- "slug": "bbps-transaction-status",
6776
- "productId": "bbps",
6777
- "productName": "Bharat Bill Payment System (BBPS)",
6778
- "name": "BBPS Transaction Status",
6779
- "method": "GET",
6780
- "path": "/tools/reference/transaction/{transaction-reference}",
6781
- "summary": "Check the current status of a BBPS bill payment by Eko TID or your client reference ID.",
6782
- "category": "payment",
6783
- "relevance": "M",
6784
- "description": "Get the current status of a transaction using either Eko's TID or your own\n`client_ref_id`. This is a generic inquiry endpoint — it works for all Eko\nfinancial transaction types (fund transfer, BBPS, AePS settlement, NEFT, and\nmore).\n\nThe transaction reference goes in the URL path. Pass an Eko **TID as-is**; to\nlook up by your **`client_ref_id`, prefix it** with `client_ref_id:`:\n- By TID — `/tools/reference/transaction/<TID>`\n- By client_ref_id — `/tools/reference/transaction/client_ref_id:<your client_ref_id>`\n\n> [!NOTE]\n> **Examples**\n>\n> To check the status of a transaction using TID `2886601782`, call\n> `/tools/reference/transaction/2886601782`.\n>\n> If you never received Eko's TID (say, due to a network timeout) but sent your\n> own unique reference `567890`, look it up with\n> `/tools/reference/transaction/client_ref_id:567890`.\n\n> [!WARNING]\n> **Transaction timeout**\n>\n> A transaction can time out for many reasons — a slow partner-bank response, or\n> network connectivity causing a delayed or missing response.\n>\n> In such cases the transaction must **not** be treated as declined or failed.\n> Inquire about its real status using this API with your own `client_ref_id`,\n> instead of retrying the payment.\n\n## `tx_status` values\n\n| `tx_status` | Description |\n|---|---|\n| 0 | Success |\n| 1 | Fail |\n| 2 | Response Awaited / Initiated (in case of NEFT) |\n| 3 | Refund Pending |\n| 4 | Refunded |\n| 5 | Hold (Transaction Inquiry required) |",
6785
- "bestFor": "Reconciling pending transactions and confirming payment outcomes when the Pay Bill response is awaited.",
6786
- "docsUrl": "https://eps.eko.in/docs/bbps-transaction-status",
6787
- "headers": [
6788
- {
6789
- "name": "developer_key",
6790
- "in": "header",
6791
- "type": "string",
6792
- "required": true,
6793
- "description": "Static API key issued to your account after KYC."
6794
- },
6795
- {
6796
- "name": "secret-key",
6797
- "in": "header",
6798
- "type": "string",
6799
- "required": true,
6800
- "description": "Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key)))."
6801
- },
6802
- {
6803
- "name": "secret-key-timestamp",
6804
- "in": "header",
6805
- "type": "string",
6806
- "required": true,
6807
- "description": "Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time."
6808
- },
6809
- {
6810
- "name": "content-type",
6811
- "in": "header",
6812
- "type": "string",
6813
- "required": true,
6814
- "description": "application/json",
6815
- "example": "application/json"
6816
- }
6817
- ],
6818
- "requestParams": [
6819
- {
6820
- "name": "initiator_id",
6821
- "type": "string",
6822
- "required": true,
6823
- "description": "Registered mobile number of the API user (see Platform Credentials).",
6824
- "example": "9962981729",
6825
- "in": "query"
6826
- },
6827
- {
6828
- "name": "client_ref_id",
6829
- "type": "string",
6830
- "required": false,
6831
- "description": "Unique reference ID per API call, generated by your system (max 20 characters).",
6832
- "example": "2026010100123456789",
6833
- "in": "query"
6834
- },
6835
- {
6836
- "name": "transaction-reference",
6837
- "type": "string",
6838
- "required": true,
6839
- "description": "Eko TID or your `client_ref_id` that identifies the transaction. Pass a TID as-is; to look up by `client_ref_id`, prefix it — e.g. `client_ref_id:567890`.",
6840
- "example": "1734567890",
6841
- "in": "path"
6842
- }
6843
- ],
6844
- "sampleRequest": {},
6845
- "responseFields": [
6846
- {
6847
- "name": "status",
6848
- "type": "number",
6849
- "description": "Primary success indicator (0 = success).",
6850
- "example": 0
6851
- },
6852
- {
6853
- "name": "message",
6854
- "type": "string",
6855
- "description": "Human-readable response / error message.",
6856
- "example": "Verification successful"
6857
- },
6858
- {
6859
- "name": "response_status_id",
6860
- "type": "number",
6861
- "description": "Granular status id; see the shared error-codes table.",
6862
- "example": 0
6863
- },
6864
- {
6865
- "name": "response_type_id",
6866
- "type": "number",
6867
- "description": "A unique id for every possible response shape (success or error) — useful for client logic branching and analytics.",
6868
- "example": 1388
6869
- },
6870
- {
6871
- "name": "data",
6872
- "type": "object",
6873
- "description": "API-specific response payload.",
6874
- "children": [
7379
+ "description": "TDS deducted on the commission.",
7380
+ "example": "0.024"
7381
+ },
6875
7382
  {
6876
- "name": "tid",
7383
+ "name": "commission",
6877
7384
  "type": "string",
6878
- "description": "Eko's transaction ID.",
6879
- "imp": true,
6880
- "example": "1734567890"
7385
+ "description": "Agent commission earned on this payment.",
7386
+ "example": "1.2"
6881
7387
  },
6882
7388
  {
6883
- "name": "amount",
7389
+ "name": "balance",
6884
7390
  "type": "string",
6885
- "description": "Transaction amount in rupees.",
7391
+ "description": "Agent wallet balance after the payment.",
6886
7392
  "imp": true,
6887
- "example": "1350"
7393
+ "example": "46537.3"
6888
7394
  },
6889
7395
  {
6890
- "name": "operator_ref_id",
7396
+ "name": "operator_name",
6891
7397
  "type": "string",
6892
- "description": "Biller or BBPS network reference number.",
6893
- "imp": true,
6894
- "example": "BBPS202406011234"
7398
+ "description": "Biller the payment was made to.",
7399
+ "example": "B.E.S.T Mumbai"
7400
+ },
7401
+ {
7402
+ "name": "utilitycustomername",
7403
+ "type": "string",
7404
+ "description": "Customer name on the bill.",
7405
+ "example": "Amit Kumar"
7406
+ },
7407
+ {
7408
+ "name": "customermobilenumber",
7409
+ "type": "string",
7410
+ "description": "Customer mobile number.",
7411
+ "example": "9903457748"
7412
+ },
7413
+ {
7414
+ "name": "account",
7415
+ "type": "string",
7416
+ "description": "Account / consumer number that was paid.",
7417
+ "example": "3287820071"
7418
+ },
7419
+ {
7420
+ "name": "approvalreferencenumber",
7421
+ "type": "string",
7422
+ "description": "Biller approval reference, where provided.",
7423
+ "example": ""
7424
+ },
7425
+ {
7426
+ "name": "payment_mode_desc",
7427
+ "type": "string",
7428
+ "description": "Payment mode used.",
7429
+ "example": "CASH"
7430
+ },
7431
+ {
7432
+ "name": "user_code",
7433
+ "type": "string",
7434
+ "description": "Agent's user code.",
7435
+ "example": "35739001"
7436
+ },
7437
+ {
7438
+ "name": "last_used_okekey",
7439
+ "type": "string",
7440
+ "description": "Last used OkeKey.",
7441
+ "example": "203"
6895
7442
  },
6896
7443
  {
6897
- "name": "utility_acc_no",
7444
+ "name": "timestamp",
6898
7445
  "type": "string",
6899
- "description": "Consumer/account number for which the bill was paid.",
6900
- "example": "1234567890"
7446
+ "description": "Transaction timestamp.",
7447
+ "example": "2026-07-25T09:52:57.428Z"
6901
7448
  }
6902
7449
  ]
6903
7450
  }
6904
7451
  ],
6905
7452
  "sampleSuccessResponse": {
6906
- "status": 0,
6907
7453
  "response_status_id": 0,
6908
- "message": "Transaction found",
6909
- "response_type_id": 1388,
6910
7454
  "data": {
6911
- "tid": "1734567890",
6912
7455
  "tx_status": "0",
6913
7456
  "txstatus_desc": "Success",
6914
- "amount": "1350",
6915
- "operator_ref_id": "BBPS202406011234",
6916
- "utility_acc_no": "1234567890"
6917
- }
7457
+ "status_text": "SUCCESS",
7458
+ "tid": "3570553488",
7459
+ "amount": "2870.0",
7460
+ "totalamount": "2870.0",
7461
+ "fee": "0.0",
7462
+ "tds": "0.024",
7463
+ "commission": "1.2",
7464
+ "balance": "46537.3",
7465
+ "user_code": "35739001",
7466
+ "operator_name": "B.E.S.T Mumbai",
7467
+ "utilitycustomername": "Amit Kumar",
7468
+ "customermobilenumber": "9903457748",
7469
+ "payment_mode_desc": "CASH",
7470
+ "last_used_okekey": "203",
7471
+ "account": "3287820071",
7472
+ "timestamp": "2026-07-25T09:52:57.428Z"
7473
+ },
7474
+ "response_type_id": 333,
7475
+ "message": "Success Last_used_OkeyKey: 203",
7476
+ "status": 0
6918
7477
  },
6919
7478
  "errorScenarios": [
6920
7479
  {
6921
- "scenario": "Transaction not found for the given reference",
7480
+ "scenario": "Amount mismatch — the amount paid differs from the fetched bill",
6922
7481
  "statusCode": 200,
6923
7482
  "example": {
6924
- "status": 1,
6925
- "response_status_id": 463,
6926
- "message": "Transaction not found.",
6927
- "data": {}
7483
+ "response_status_id": 1,
7484
+ "data": {
7485
+ "last_used_okekey": "",
7486
+ "tid": "3571183956"
7487
+ },
7488
+ "response_type_id": 208,
7489
+ "message": "utility.payment.failed Amount entered does not match with bill amount. Please try again",
7490
+ "status": 208
7491
+ }
7492
+ },
7493
+ {
7494
+ "scenario": "Required field missing",
7495
+ "statusCode": 200,
7496
+ "example": {
7497
+ "response_status_id": 1,
7498
+ "invalid_params": {
7499
+ "amount": "Please provide the value of the field {2} {3}"
7500
+ },
7501
+ "response_type_id": -1,
7502
+ "message": "Please provide the value of the field",
7503
+ "status": 97
6928
7504
  }
6929
7505
  }
6930
7506
  ],
6931
- "responseTypes": []
7507
+ "responseTypes": [
7508
+ {
7509
+ "id": 333,
7510
+ "meaning": "Payment successful — persist `tid` and `client_ref_id` for reconciliation."
7511
+ },
7512
+ {
7513
+ "id": 208,
7514
+ "meaning": "Amount does not match the bill. Re-fetch the bill and retry with a fresh `client_ref_id`; a `tid` is still returned, so persist it first.",
7515
+ "next": "bbps-fetch-bill"
7516
+ }
7517
+ ]
6932
7518
  },
6933
- {
6934
- "slug": "bbps-activate-service",
6935
- "productId": "bbps",
6936
- "productName": "Bharat Bill Payment System (BBPS)",
6937
- "name": "Activate BBPS Service",
6938
- "method": "PUT",
6939
- "path": "/user/service/activate",
6940
- "summary": "Onboard an agent/retailer for BBPS bill payment services using service code 53.",
6941
- "category": "payment",
6942
- "relevance": "M",
6943
- "description": "Before a retailer can process BBPS payments, the BBPS service (service_code = 53) must be activated for their `user_code`. This is a one-time setup call per agent. After activation, verify the status using the User Service Enquiry API. The agent's GPS coordinates (`latlong`) are mandatory for production compliance. On production, only IPs located in India are whitelisted; requests from outside India are blocked per compliance.",
6944
- "bestFor": "Onboarding new agents onto the BBPS bill payment service before their first transaction.",
6945
- "docsUrl": "https://eps.eko.in/docs/bbps-activate-service",
7519
+ {
7520
+ "slug": "pan-fetch",
7521
+ "productId": "pan",
7522
+ "productName": "PAN Verification",
7523
+ "name": "Fetch PAN Details",
7524
+ "method": "POST",
7525
+ "path": "/tools/kyc/fetch-pan",
7526
+ "summary": "Fetch the PAN holder's registered full name and category from the PAN number alone.",
7527
+ "category": "verification",
7528
+ "relevance": "H",
7529
+ "description": "Fetch PAN is the lightest PAN lookup: pass only the PAN number and get back the registered full name, the holder category (person / company / firm …) and the PAN status. Unlike PAN Lite and PAN Advanced — which require the PAN number, holder name and date of birth to compute match flags — this endpoint needs no name or DOB, so use it when you have to *discover* the holder's name rather than verify one you already hold.",
7530
+ "bestFor": "Resolving a PAN number to its registered name when no name or DOB is available",
7531
+ "docsUrl": "https://eps.eko.in/docs/pan-fetch",
6946
7532
  "headers": [
6947
7533
  {
6948
7534
  "name": "developer_key",
@@ -6992,27 +7578,28 @@
6992
7578
  "in": "body"
6993
7579
  },
6994
7580
  {
6995
- "name": "service_code",
6996
- "type": "number",
7581
+ "name": "pan_number",
7582
+ "label": "PAN Number",
7583
+ "type": "string",
6997
7584
  "required": true,
6998
- "description": "Service identifier for BBPS. Always 53.",
6999
- "example": 53,
7585
+ "description": "10-character alphanumeric PAN identifier (5 letters, 4 digits, 1 letter).",
7586
+ "example": "GGTPB7880Q",
7000
7587
  "in": "body"
7001
7588
  },
7002
7589
  {
7003
- "name": "latlong",
7590
+ "name": "source",
7004
7591
  "type": "string",
7005
- "required": true,
7006
- "description": "Agent's GPS coordinates as `latitude,longitude`. Mandatory for BBPS agent activation.",
7007
- "example": "28.6139,77.2090",
7592
+ "required": false,
7593
+ "description": "Origin of the request. Use 'API' for server-to-server calls.",
7594
+ "example": "API",
7008
7595
  "in": "body"
7009
7596
  }
7010
7597
  ],
7011
7598
  "sampleRequest": {
7012
7599
  "initiator_id": "9962981729",
7013
7600
  "client_ref_id": "2026010100123456789",
7014
- "service_code": 53,
7015
- "latlong": "28.6139,77.2090"
7601
+ "pan_number": "GGTPB7880Q",
7602
+ "source": "API"
7016
7603
  },
7017
7604
  "responseFields": [
7018
7605
  {
@@ -7045,44 +7632,59 @@
7045
7632
  "description": "API-specific response payload.",
7046
7633
  "children": [
7047
7634
  {
7048
- "name": "service_code",
7049
- "type": "number",
7050
- "description": "The service code that was activated.",
7635
+ "name": "upstream_rrn",
7636
+ "label": "Upstream Reference",
7637
+ "type": "string",
7638
+ "description": "Reference number of the lookup at the upstream source.",
7639
+ "example": "pan_ZLpBnmwapOwtixPUmijB"
7640
+ },
7641
+ {
7642
+ "name": "pan_no",
7643
+ "label": "PAN Number",
7644
+ "type": "string",
7645
+ "description": "The PAN number submitted in the request.",
7051
7646
  "imp": true,
7052
- "example": 53
7647
+ "example": "GGTPB7880Q"
7053
7648
  },
7054
7649
  {
7055
- "name": "service_status",
7650
+ "name": "fullname",
7651
+ "label": "Full Name",
7652
+ "type": "string",
7653
+ "description": "Full name registered against the PAN.",
7654
+ "imp": true,
7655
+ "example": "YASHWANT BASNETT"
7656
+ },
7657
+ {
7658
+ "name": "category",
7659
+ "type": "string",
7660
+ "description": "PAN holder category, e.g. 'person', 'company', 'firm', 'trust', 'huf'.",
7661
+ "imp": true,
7662
+ "example": "person"
7663
+ },
7664
+ {
7665
+ "name": "status",
7666
+ "label": "Lookup Status",
7056
7667
  "type": "string",
7057
- "description": "Activation status for the service on the agent's account.",
7668
+ "description": "Outcome of the PAN lookup, e.g. 'success'.",
7058
7669
  "imp": true,
7059
- "example": "activated"
7670
+ "example": "success"
7060
7671
  }
7061
7672
  ]
7062
7673
  }
7063
7674
  ],
7064
7675
  "sampleSuccessResponse": {
7065
- "status": 0,
7066
7676
  "response_status_id": 0,
7067
- "message": "BBPS service activated successfully",
7068
- "response_type_id": 1388,
7069
7677
  "data": {
7070
- "service_code": 53,
7071
- "service_status": "activated"
7072
- }
7678
+ "upstream_rrn": "pan_ZLpBnmwapOwtixPUmijB",
7679
+ "pan_no": "GGTPB7880Q",
7680
+ "fullname": "YASHWANT BASNETT",
7681
+ "category": "person",
7682
+ "status": "success"
7683
+ },
7684
+ "response_type_id": 0,
7685
+ "status": 0
7073
7686
  },
7074
- "errorScenarios": [
7075
- {
7076
- "scenario": "Service already activated for this agent",
7077
- "statusCode": 200,
7078
- "example": {
7079
- "status": 1,
7080
- "response_status_id": 17,
7081
- "message": "Service is already active for this user.",
7082
- "data": {}
7083
- }
7084
- }
7085
- ],
7687
+ "errorScenarios": [],
7086
7688
  "responseTypes": []
7087
7689
  },
7088
7690
  {
@@ -15264,152 +15866,6 @@
15264
15866
  "errorScenarios": [],
15265
15867
  "responseTypes": []
15266
15868
  },
15267
- {
15268
- "slug": "bbps-operator-code-circle",
15269
- "productId": "bbps",
15270
- "productName": "Bharat Bill Payment System (BBPS)",
15271
- "name": "Get Operator Code and Circle",
15272
- "method": "GET",
15273
- "path": "/customer/payment/bbps/recharge/{customer_mobile}/operator",
15274
- "summary": "Auto-detect a mobile number's recharge operator code and telecom circle.",
15275
- "category": "payment",
15276
- "relevance": "M",
15277
- "description": "Returns the `phone_operator_code` and `circle_area` for a customer mobile number — returned under `dependent_params`. Pass these into Get Recharge Plans.",
15278
- "bestFor": "Resolving operator and circle before fetching recharge plans.",
15279
- "docsUrl": "https://eps.eko.in/docs/bbps-operator-code-circle",
15280
- "headers": [
15281
- {
15282
- "name": "developer_key",
15283
- "in": "header",
15284
- "type": "string",
15285
- "required": true,
15286
- "description": "Static API key issued to your account after KYC."
15287
- },
15288
- {
15289
- "name": "secret-key",
15290
- "in": "header",
15291
- "type": "string",
15292
- "required": true,
15293
- "description": "Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key)))."
15294
- },
15295
- {
15296
- "name": "secret-key-timestamp",
15297
- "in": "header",
15298
- "type": "string",
15299
- "required": true,
15300
- "description": "Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time."
15301
- },
15302
- {
15303
- "name": "content-type",
15304
- "in": "header",
15305
- "type": "string",
15306
- "required": true,
15307
- "description": "application/json",
15308
- "example": "application/json"
15309
- }
15310
- ],
15311
- "requestParams": [
15312
- {
15313
- "name": "initiator_id",
15314
- "type": "string",
15315
- "required": true,
15316
- "description": "Registered mobile number of the API user (see Platform Credentials).",
15317
- "example": "9962981729",
15318
- "in": "query"
15319
- },
15320
- {
15321
- "name": "client_ref_id",
15322
- "type": "string",
15323
- "required": false,
15324
- "description": "Unique reference ID per API call, generated by your system (max 20 characters).",
15325
- "example": "2026010100123456789",
15326
- "in": "query"
15327
- },
15328
- {
15329
- "name": "customer_mobile",
15330
- "type": "string",
15331
- "required": true,
15332
- "description": "Customer's mobile number.",
15333
- "example": "9876543210",
15334
- "in": "path"
15335
- }
15336
- ],
15337
- "sampleRequest": {},
15338
- "responseFields": [
15339
- {
15340
- "name": "status",
15341
- "type": "number",
15342
- "description": "Primary success indicator (0 = success).",
15343
- "example": 0
15344
- },
15345
- {
15346
- "name": "message",
15347
- "type": "string",
15348
- "description": "Human-readable response / error message.",
15349
- "example": "Verification successful"
15350
- },
15351
- {
15352
- "name": "response_status_id",
15353
- "type": "number",
15354
- "description": "Granular status id; see the shared error-codes table.",
15355
- "example": 0
15356
- },
15357
- {
15358
- "name": "response_type_id",
15359
- "type": "number",
15360
- "description": "A unique id for every possible response shape (success or error) — useful for client logic branching and analytics.",
15361
- "example": 1388
15362
- },
15363
- {
15364
- "name": "data",
15365
- "type": "object",
15366
- "description": "API-specific response payload.",
15367
- "children": [
15368
- {
15369
- "name": "dependent_params",
15370
- "type": "array",
15371
- "imp": true,
15372
- "description": "Resolved operator/circle as name-value pairs (phone_operator_code, circle_area) — returned at the top level, not under data.",
15373
- "children": [
15374
- {
15375
- "name": "name",
15376
- "type": "string",
15377
- "description": "Parameter name (phone_operator_code or circle_area).",
15378
- "example": "phone_operator_code"
15379
- },
15380
- {
15381
- "name": "value",
15382
- "type": "number",
15383
- "description": "Parameter value.",
15384
- "example": 400
15385
- }
15386
- ]
15387
- }
15388
- ]
15389
- }
15390
- ],
15391
- "sampleSuccessResponse": {
15392
- "response_status_id": 0,
15393
- "dependent_params": [
15394
- {
15395
- "name": "phone_operator_code",
15396
- "value": 400
15397
- },
15398
- {
15399
- "name": "circle_area",
15400
- "value": "5"
15401
- }
15402
- ],
15403
- "data": {
15404
- "updates": ""
15405
- },
15406
- "response_type_id": 1804,
15407
- "message": "success",
15408
- "status": 0
15409
- },
15410
- "errorScenarios": [],
15411
- "responseTypes": []
15412
- },
15413
15869
  {
15414
15870
  "slug": "digilocker-create-url",
15415
15871
  "productId": "digilocker",
@@ -22794,6 +23250,115 @@
22794
23250
  ]
22795
23251
  }
22796
23252
  ]
23253
+ },
23254
+ {
23255
+ "id": "bbps-bill-payment",
23256
+ "slug": "bbps-bill-payment",
23257
+ "name": "BBPS — Pay a Utility Bill",
23258
+ "summary": "Pick a biller by category, read the fields it requires, fetch the live bill, then pay the exact amount. Get Locations is an optional extra filter on the biller list, and UPPCL (operator 190) additionally needs a district_discome from Get District Discome — neither is a step here because neither applies to every biller.",
23259
+ "productId": "bbps",
23260
+ "steps": [
23261
+ {
23262
+ "specSlug": "bbps-get-categories",
23263
+ "purpose": "List the biller categories and let the agent pick one. The `operator_category_id` chosen here filters the biller list, and is also the `category` param on Fetch Bill and Pay Bill. Do not hard-code these ids — the live list is authoritative.",
23264
+ "branches": [
23265
+ {
23266
+ "onResponseTypeId": 2457,
23267
+ "goto": "bbps-get-operators",
23268
+ "note": "Categories returned — list the billers in the chosen category."
23269
+ }
23270
+ ]
23271
+ },
23272
+ {
23273
+ "specSlug": "bbps-get-operators",
23274
+ "purpose": "List the billers, filtered by the chosen `category` (and optionally by `location` from Get Locations). Note the rename: the `operator_id` returned here is sent as `phone_operator_code` to Fetch Bill and Pay Bill.",
23275
+ "branches": [
23276
+ {
23277
+ "onResponseTypeId": 2461,
23278
+ "goto": "bbps-get-operator-parameters",
23279
+ "note": "Billers returned — read the chosen operator's input fields."
23280
+ }
23281
+ ]
23282
+ },
23283
+ {
23284
+ "specSlug": "bbps-get-operator-parameters",
23285
+ "purpose": "Read the fields this operator requires and render the bill-entry form from them. `list_elements` is the source of truth: every `param_name` it returns must be sent to BOTH the next step and Pay Bill, with identical values. For operator 190 (UPPCL) only, also resolve `district_discome` via Get District Discome before continuing."
23286
+ },
23287
+ {
23288
+ "specSlug": "bbps-fetch-bill",
23289
+ "purpose": "Fetch the live bill and show the customer the amount and due date. Carry `amount` and `utilitycustomername` into the payment, and reuse this call's `client_ref_id` for it. `response_status_id` is `-1` on success here — branch on `response_type_id`, not on it. On `1468` the bill could not be fetched: verify the account details, retry later, and do not pay.",
23290
+ "branches": [
23291
+ {
23292
+ "onResponseTypeId": 1052,
23293
+ "goto": "bbps-pay-bill",
23294
+ "note": "Bill fetched — pay the exact amount returned."
23295
+ }
23296
+ ]
23297
+ },
23298
+ {
23299
+ "specSlug": "bbps-pay-bill",
23300
+ "purpose": "Pay the exact amount returned by Fetch Bill, echoing back `utilitycustomername`. The only money-debit step — persist `tid` and your `client_ref_id` before any retry. A `208` means the amount did not match: re-fetch the bill and retry with a FRESH `client_ref_id` (one reference identifies one payment attempt and must never be reused across retries); a `tid` is returned even on `208`, so store it first.",
23301
+ "branches": [
23302
+ {
23303
+ "onStatus": 0,
23304
+ "goto": "done"
23305
+ },
23306
+ {
23307
+ "onResponseTypeId": 208,
23308
+ "goto": "bbps-fetch-bill",
23309
+ "note": "Amount mismatch — re-fetch the bill and retry with a fresh client_ref_id."
23310
+ }
23311
+ ]
23312
+ },
23313
+ {
23314
+ "specSlug": "transaction-inquiry",
23315
+ "purpose": "Reconciliation only, not a mandatory leg — the previous step already completes the flow on success. This is the generic Transaction Inquiry endpoint, shared across every product. Use it when the Pay Bill response timed out or came back awaited: inquire by `tid`, or by your `client_ref_id` if you never received the `tid`. A timeout is never an automatic failure.",
23316
+ "branches": [
23317
+ {
23318
+ "onStatus": 0,
23319
+ "goto": "done"
23320
+ }
23321
+ ]
23322
+ }
23323
+ ]
23324
+ },
23325
+ {
23326
+ "id": "bbps-mobile-recharge",
23327
+ "slug": "bbps-mobile-recharge",
23328
+ "name": "BBPS — Prepaid Mobile / DTH Recharge",
23329
+ "summary": "Detect the operator and circle from the customer's mobile number, read the operator's input fields, list the available plans, then submit the chosen plan as a payment.",
23330
+ "productId": "bbps",
23331
+ "steps": [
23332
+ {
23333
+ "specSlug": "bbps-operator-code-circle",
23334
+ "purpose": "Detect the telecom operator and circle from the customer's mobile number. Both come back as name/value pairs under `dependent_params` at the top level of the response, not under `data`."
23335
+ },
23336
+ {
23337
+ "specSlug": "bbps-get-operator-parameters",
23338
+ "purpose": "Read the recharge fields this operator requires, using the `phone_operator_code` from the previous step as `operator_id`. Prepaid operators typically expose `utility_acc_no` labelled \"Mobile Number\" plus a \"Recharge Type\" list — send every returned `param_name` to the payment step."
23339
+ },
23340
+ {
23341
+ "specSlug": "bbps-recharge-plans",
23342
+ "purpose": "List the plans for this operator and circle, and let the customer choose one. Mind the rename: pass the previous `circle_area` value as `circleid` here. Plans arrive under `dependent_params` → the `req_list` entry's `value` array.",
23343
+ "branches": [
23344
+ {
23345
+ "onResponseTypeId": 1805,
23346
+ "goto": "bbps-pay-bill",
23347
+ "note": "Plans unavailable (status is still 0) — take the amount from the customer and continue."
23348
+ }
23349
+ ]
23350
+ },
23351
+ {
23352
+ "specSlug": "bbps-pay-bill",
23353
+ "purpose": "Submit the recharge. Map the fields: `phone_operator_code` from step 1, `utility_acc_no` = the customer's mobile number, `category` = the Mobile Prepaid / DTH id from Get Categories, and `amount` = the chosen plan's `amount` (or the agent-entered amount when plans were unavailable). `confirmation_mobile_no` and `sender_name` come from agent-entered customer detail. Omit `utilitycustomername` — it is optional, and only applies to bill payments where Bill Fetch supplied it. Persist `tid` and `client_ref_id`.",
23354
+ "branches": [
23355
+ {
23356
+ "onStatus": 0,
23357
+ "goto": "done"
23358
+ }
23359
+ ]
23360
+ }
23361
+ ]
22797
23362
  }
22798
23363
  ]
22799
23364
  }