{ "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": [] } ] } ] }