@ekoindia/eps-transact-mcp 0.1.23 → 0.1.24

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 +232 -7
  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": "ceae6d30",
5
+ "bundleVersion": "c109bedc",
6
6
  "environments": [
7
7
  {
8
8
  "id": "sandbox",
@@ -3716,6 +3716,196 @@
3716
3716
  }
3717
3717
  ]
3718
3718
  },
3719
+ {
3720
+ "slug": "aeps-fingpay-cash-withdrawal-otp",
3721
+ "productId": "aeps",
3722
+ "productName": "AePS Cashout",
3723
+ "name": "Cash Withdrawal OTP",
3724
+ "method": "POST",
3725
+ "path": "/customer/collection/aeps-fingpay/cash-withdrawal/otp/{customer_id}",
3726
+ "summary": "Generate the transaction OTP required before an AePS cash withdrawal above ₹5,000.",
3727
+ "category": "bc",
3728
+ "relevance": "H",
3729
+ "description": "Fingpay requires a fresh, transaction-scoped OTP for every cash withdrawal above **₹5,000**. Call this before Cash Withdrawal only when `amount` is greater than ₹5,000 — for ₹5,000 or less, skip it and call Cash Withdrawal directly.\n\nOn success the customer receives a 6-digit OTP by SMS on their Aadhaar-linked mobile, and the response returns `data.fp_transaction_id`. Send that id to Cash Withdrawal as `txn_otp_request_id`, and put the SMS OTP in the `otp` attribute of the PidOptions used to capture the customer's fingerprint. They are two different values, and Cash Withdrawal needs both. The id belongs to this one withdrawal attempt: generate a new one for every attempt and never reuse it.\n\nNo biometric capture happens in this call — it takes no `piddata`.",
3730
+ "bestFor": "BC agents and CSPs pre-authorising AePS cash withdrawals above ₹5,000",
3731
+ "docsUrl": "https://eps.eko.in/docs/aeps-fingpay-cash-withdrawal-otp",
3732
+ "headers": [
3733
+ {
3734
+ "name": "developer_key",
3735
+ "in": "header",
3736
+ "type": "string",
3737
+ "required": true,
3738
+ "description": "Static API key issued to your account after KYC."
3739
+ },
3740
+ {
3741
+ "name": "secret-key",
3742
+ "in": "header",
3743
+ "type": "string",
3744
+ "required": true,
3745
+ "description": "Dynamic per-request signature: base64(HMAC-SHA256(timestamp, base64(access_key)))."
3746
+ },
3747
+ {
3748
+ "name": "secret-key-timestamp",
3749
+ "in": "header",
3750
+ "type": "string",
3751
+ "required": true,
3752
+ "description": "Current time in milliseconds since UNIX epoch, used to compute secret-key. Must match server time."
3753
+ },
3754
+ {
3755
+ "name": "content-type",
3756
+ "in": "header",
3757
+ "type": "string",
3758
+ "required": true,
3759
+ "description": "application/json",
3760
+ "example": "application/json"
3761
+ }
3762
+ ],
3763
+ "requestParams": [
3764
+ {
3765
+ "name": "initiator_id",
3766
+ "type": "string",
3767
+ "required": true,
3768
+ "description": "Registered mobile number of the API user (see Platform Credentials).",
3769
+ "example": "9962981729",
3770
+ "in": "body"
3771
+ },
3772
+ {
3773
+ "name": "client_ref_id",
3774
+ "type": "string",
3775
+ "required": false,
3776
+ "description": "Unique reference ID per API call, generated by your system (max 20 characters). The SDKs generate one for every non-GET call when you don't.",
3777
+ "example": "2026010100123456789",
3778
+ "format": "client-ref",
3779
+ "maxLength": 20,
3780
+ "in": "body"
3781
+ },
3782
+ {
3783
+ "name": "user_code",
3784
+ "type": "string",
3785
+ "required": true,
3786
+ "description": "Unique code of your user/agent/retailer the service is run for. Use `Onboard Agent` API to register your users",
3787
+ "example": "10000001",
3788
+ "in": "body"
3789
+ },
3790
+ {
3791
+ "name": "customer_id",
3792
+ "type": "string",
3793
+ "required": true,
3794
+ "description": "Customer's registered mobile number.",
3795
+ "example": "9000000000",
3796
+ "in": "path"
3797
+ },
3798
+ {
3799
+ "name": "bank_code",
3800
+ "type": "string",
3801
+ "required": false,
3802
+ "description": "Short bank code identifying the customer's Aadhaar-linked bank (e.g. `HDFC`, `SBIN`). Obtain from the bank list API. Recommended — send the same value you will use for the withdrawal.",
3803
+ "example": "HDFC",
3804
+ "in": "body"
3805
+ },
3806
+ {
3807
+ "name": "aadhar",
3808
+ "type": "string",
3809
+ "required": true,
3810
+ "description": "RSA-encrypted, Base64-encoded Aadhaar number of the customer — the same value you send to Cash Withdrawal. Encrypt the 12-digit Aadhaar with the Eko RSA public key using PKCS#1 v1.5 padding (Java's default `Cipher.getInstance(\"RSA\")`), then Base64-encode the ciphertext.",
3811
+ "example": "BASE64_ENCRYPTED_AADHAAR",
3812
+ "in": "body"
3813
+ },
3814
+ {
3815
+ "name": "latlong",
3816
+ "type": "string",
3817
+ "format": "lat-long",
3818
+ "required": true,
3819
+ "description": "GPS coordinates of the agent's device in 'latitude,longitude' format.",
3820
+ "example": "28.6139,77.2090",
3821
+ "in": "body"
3822
+ },
3823
+ {
3824
+ "name": "amount",
3825
+ "type": "number",
3826
+ "required": true,
3827
+ "description": "Withdrawal amount in Indian Rupees (integer) — the same amount you will send to Cash Withdrawal. Only call this API when it is above ₹5,000.",
3828
+ "example": 6000,
3829
+ "in": "body"
3830
+ }
3831
+ ],
3832
+ "sampleRequest": {
3833
+ "initiator_id": "9962981729",
3834
+ "client_ref_id": "2026010100123456789",
3835
+ "user_code": "10000001",
3836
+ "bank_code": "HDFC",
3837
+ "aadhar": "BASE64_ENCRYPTED_AADHAAR",
3838
+ "latlong": "28.6139,77.2090",
3839
+ "amount": 6000
3840
+ },
3841
+ "responseFields": [
3842
+ {
3843
+ "name": "status",
3844
+ "type": "number",
3845
+ "description": "Primary success indicator (0 = success).",
3846
+ "example": 0
3847
+ },
3848
+ {
3849
+ "name": "message",
3850
+ "type": "string",
3851
+ "description": "Human-readable response / error message.",
3852
+ "example": "Verification successful"
3853
+ },
3854
+ {
3855
+ "name": "response_status_id",
3856
+ "type": "number",
3857
+ "description": "Granular status id; see the shared error-codes table.",
3858
+ "example": 0
3859
+ },
3860
+ {
3861
+ "name": "response_type_id",
3862
+ "type": "number",
3863
+ "description": "A unique id for every possible response shape (success or error) — useful for client logic branching and analytics.",
3864
+ "example": 1388
3865
+ },
3866
+ {
3867
+ "name": "data",
3868
+ "type": "object",
3869
+ "description": "API-specific response payload.",
3870
+ "children": [
3871
+ {
3872
+ "name": "fp_transaction_id",
3873
+ "type": "string",
3874
+ "description": "OTP reference id for this one withdrawal attempt. Send it to Cash Withdrawal as `txn_otp_request_id`. It is NOT the OTP — the customer receives that by SMS.",
3875
+ "imp": true,
3876
+ "example": "FP2609010001234567"
3877
+ }
3878
+ ]
3879
+ }
3880
+ ],
3881
+ "sampleSuccessResponse": {
3882
+ "response_status_id": 0,
3883
+ "data": {
3884
+ "fp_transaction_id": "FP2609010001234567"
3885
+ },
3886
+ "response_type_id": 1459,
3887
+ "message": "OTP generated successfully. Use the reference ID for your transaction.",
3888
+ "status": 0
3889
+ },
3890
+ "errorScenarios": [
3891
+ {
3892
+ "scenario": "OTP generation failed — generic Fingpay failure. There are no OTP-specific error codes yet; `message` carries the gateway's reason",
3893
+ "statusCode": 200,
3894
+ "example": {
3895
+ "response_status_id": 1,
3896
+ "message": "<failure description from the Fingpay gateway>",
3897
+ "status": 1
3898
+ }
3899
+ }
3900
+ ],
3901
+ "responseTypes": [
3902
+ {
3903
+ "id": 1459,
3904
+ "meaning": "OTP generated and sent to the customer by SMS — send `data.fp_transaction_id` as `txn_otp_request_id` to Cash Withdrawal",
3905
+ "next": "aeps-fingpay-cash-withdrawal"
3906
+ }
3907
+ ]
3908
+ },
3719
3909
  {
3720
3910
  "slug": "aeps-fingpay-cash-withdrawal",
3721
3911
  "productId": "aeps",
@@ -3726,7 +3916,7 @@
3726
3916
  "summary": "Withdraw cash from any Aadhaar-linked bank account using biometric fingerprint authentication — no card or PIN required.",
3727
3917
  "category": "bc",
3728
3918
  "relevance": "H",
3729
- "description": "Allows a customer to withdraw cash from their bank account at an agent/BC point by providing their Aadhaar number and a live fingerprint scan. The agent's biometric device captures a PID XML blob which is passed verbatim to this API. The customer's Aadhaar is RSA-encrypted before transmission. Requires the agent to have completed AePS Fingpay activation, the one-time eKYC (Send OTP → Verify OTP → Biometric), and the Daily KYC for the current day.\n\nTo capture the `piddata` PID block with an RDService-compliant fingerprint scanner, see the [Aadhaar Biometric Authentication guide](/docs/aadhaar-biometric-rdservice).",
3919
+ "description": "Allows a customer to withdraw cash from their bank account at an agent/BC point by providing their Aadhaar number and a live fingerprint scan. The agent's biometric device captures a PID XML blob which is passed verbatim to this API. The customer's Aadhaar is RSA-encrypted before transmission. Requires the agent to have completed AePS Fingpay activation, the one-time eKYC (Send OTP → Verify OTP → Biometric), and the Daily KYC for the current day.\n\n**Above ₹5,000 a transaction OTP is required.** First call Cash Withdrawal OTP, then send its `fp_transaction_id` here as `txn_otp_request_id`, and put the customer's 6-digit SMS OTP in the `otp` attribute of the PidOptions used for the fingerprint capture. For ₹5,000 or less, no OTP step is needed.\n\nTo capture the `piddata` PID block with an RDService-compliant fingerprint scanner, see the [Aadhaar Biometric Authentication guide](/docs/aadhaar-biometric-rdservice).",
3730
3920
  "bestFor": "BC agents, CSPs, and kirana-store banking points enabling cardless cash withdrawal for rural customers",
3731
3921
  "docsUrl": "https://eps.eko.in/docs/aeps-fingpay-cash-withdrawal",
3732
3922
  "financial": true,
@@ -3825,7 +4015,7 @@
3825
4015
  "name": "piddata",
3826
4016
  "type": "string",
3827
4017
  "required": true,
3828
- "description": "PID data captured from the UIDAI-certified biometric device, as a raw XML string. Must use Data type='X' (XML, not Protobuf). DeviceInfo must include the 'mc' (device certificate) parameter. fType must be 2.",
4018
+ "description": "PID data captured from the UIDAI-certified biometric device, as a raw XML string. Must use Data type='X' (XML, not Protobuf). DeviceInfo must include the 'mc' (device certificate) parameter. fType must be 2. For an `amount` above ₹5,000, set the `otp` attribute of the PidOptions `<Opts>` element to the customer's 6-digit SMS OTP before capture — the OTP itself, not the `fp_transaction_id`.",
3829
4019
  "example": "<?xml version='1.0'?><PidData><Data type='X'>...</Data><DeviceInfo mc='...' /></PidData>",
3830
4020
  "in": "body"
3831
4021
  },
