Prerequisites
- Node.js 18+
- Get an API key
- Have a CAS PDF ready (or use sandbox key)
1. Using fetch (Node.js 18+)
Copy
import fs from 'fs';
const formData = new FormData();
formData.append('file', new Blob([fs.readFileSync('cas.pdf')]));
formData.append('password', 'YOUR_PAN_NUMBER');
const response = await fetch('https://api.casparser.in/v4/smart/parse', {
method: 'POST',
headers: { 'x-api-key': 'YOUR_API_KEY' },
body: formData
});
const data = await response.json();
console.log(`Investor: ${data.investor.name}`);
console.log(`Total Value: ₹${data.summary.total_value.toLocaleString()}`);
2. Using axios
Copy
npm install axios form-data
Copy
import axios from 'axios';
import FormData from 'form-data';
import fs from 'fs';
const form = new FormData();
form.append('file', fs.createReadStream('cas.pdf'));
form.append('password', 'YOUR_PAN_NUMBER');
const response = await axios.post(
'https://api.casparser.in/v4/smart/parse',
form,
{
headers: {
'x-api-key': 'YOUR_API_KEY',
...form.getHeaders()
},
timeout: 60000
}
);
console.log(response.data);
TypeScript types
Copy
interface CASResponse {
meta: {
cas_type: 'CDSL' | 'NSDL' | 'CAMS_KFINTECH';
statement_period: {
from: string; // YYYY-MM-DD
to: string; // YYYY-MM-DD
};
generated_at: string; // ISO 8601
};
investor: {
name: string;
pan: string;
email?: string;
mobile?: string;
address?: string;
pincode?: string;
cas_id?: string;
};
summary: {
total_value: number;
accounts: {
demat: { count: number; total_value: number };
mutual_funds: { count: number; total_value: number };
insurance: { count: number; total_value: number };
nps: { count: number; total_value: number };
};
};
demat_accounts: DematAccount[];
mutual_funds: MutualFundFolio[];
insurance: {
life_insurance_policies: LifeInsurancePolicy[];
};
nps: NPSAccount[];
}
interface DematAccount {
demat_type: 'CDSL' | 'NSDL';
dp_id: string;
dp_name: string;
client_id: string;
bo_id?: string;
value: number;
linked_holders: Array<{ name: string; pan: string }>;
holdings: {
equities: Equity[];
corporate_bonds: CorporateBond[];
government_securities: GovernmentSecurity[];
aifs: AIF[];
demat_mutual_funds: DematMutualFund[];
};
additional_info: object;
}
interface Equity {
isin: string;
name: string;
units: number;
value: number;
}
Full example with error handling
Copy
import axios from 'axios';
import FormData from 'form-data';
import fs from 'fs';
const API_KEY = process.env.CASPARSER_API_KEY;
const API_URL = 'https://api.casparser.in/v4/smart/parse';
async function parseCAS(pdfPath: string, password: string): Promise<CASResponse> {
const form = new FormData();
form.append('file', fs.createReadStream(pdfPath));
form.append('password', password);
const response = await axios.post<CASResponse>(API_URL, form, {
headers: {
'x-api-key': API_KEY,
...form.getHeaders()
},
timeout: 60000
});
if (response.data.status === 'failed') {
throw new Error(`Parsing failed: ${response.data.msg}`);
}
return response.data;
}
// Usage
const data = await parseCAS('cas.pdf', 'ABCDE1234F');
console.log(`Investor: ${data.investor.name}`);
console.log(`Total Value: ₹${data.summary.total_value.toLocaleString()}`);

