facturapi
Version:
SDK oficial de Facturapi para Node.js y navegadores. Integra facturación electrónica en México (CFDI) de forma simple y obtén una perspectiva fiscal completa de tu operación, con búsquedas indexadas, envío de documentos y trazabilidad.
129 lines (90 loc) • 2.83 kB
Markdown
[](https://badge.fury.io/js/facturapi)
[](https://github.com/FacturAPI/facturapi-node/actions/workflows/ci.yml)

Official HTTP client for [FacturAPI](https://www.facturapi.io).
FacturAPI helps developers generate valid electronic invoices (CFDI) in Mexico.
If you've used [Stripe](https://stripe.com) or [Conekta](https://conekta.io), you'll find the API style familiar.
## Compatibility
| 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` |
```bash
npm i facturapi
```
This SDK is TypeScript-first and exports its public types.
Make sure you have a FacturAPI account and your API key.
```ts
import Facturapi from 'facturapi';
const facturapi = new Facturapi(process.env.FACTURAPI_KEY!);
```
CommonJS:
```javascript
const Facturapi = require('facturapi').default;
```
```ts
const customer = await facturapi.customers.create({
legal_name: 'Walter White',
tax_id: 'WIWA761018',
email: 'walterwhite@gmail.com',
address: {
zip: '06800',
country: 'MEX',
},
});
```
```ts
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`
```ts
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):
```ts
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');
}
```
```ts
await facturapi.invoices.sendByEmail(invoice.id, {
email: 'customer@example.com',
});
```
Visit [docs.facturapi.io](https://docs.facturapi.io).
Please report it on the issue tracker.
Send us your PR! We appreciate your help :)
contacto@facturapi.io