@@ -3833,9 +4023,16 @@
3833
4023
  "name": "amount",
3834
4024
  "type": "number",
3835
4025
  "required": true,
3836
- "description": "Withdrawal amount in Indian Rupees (integer). Must be greater than 0 for cash withdrawal.",
4026
+ "description": "Withdrawal amount in Indian Rupees (integer). Must be greater than 0 for cash withdrawal. Above ₹5,000, call Cash Withdrawal OTP first and send `txn_otp_request_id`.",
3837
4027
  "example": 1000,
3838
4028
  "in": "body"
4029
+ },
4030
+ {
4031
+ "name": "txn_otp_request_id",
4032
+ "type": "string",
4033
+ "required": false,
4034
+ "description": "Required when `amount` is above ₹5,000: the `fp_transaction_id` returned by Cash Withdrawal OTP for this attempt (e.g. `FP2609010001234567`). Omit for ₹5,000 or less.",
4035
+ "in": "body"
3839
4036
  }
3840
4037
  ],
3841
4038
  "sampleRequest": {
@@ -4050,6 +4247,12 @@
4050
4247
  "type": "string",
4051
4248
  "description": "Human-readable transaction remark from the provider (e.g. 'Request Completed').",
4052
4249
  "example": "Request Completed"
4250
+ },
4251
+ {
4252
+ "name": "fp_transaction_id",
4253
+ "type": "string",
4254
+ "description": "Returned only with `response_type_id` 1459 (OTP required — nothing was withdrawn): the OTP reference to send back as `txn_otp_request_id`.",
4255
+ "example": "FP2609010001234567"
4053
4256
  }
