Node.js Examples
Node.js Examples
Section titled “Node.js Examples”These examples use the built-in fetch API (Node.js 18+) and fs module — no extra dependencies required.
Replace YOUR_PRODUCT_SLUG and YOUR_API_KEY with the values from your administrator.
const BASE_URL = process.env.ILLUSTRATA_BASE_URL // e.g., 'https://api.illustrata.io'const PRODUCT_SLUG = process.env.ILLUSTRATA_PRODUCT // e.g., 'my-annuity'const API_KEY = process.env.ILLUSTRATA_API_KEY // e.g., 'ila_...'JSON Request
Section titled “JSON Request”async function getIllustrationData(inputs) { const response = await fetch(`${BASE_URL}/api/${PRODUCT_SLUG}`, { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ inputs }), })
if (!response.ok) { const error = await response.json() throw new Error(`API error ${response.status}: ${error.error}`) }
const data = await response.json() return data.response_data.outputs}
// Usageconst outputs = await getIllustrationData({ field1: 'value1', field2: 100000,})console.log(outputs)PDF Download
Section titled “PDF Download”import { writeFileSync } from 'fs'
async function downloadIllustrationPDF(inputs, outputPath = 'illustration.pdf') { const response = await fetch(`${BASE_URL}/api/${PRODUCT_SLUG}?format=pdf`, { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ inputs }), })
if (!response.ok) { const error = await response.json() throw new Error(`API error ${response.status}: ${error.error}`) }
const buffer = await response.arrayBuffer() writeFileSync(outputPath, Buffer.from(buffer)) console.log(`PDF saved to ${outputPath}`)}
// Usageawait downloadIllustrationPDF({ field1: 'value1', field2: 100000 })JSON + PDF Together
Section titled “JSON + PDF Together”import { writeFileSync } from 'fs'
async function getIllustrationWithPDF(inputs) { const response = await fetch(`${BASE_URL}/api/${PRODUCT_SLUG}?format=both`, { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ inputs }), })
if (!response.ok) { const error = await response.json() throw new Error(`API error ${response.status}: ${error.error}`) }
const data = await response.json()
// Save PDF from base64 if (data.pdf) { const pdfBuffer = Buffer.from(data.pdf.data, 'base64') writeFileSync(data.pdf.fileName, pdfBuffer) console.log(`PDF saved: ${data.pdf.fileName} (${data.pdf.pageCount} pages)`) }
return data.response_data.outputs}Checking Rate Limit Headers
Section titled “Checking Rate Limit Headers”async function callWithRateLimitCheck(inputs) { const response = await fetch(`${BASE_URL}/api/${PRODUCT_SLUG}`, { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ inputs }), })
const remaining = response.headers.get('X-RateLimit-Remaining') const dailyRemaining = response.headers.get('X-RateLimit-Daily-Remaining') console.log(`Requests remaining: ${remaining}/min, ${dailyRemaining}/day`)
if (response.status === 429) { const retryAfter = response.headers.get('Retry-After') console.log(`Rate limited. Retry after ${retryAfter} seconds.`) return null }
return response.json()}Health Check
Section titled “Health Check”async function checkHealth() { const response = await fetch(`${BASE_URL}/health`) const data = await response.json() return data.status === 'ok'}