Saltar al contenido principal

Inicio rápido

1. Instala el paquete

npm install facturapi

2. Crea tu primera factura

// a) Importa el paquete
const Facturapi = require('facturapi');
// b) Crea una instancia del cliente, usando la llave secreta
// de la organización emisora (https://dashboard.facturapi.io/integration/apikeys)
const facturapi = new Facturapi('sk_test_API_KEY');
// c) Crea una factura
const invoice = await facturapi.invoices.create({
customer: {
legal_name: 'Dunder Mifflin',
email: 'email@example.com',
tax_id: 'ABC101010111',
tax_system: '601',
address: {
zip: '85900'
}
},
items: [{
quantity: 1,
product: {
description: 'Ukelele',
product_key: '60131324',
price: 345.60
}
}],
use: 'G01',
payment_form: '28' // Tarjeta de crédito
});
info

Por default se considera que el precio del producto tiene impuestos incluídos. Facturapi se encarga de desglosar los impuestos del producto (siendo 16% de IVA el default) y calcular el precio unitario. Si en lugar de eso requieres que el atributo price sea el precio unitario, debes enviar el parámetro tax_included con el valor false.

Respuesta: Objeto Invoice
{
"id": "58e93bd8e86eb318b019743d",
"created_at": "2017-01-01T14:00:08.000Z",
"livemode": false,
"status": "valid",
"cancellation_status": "none",
"verification_url": "https://verificacfdi.facturaelectronica.sat.gob.mx/default.aspx?id=45BEC0CA-5F1E-491E-9417-698EA48C382A&re=AAA010101AAA&rr=ABC101010111&tt=345.600000&fe=bWApPw==",
"customer": {
"id": "58e93bd8e86eb318b0197456",
"legal_name": "Dunder Mifflin S.A. de C.V.",
"tax_id": "ABC101010111",
"tax_system": "601",
"address": {
"zip": "85900",
"country": "MEX"
}
},
"total": 345.60,
"uuid": "39c85a3f-275b-4341-b259-e8971d9f8a94",
"folio_number": 914,
"series": "A",
"payment_form": "28",
"related": [],
"currency": "MXN",
"exchange": 1,
"items": [{
"quantity": 1,
"discount": 0,
"product": {
"description": "Ukelele",
"price": 345.60,
"tax_included": true,
"taxes": [
{
"type": "IVA",
"rate": 0.16
}
]
}
}],
"stamp": {
"signature": "ZGgQ126+lbo6XxVmeM0Kys1rAllqRaDmaK4yW20B3H5AaVShnItBwKATpxqJuGK1qPmLA2r16B8dAb4UFjR27Xc/+SsNPSwRBYRVKI0AB62jx2Z4uxooiVQBY9Bb6czlgzJb+ftgNvnGwSXzI6QZKpuWRe9LmJvACzqTB3ZdC9QoqaVICDNZ9oaT99txu9ahbJu3ftPhlykXi1SxVTBZ7uUTqsBkc6iEjbSTYpE85bsrhbMw4tDODR7o/PS917whChOFUU0sQenm5sJQMenPcKPyS9JoGQPO/a/4wzxJ2RyWCkw72LNFBbJTsPXcXdOZmEJ06Ixc2Iy24Biz8GEbJg==",
"date": "2021-03-30T00:57:48",
"sat_cert_number": "20001000000300022323",
"sat_signature": "AzYwRdHfDp0BCBaTpT87gtAAE3Q="
}
}

3. Envía la factura por correo electrónico

await facturapi.invoices.sendByEmail(invoice.id);

4. Descarga de XML y PDF

const fs = require('fs');

// Descarga PDF y XML comprimidos en archivo ZIP
const zipStream = await facturapi.invoices.downloadZip(invoice.id);
// Guarda la descarga en un archivo
const file = fs.createWriteStream('./factura.zip');
zipStream.pipe(file);
// O envíalo como respuesta a tu cliente (en ExpressJS)
zipStream.pipe(res);

Siguientes pasos

Este fue un vistazo rápido del uso de Facturapi.

Te invitamos a consultar nuestra sección de ejemplos, así como ver la referencia completa de la API, donde podrás explorar todos los endpoints disponibles en Facturapi.