Integrate institutional ALM intelligence into your CPA workflow, fintech application, or regulatory reporting pipeline. Run balance sheet analyses, retrieve COSSEC compliance ratios, and benchmark against the PR cooperativa sector.
Sign in to the CERNIQ Dashboard and navigate to Settings → API Keys to generate your key. Keys start with ck_live_.
curl -X POST https://api.cerniq.io/api/v1/analyze \
-H "Authorization: Bearer ck_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"institutionName": "Cooperativa Oriental",
"institutionType": "cooperativa",
"framework": "cossec",
"period": "Q1-2026",
"rows": [
{
"category": "asset",
"subcategory": "commercial_loans",
"name": "CRE - Retail Center",
"balance": 10.0,
"rate": 6.50,
"duration": 5.0,
"rateType": "fixed"
},
{
"category": "asset",
"subcategory": "investment_securities",
"name": "US Treasury Notes",
"balance": 16.0,
"rate": 4.25,
"duration": 2.0,
"rateType": "fixed"
},
{
"category": "liability",
"subcategory": "savings_deposits",
"name": "Regular Savings",
"balance": 12.0,
"rate": 1.50,
"duration": 0.25,
"rateType": "variable"
},
{
"category": "liability",
"subcategory": "time_deposits",
"name": "12-Month CDs",
"balance": 8.0,
"rate": 3.00,
"duration": 1.0,
"rateType": "fixed"
}
]
}'/api/v1/analyzeAPI KeySubmit balance sheet rows as JSON. Returns 12 COSSEC ratios, duration gap, NII sensitivity, LCR, exam readiness score, and sector benchmarks.
/api/v1/analyze/csvAPI KeyUpload a CSV file with balance sheet data. Supports bilingual column names (English/Spanish). Same analysis output as the JSON endpoint.
/api/v1/analyses/:analysisIdAPI KeyFetch a previously computed analysis by its ID. Only returns analyses created by the API key owner.
/api/v1/benchmarksReturns PR cooperativa sector benchmarks (COSSEC Q3 2025). Includes median, 25th, and 75th percentile for 10 financial ratios.
/api/v1/frameworksReturns the list of regulatory frameworks (COSSEC, NCUA) supported by the analysis engine.
/api/v1/healthReturns API status, version, and timestamp. No authentication required.
import requests
API_KEY = "ck_live_YOUR_API_KEY"
BASE_URL = "https://api.cerniq.io/api/v1"
# Run analysis
response = requests.post(
f"{BASE_URL}/analyze",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"institutionName": "Cooperativa Oriental",
"institutionType": "cooperativa",
"framework": "cossec",
"period": "Q1-2026",
"rows": [
{
"category": "asset",
"subcategory": "commercial_loans",
"name": "CRE Portfolio",
"balance": 45.0,
"rate": 6.50,
"duration": 4.5,
"rateType": "fixed"
},
# ... more rows
]
}
)
result = response.json()
analysis = result["data"]
print(f"Exam Readiness: {analysis['examReadinessScore']}/100")
print(f"Overall Status: {analysis['overallStatus']}")
for ratio in analysis["ratios"]:
print(f" {ratio['name']}: {ratio['value']}{ratio['unit']} [{ratio['status']}]")
# Retrieve later
analysis_id = analysis["analysisId"]
stored = requests.get(
f"{BASE_URL}/analyses/{analysis_id}",
headers={"Authorization": f"Bearer {API_KEY}"}
).json()const API_KEY = "ck_live_YOUR_API_KEY";
const BASE_URL = "https://api.cerniq.io/api/v1";
// Run analysis
const response = await fetch(`${BASE_URL}/analyze`, {
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
institutionName: "Cooperativa Oriental",
institutionType: "cooperativa",
framework: "cossec",
period: "Q1-2026",
rows: [
{
category: "asset",
subcategory: "commercial_loans",
name: "CRE Portfolio",
balance: 45.0,
rate: 6.50,
duration: 4.5,
rateType: "fixed",
},
// ... more rows
],
}),
});
const { data } = await response.json();
console.log(`Exam Readiness: ${data.examReadinessScore}/100`);
console.log(`Duration Gap: ${data.durationGap.durationGap} years`);
console.log(`LCR: ${data.lcr.lcr}% (${data.lcr.status})`);
// CSV upload
const formData = new FormData();
formData.append("file", csvFile);
formData.append("institutionName", "Cooperativa Oriental");
formData.append("institutionType", "cooperativa");
formData.append("framework", "cossec");
formData.append("period", "Q1-2026");
const csvResponse = await fetch(`${BASE_URL}/analyze/csv`, {
method: "POST",
headers: { "Authorization": `Bearer ${API_KEY}` },
body: formData,
});| Tier | Limit |
|---|---|
| Standard | 100 requests/hour |
| Partner | 1,000 requests/hour |
Rate limit headers are included in every response:X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset
{
"success": true,
"data": {
"analysisId": "clxyz...",
"examReadinessScore": 75,
"overallStatus": "conditional",
"ratios": [...],
"durationGap": {...},
"recommendations": [...]
}
}When using the /api/v1/analyze/csv endpoint, your CSV must include these columns:
category,subcategory,name,balance,rate,duration,rateType,repriceDate,maturityDate
asset,commercial_loans,CRE - Retail Center,10.0,6.50,5.0,fixed,,2031-03-01
asset,investment_securities,US Treasury Notes,16.0,4.25,2.0,fixed,,2028-03-01
liability,savings_deposits,Regular Savings,24.0,1.50,0.25,variable,2026-06-01,
liability,time_deposits,12-Month CDs,15.0,3.00,1.0,fixed,,2027-03-01balance: In millions USD
rate: As percentage (5.25 = 5.25%)
duration: Macaulay duration in years
Spanish columns accepted: categoria, subcategoria, nombre, saldo, tasa, duracion, tipoTasa