4054
4257
  ]
4055
4258
  }
@@ -4142,6 +4345,19 @@
4142
4345
  "status": 1464
4143
4346
  }
4144
4347
  },
4348
+ {
4349
+ "scenario": "OTP required — `amount` above ₹5,000 sent without `txn_otp_request_id`. NOTHING was withdrawn: an OTP was sent to the customer instead",
4350
+ "statusCode": 200,
4351
+ "example": {
4352
+ "response_status_id": 0,
4353
+ "data": {
4354
+ "fp_transaction_id": "FP2609010001234567"
4355
+ },
4356
+ "response_type_id": 1459,
4357
+ "message": "OTP generated successfully. Use the reference ID for your transaction.",
4358
+ "status": 0
4359
+ }
4360
+ },
4145
4361
  {
4146
4362
  "scenario": "Transaction Pending — awaiting bank confirmation",
4147
4363
  "statusCode": 200,
@@ -4184,12 +4400,16 @@
4184
4400
  },
4185
4401
  {
4186
4402
  "id": 1464,
4187
- "meaning": "Transaction Fail"
4403
+ "meaning": "Transaction Fail — above ₹5,000 this also covers an expired, invalid or already-used OTP (there is no separate code). Once the failure is final, generate a fresh OTP and re-capture before retrying"
4188
4404
  },
