Quickstart
Node.js Quickstart
Upload and parse an eCAS PDF with Node.js using fetch or axios.
Parse your first eCAS file with Node.js using fetch or axios.
Prerequisites
- Node.js 18+
- An access token from auth login
- An eCAS PDF and its password
1. Using fetch (Node.js 18+)
import fs from "fs";
const formData = new FormData();
formData.append("pdf", new Blob([fs.readFileSync("ecas.pdf")]));
formData.append("password", "YOUR_PAN_OR_PDF_PASSWORD");
const response = await fetch("https://kniwealthtech.ai/api/v1/ecas/upload/", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ACCESS_TOKEN}`,
},
body: formData,
});
const data = await response.json();
console.log(`Investor: ${data.investor_name}`);
console.log(`Total Value: ${data.total_portfolio_value}`);2. Using axios
npm install axios form-dataimport axios from "axios";
import FormData from "form-data";
import fs from "fs";
const form = new FormData();
form.append("pdf", fs.createReadStream("ecas.pdf"));
form.append("password", "YOUR_PAN_OR_PDF_PASSWORD");
const response = await axios.post(
"https://kniwealthtech.ai/api/v1/ecas/upload/",
form,
{
headers: {
Authorization: `Bearer ${process.env.ACCESS_TOKEN}`,
...form.getHeaders(),
},
timeout: 60000,
},
);
console.log(response.data);TypeScript types
interface HoldingRecord {
id: number;
depository: string;
dp_name: string;
dp_id: string;
client_id: string;
bo_id: string;
isin: string;
security_name: string;
symbol: string;
asset_type: string;
quantity: number;
pledged_quantity: number;
free_quantity: number;
face_value: number;
market_price: number;
value: number;
}
interface MFHoldingRecord {
id: number;
isin: string;
scheme_name: string;
amc_name: string;
folio_no: string;
units: number;
nav: number;
value: number;
invested: number;
}
interface ExtractionSession {
id: number;
source: string;
investor_name: string;
pan: string;
period_from: string;
period_to: string;
total_portfolio_value: number;
created_at: string;
updated_at: string;
holdings: HoldingRecord[];
mf_holdings: MFHoldingRecord[];
}Full example with error handling
import axios from "axios";
import FormData from "form-data";
import fs from "fs";
const ACCESS_TOKEN = process.env.ACCESS_TOKEN;
const API_URL = "https://kniwealthtech.ai/api/v1/ecas/upload/";
async function uploadEcas(pdfPath: string, password: string) {
const form = new FormData();
form.append("pdf", fs.createReadStream(pdfPath));
form.append("password", password);
const response = await axios.post(API_URL, form, {
headers: {
Authorization: `Bearer ${ACCESS_TOKEN}`,
...form.getHeaders(),
},
timeout: 60000,
validateStatus: () => true,
});
if (response.status !== 201) {
throw new Error(
`Upload failed (${response.status}): ${JSON.stringify(response.data)}`,
);
}
return response.data as ExtractionSession;
}
const data = await uploadEcas("ecas.pdf", "ABCDE1234F");
console.log(`Investor: ${data.investor_name}`);
console.log(`Holdings: ${data.holdings.length}`);Next steps
- Upload eCAS PDF — full request/response schema
- Add more language guides under
content/documentation/quickstart/and register them incontent/meta.ts