Official HTTP client for FacturAPI.
FacturAPI helps developers generate valid electronic invoices (CFDI) in Mexico.
If you've used Stripe or Conekta, you'll find the API style familiar.
| Runtime | Support |
|---|---|
| Node.js | >=18 (CI tested on 18, 20, 22, 24) |
| Browser | Environments with fetch, FormData, and Blob |
| React Native | Versions that provide global fetch, FormData, and Blob |
npm i facturapiThis SDK is TypeScript-first and exports its public types.
Make sure you have a FacturAPI account and your API key.
import Facturapi from 'facturapi';
const facturapi = new Facturapi(process.env.FACTURAPI_KEY!);CommonJS:
const Facturapi = require('facturapi').default;const customer = await facturapi.customers.create({
legal_name: 'Walter White',
tax_id: 'WIWA761018',
email: 'walterwhite@gmail.com',
address: {
zip: '06800',
country: 'MEX',
},
});const invoice = await facturapi.invoices.create({
customer: 'YOUR_CUSTOMER_ID',
payment_form: Facturapi.PaymentForm.TRANSFERENCIA_ELECTRONICA_DE_FONDOS,
items: [
{
quantity: 1,
product: 'YOUR_PRODUCT_ID',
},
],
});downloadZip, downloadPdf and downloadXml return a binary result:
- Node.js: stream-like object
- Browser:
Blob
import fs from 'fs';
const file = await facturapi.invoices.downloadZip(invoice.id);
// Node-first style (explicit cast)
const stream = file as NodeJS.ReadableStream;
stream.pipe(fs.createWriteStream('/tmp/invoice.zip'));Portable style (Node + browser):
const file = await facturapi.invoices.downloadZip(invoice.id);
if ('pipe' in file && typeof file.pipe === 'function') {
file.pipe(fs.createWriteStream('/tmp/invoice.zip'));
} else {
const url = URL.createObjectURL(file);
window.open(url, '_blank');
}await facturapi.invoices.sendByEmail(invoice.id, {
email: 'customer@example.com',
});Visit docs.facturapi.io.
Please report it on the issue tracker.
Send us your PR! We appreciate your help :)