Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
366 lines
15 KiB
JSON
366 lines
15 KiB
JSON
{
|
|
"info": {
|
|
"name": "CBS — CIN & DIN Verification (LincPay eKYC)",
|
|
"description": "Postman collection for CIN (Company Identification Number) and DIN (Director Identification Number) verification via the CBS Fineract KYC module.\n\nFlow:\n1. Create/update a KYC record with cinNumber and/or dinNumber\n2. Trigger verify-cin or verify-din command\n3. The backend calls LincPay eKYC API (validate-company / validate-director)\n4. On success, cinVerified/dinVerified flags are set on the KYC record",
|
|
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
|
|
},
|
|
"variable": [
|
|
{
|
|
"key": "base_url",
|
|
"value": "https://localhost:8443/fineract-provider/api/v1",
|
|
"description": "Fineract API base URL"
|
|
},
|
|
{
|
|
"key": "tenant_id",
|
|
"value": "default",
|
|
"description": "Tenant identifier"
|
|
},
|
|
{
|
|
"key": "username",
|
|
"value": "mifos",
|
|
"description": "API username"
|
|
},
|
|
{
|
|
"key": "password",
|
|
"value": "password",
|
|
"description": "API password"
|
|
},
|
|
{
|
|
"key": "client_id",
|
|
"value": "1",
|
|
"description": "Client ID for KYC operations"
|
|
},
|
|
{
|
|
"key": "kyc_id",
|
|
"value": "1",
|
|
"description": "KYC record ID"
|
|
},
|
|
{
|
|
"key": "cin_number",
|
|
"value": "U12345MH2020PTC123456",
|
|
"description": "21-character CIN for company verification"
|
|
},
|
|
{
|
|
"key": "din_number",
|
|
"value": "12345678",
|
|
"description": "8-digit DIN for director verification"
|
|
}
|
|
],
|
|
"auth": {
|
|
"type": "basic",
|
|
"basic": [
|
|
{ "key": "username", "value": "{{username}}", "type": "string" },
|
|
{ "key": "password", "value": "{{password}}", "type": "string" }
|
|
]
|
|
},
|
|
"item": [
|
|
{
|
|
"name": "1. Initiate KYC with CIN & DIN",
|
|
"item": [
|
|
{
|
|
"name": "Initiate KYC (Non-Individual with CIN & DIN)",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"pm.test('Status code is 200', function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"pm.test('KYC record created', function () {",
|
|
" var json = pm.response.json();",
|
|
" pm.expect(json).to.have.property('resourceId');",
|
|
" pm.collectionVariables.set('kyc_id', json.resourceId);",
|
|
"});"
|
|
],
|
|
"type": "text/javascript"
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{ "key": "Content-Type", "value": "application/json" },
|
|
{ "key": "Fineract-Platform-TenantId", "value": "{{tenant_id}}" }
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"kycType\": 2,\n \"riskCategory\": 2,\n \"panNumber\": \"ABCDE1234F\",\n \"gstinNumber\": \"27ABCDE1234F1Z5\",\n \"cinNumber\": \"{{cin_number}}\",\n \"dinNumber\": \"{{din_number}}\",\n \"remarks\": \"Non-individual KYC with CIN and DIN\"\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{base_url}}/clients/{{client_id}}/kyc",
|
|
"host": ["{{base_url}}"],
|
|
"path": ["clients", "{{client_id}}", "kyc"]
|
|
},
|
|
"description": "Initiate a KYC record for a non-individual client with CIN and DIN numbers.\n\n- kycType: 2 = NON_INDIVIDUAL\n- riskCategory: 1=LOW, 2=MEDIUM, 3=HIGH\n- cinNumber: 21-character Corporate Identification Number\n- dinNumber: 8-digit Director Identification Number"
|
|
},
|
|
"response": []
|
|
},
|
|
{
|
|
"name": "Update KYC — Add CIN & DIN",
|
|
"request": {
|
|
"method": "PUT",
|
|
"header": [
|
|
{ "key": "Content-Type", "value": "application/json" },
|
|
{ "key": "Fineract-Platform-TenantId", "value": "{{tenant_id}}" }
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"cinNumber\": \"{{cin_number}}\",\n \"dinNumber\": \"{{din_number}}\"\n}"
|
|
},
|
|
"url": {
|
|
"raw": "{{base_url}}/clients/{{client_id}}/kyc/{{kyc_id}}",
|
|
"host": ["{{base_url}}"],
|
|
"path": ["clients", "{{client_id}}", "kyc", "{{kyc_id}}"]
|
|
},
|
|
"description": "Update an existing KYC record to add CIN and/or DIN numbers before triggering verification."
|
|
},
|
|
"response": []
|
|
}
|
|
],
|
|
"description": "Create or update a KYC record with CIN and DIN numbers before triggering verification."
|
|
},
|
|
{
|
|
"name": "2. CIN Verification (Company)",
|
|
"item": [
|
|
{
|
|
"name": "Verify CIN — Trigger LincPay validate-company",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"pm.test('Status code is 200', function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"pm.test('CIN verified successfully', function () {",
|
|
" var json = pm.response.json();",
|
|
" pm.expect(json.changes).to.have.property('cinVerified');",
|
|
" pm.expect(json.changes.cinVerified).to.be.true;",
|
|
"});",
|
|
"",
|
|
"pm.test('cinVerifiedOn date is set', function () {",
|
|
" var json = pm.response.json();",
|
|
" pm.expect(json.changes).to.have.property('cinVerifiedOn');",
|
|
"});"
|
|
],
|
|
"type": "text/javascript"
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{ "key": "Content-Type", "value": "application/json" },
|
|
{ "key": "Fineract-Platform-TenantId", "value": "{{tenant_id}}" }
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{}"
|
|
},
|
|
"url": {
|
|
"raw": "{{base_url}}/clients/{{client_id}}/kyc/{{kyc_id}}?command=verify-cin",
|
|
"host": ["{{base_url}}"],
|
|
"path": ["clients", "{{client_id}}", "kyc", "{{kyc_id}}"],
|
|
"query": [
|
|
{ "key": "command", "value": "verify-cin" }
|
|
]
|
|
},
|
|
"description": "Trigger CIN verification via LincPay MCA API.\n\n**Backend flow:**\n1. Reads cinNumber from the KYC record\n2. Calls LincPay: POST https://ekyc.lincpay.in/EKYC/ekyc/validate-company\n Body: { \"apiKey\": \"...\", \"cin\": \"U12345MH2020PTC123456\", \"secretKey\": \"...\" }\n3. On success: marks cinVerified=true, cinVerifiedOn=today\n4. On failure: returns error with vendor message\n\n**Prerequisites:**\n- KYC record must exist with a cinNumber set\n- KYC must not be in REJECTED status"
|
|
},
|
|
"response": [
|
|
{
|
|
"name": "200 — CIN Verified Successfully",
|
|
"originalRequest": {
|
|
"method": "POST",
|
|
"header": [],
|
|
"body": { "mode": "raw", "raw": "{}" },
|
|
"url": { "raw": "{{base_url}}/clients/1/kyc/1?command=verify-cin" }
|
|
},
|
|
"status": "OK",
|
|
"code": 200,
|
|
"_postman_previewlanguage": "json",
|
|
"body": "{\n \"officeId\": 1,\n \"clientId\": 1,\n \"resourceId\": 1,\n \"changes\": {\n \"cinVerified\": true,\n \"cinVerifiedOn\": [2026, 4, 3],\n \"kycStatus\": 200\n }\n}"
|
|
},
|
|
{
|
|
"name": "400 — CIN Not Set",
|
|
"status": "Bad Request",
|
|
"code": 400,
|
|
"_postman_previewlanguage": "json",
|
|
"body": "{\n \"developerMessage\": \"CIN number is not set on this KYC record. Update the KYC record first.\",\n \"httpStatusCode\": \"503\",\n \"defaultUserMessage\": \"CIN number is not set on this KYC record. Update the KYC record first.\",\n \"userMessageGlobalisationCode\": \"error.msg.client.kyc.cin.not.found\"\n}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Direct LincPay CIN API (for testing)",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{ "key": "Content-Type", "value": "application/json" },
|
|
{ "key": "accept", "value": "*/*" }
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"apiKey\": \"YOUR_API_KEY\",\n \"cin\": \"{{cin_number}}\",\n \"secretKey\": \"YOUR_SECRET_KEY\"\n}"
|
|
},
|
|
"url": {
|
|
"raw": "https://ekyc.lincpay.in/EKYC/ekyc/validate-company",
|
|
"protocol": "https",
|
|
"host": ["ekyc", "lincpay", "in"],
|
|
"path": ["EKYC", "ekyc", "validate-company"]
|
|
},
|
|
"description": "Direct call to LincPay validate-company API for testing.\nReplace apiKey and secretKey with actual credentials."
|
|
},
|
|
"response": []
|
|
}
|
|
],
|
|
"description": "CIN (Corporate Identification Number) verification flow. CIN is a 21-character alphanumeric code allotted by MCA to companies registered under the Companies Act."
|
|
},
|
|
{
|
|
"name": "3. DIN Verification (Director)",
|
|
"item": [
|
|
{
|
|
"name": "Verify DIN — Trigger LincPay validate-director",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"pm.test('Status code is 200', function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"pm.test('DIN verified successfully', function () {",
|
|
" var json = pm.response.json();",
|
|
" pm.expect(json.changes).to.have.property('dinVerified');",
|
|
" pm.expect(json.changes.dinVerified).to.be.true;",
|
|
"});",
|
|
"",
|
|
"pm.test('dinVerifiedOn date is set', function () {",
|
|
" var json = pm.response.json();",
|
|
" pm.expect(json.changes).to.have.property('dinVerifiedOn');",
|
|
"});"
|
|
],
|
|
"type": "text/javascript"
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{ "key": "Content-Type", "value": "application/json" },
|
|
{ "key": "Fineract-Platform-TenantId", "value": "{{tenant_id}}" }
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{}"
|
|
},
|
|
"url": {
|
|
"raw": "{{base_url}}/clients/{{client_id}}/kyc/{{kyc_id}}?command=verify-din",
|
|
"host": ["{{base_url}}"],
|
|
"path": ["clients", "{{client_id}}", "kyc", "{{kyc_id}}"],
|
|
"query": [
|
|
{ "key": "command", "value": "verify-din" }
|
|
]
|
|
},
|
|
"description": "Trigger DIN verification via LincPay MCA API.\n\n**Backend flow:**\n1. Reads dinNumber from the KYC record\n2. Calls LincPay: POST https://ekyc.lincpay.in/EKYC/ekyc/validate-director\n Body: { \"apiKey\": \"...\", \"din\": \"12345678\", \"secretKey\": \"...\" }\n3. On success: marks dinVerified=true, dinVerifiedOn=today\n4. On failure: returns error with vendor message\n\n**Prerequisites:**\n- KYC record must exist with a dinNumber set\n- KYC must not be in REJECTED status"
|
|
},
|
|
"response": [
|
|
{
|
|
"name": "200 — DIN Verified Successfully",
|
|
"originalRequest": {
|
|
"method": "POST",
|
|
"header": [],
|
|
"body": { "mode": "raw", "raw": "{}" },
|
|
"url": { "raw": "{{base_url}}/clients/1/kyc/1?command=verify-din" }
|
|
},
|
|
"status": "OK",
|
|
"code": 200,
|
|
"_postman_previewlanguage": "json",
|
|
"body": "{\n \"officeId\": 1,\n \"clientId\": 1,\n \"resourceId\": 1,\n \"changes\": {\n \"dinVerified\": true,\n \"dinVerifiedOn\": [2026, 4, 3],\n \"kycStatus\": 200\n }\n}"
|
|
},
|
|
{
|
|
"name": "400 — DIN Not Set",
|
|
"status": "Bad Request",
|
|
"code": 400,
|
|
"_postman_previewlanguage": "json",
|
|
"body": "{\n \"developerMessage\": \"DIN number is not set on this KYC record. Update the KYC record first.\",\n \"httpStatusCode\": \"503\",\n \"defaultUserMessage\": \"DIN number is not set on this KYC record. Update the KYC record first.\",\n \"userMessageGlobalisationCode\": \"error.msg.client.kyc.din.not.found\"\n}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Direct LincPay DIN API (for testing)",
|
|
"request": {
|
|
"method": "POST",
|
|
"header": [
|
|
{ "key": "Content-Type", "value": "application/json" },
|
|
{ "key": "accept", "value": "*/*" }
|
|
],
|
|
"body": {
|
|
"mode": "raw",
|
|
"raw": "{\n \"apiKey\": \"YOUR_API_KEY\",\n \"din\": \"{{din_number}}\",\n \"secretKey\": \"YOUR_SECRET_KEY\"\n}"
|
|
},
|
|
"url": {
|
|
"raw": "https://ekyc.lincpay.in/EKYC/ekyc/validate-director",
|
|
"protocol": "https",
|
|
"host": ["ekyc", "lincpay", "in"],
|
|
"path": ["EKYC", "ekyc", "validate-director"]
|
|
},
|
|
"description": "Direct call to LincPay validate-director API for testing.\nReplace apiKey and secretKey with actual credentials."
|
|
},
|
|
"response": []
|
|
}
|
|
],
|
|
"description": "DIN (Director Identification Number) verification flow. DIN is an 8-digit unique number allotted by MCA to company directors."
|
|
},
|
|
{
|
|
"name": "4. Get KYC Record",
|
|
"item": [
|
|
{
|
|
"name": "Get KYC Record (check CIN/DIN verification status)",
|
|
"event": [
|
|
{
|
|
"listen": "test",
|
|
"script": {
|
|
"exec": [
|
|
"pm.test('Status code is 200', function () {",
|
|
" pm.response.to.have.status(200);",
|
|
"});",
|
|
"",
|
|
"pm.test('CIN fields present', function () {",
|
|
" var json = pm.response.json();",
|
|
" pm.expect(json).to.have.property('cinNumber');",
|
|
" pm.expect(json).to.have.property('cinVerified');",
|
|
"});",
|
|
"",
|
|
"pm.test('DIN fields present', function () {",
|
|
" var json = pm.response.json();",
|
|
" pm.expect(json).to.have.property('dinNumber');",
|
|
" pm.expect(json).to.have.property('dinVerified');",
|
|
"});"
|
|
],
|
|
"type": "text/javascript"
|
|
}
|
|
}
|
|
],
|
|
"request": {
|
|
"method": "GET",
|
|
"header": [
|
|
{ "key": "Fineract-Platform-TenantId", "value": "{{tenant_id}}" }
|
|
],
|
|
"url": {
|
|
"raw": "{{base_url}}/clients/{{client_id}}/kyc/{{kyc_id}}",
|
|
"host": ["{{base_url}}"],
|
|
"path": ["clients", "{{client_id}}", "kyc", "{{kyc_id}}"]
|
|
},
|
|
"description": "Retrieve the KYC record to verify CIN/DIN verification status after running the verify commands."
|
|
},
|
|
"response": []
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|