Files
cbsnexora-backend/CBS_CIN_DIN_Verification.postman_collection.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": []
}
]
}
]
}