Skip to main content

Using Fetch (Node.js 18+)

const FILELOOM_API_KEY = process.env.FILELOOM_API_KEY;

async function generatePdf(html, options = {}) {
  const response = await fetch('https://api.fileloom.io/v1/pdf/generate', {
    method: 'POST',
    headers: {
      'X-API-Key': FILELOOM_API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ htmlContent: html, ...options })
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(error.error?.message || 'PDF generation failed');
  }

  return response.json();
}

// Usage
const result = await generatePdf('<h1>Hello World</h1>');
console.log('PDF URL:', result.data.url);

With Template

async function generateFromTemplate(templateId, data, filename) {
  const response = await fetch('https://api.fileloom.io/v1/pdf/generate', {
    method: 'POST',
    headers: {
      'X-API-Key': process.env.FILELOOM_API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ templateId, templateData: data, filename })
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(error.error?.message || 'Failed');
  }

  return response.json();
}

const invoice = await generateFromTemplate('tpl_invoice_v2', {
  invoiceNumber: 'INV-2024-001',
  customer: { name: 'Acme Corp' },
  items: [{ description: 'Web Dev', quantity: 10, price: 150 }],
  total: 1500
}, 'invoice.pdf');

Download to File

import { writeFile } from 'fs/promises';

async function generateAndDownload(html, outputPath) {
  const result = await generatePdf(html);
  const pdfResponse = await fetch(result.data.url);
  const buffer = await pdfResponse.arrayBuffer();
  await writeFile(outputPath, Buffer.from(buffer));
}

await generateAndDownload('<h1>Report</h1>', './report.pdf');

Using Axios

const axios = require('axios');

const fileloom = axios.create({
  baseURL: 'https://api.fileloom.io/v1',
  headers: { 'X-API-Key': process.env.FILELOOM_API_KEY },
  timeout: 60000
});

async function generatePdf(html, options = {}) {
  const { data } = await fileloom.post('/pdf/generate', {
    htmlContent: html,
    ...options
  });
  return data;
}

Express.js Integration

const express = require('express');
const app = express();

app.post('/api/invoices/:id/pdf', async (req, res) => {
  try {
    const invoice = await getInvoice(req.params.id);
    
    const response = await fetch('https://api.fileloom.io/v1/pdf/generate', {
      method: 'POST',
      headers: {
        'X-API-Key': process.env.FILELOOM_API_KEY,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        templateId: 'tpl_invoice_v2',
        templateData: invoice,
        filename: `invoice-${invoice.number}.pdf`
      })
    });
    
    const result = await response.json();
    res.json({ pdfUrl: result.data.url });
  } catch (error) {
    res.status(500).json({ error: 'Failed to generate PDF' });
  }
});