4189
4405
  {
4190
4406
  "id": 1465,
4191
4407
  "meaning": "Transaction Pending — check final status later",
4192
4408
  "next": "transaction-inquiry"
4409
+ },
4410
+ {
4411
+ "id": 1459,
4412
+ "meaning": "OTP required — `amount` is above ₹5,000 but no `txn_otp_request_id` was sent. Nothing was withdrawn; an OTP was sent to the customer. Retry with `data.fp_transaction_id` as `txn_otp_request_id` and the customer's SMS OTP in the PidOptions `otp` attribute — do not generate another OTP"
4193
4413
  }
4194
4414
  ]
4195
4415
  },
@@ -23626,7 +23846,7 @@
23626
23846
  "id": "aeps-fingpay-cash-withdrawal",
23627
23847
  "slug": "aeps-fingpay-cash-withdrawal",
23628
23848
  "name": "AePS (Fingpay) — Cash Withdrawal",
23629
- "summary": "Aadhaar-enabled cash withdrawal: one-time agent activation and eKYC, daily KYC, then the biometric withdrawal.",
23849
+ "summary": "Aadhaar-enabled cash withdrawal: one-time agent activation and eKYC, daily KYC, a transaction OTP for amounts above ₹5,000, then the biometric withdrawal.",
23630
23850
  "productId": "aeps",
23631
23851
  "steps": [
23632
23852
  {
@@ -23654,9 +23874,14 @@
23654
23874
  "purpose": "Daily KYC — biometric-only, repeated once per calendar day before the agent's first transaction.",
23655
23875
  "frequency": "daily"
23656
23876
  },
23877
+ {
23878
+ "specSlug": "aeps-fingpay-cash-withdrawal-otp",
23879
+ "appliesWhen": "amount > ₹5,000",
23880
+ "purpose": "Generate the transaction OTP: the customer receives a 6-digit OTP by SMS on their Aadhaar-linked mobile, and the response returns `fp_transaction_id`. Generate a fresh one for every withdrawal attempt — it is never reusable."
23881
+ },
23657
23882
  {
23658
23883
  "specSlug": "aeps-fingpay-cash-withdrawal",
23659
- "purpose": "Perform the biometric Aadhaar-enabled cash withdrawal.",
23884
+ "purpose": "Perform the biometric Aadhaar-enabled cash withdrawal. Above ₹5,000, send the `fp_transaction_id` as `txn_otp_request_id` AND put the customer's SMS OTP in the PidOptions `otp` attribute before the fingerprint capture — two different values, both required. A `response_type_id` of 1459 means the OTP step was skipped and nothing was withdrawn. Persist `tid`; on Pending (1465) reconcile via Transaction Inquiry before any retry.",
23660
23885
  "branches": [
23661
23886
  {
23662
23887
  "onStatus": 0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ekoindia/eps-transact-mcp",
3
- "version": "0.1.23",
3
+ "version": "0.1.24",
4
4
  "description": "Transactional MCP server for Eko Platform Services (EPS) verification APIs — remote (streamable HTTP) and local (stdio).",
5
5
  "license": "MIT",
6
6
  "type": "module",