Inicio rápido
1. Instala el paquete
- Node.js
- C#
- PHP
- cURL
npm install facturapi
dotnet add package Facturapi
composer require facturapi/facturapi-php
# No es necesario instalar nada
2. Crea tu primera factura
- Node.js
- C#
- PHP
- cURL
// 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
});
// a) Importa el paquete
using Facturapi;
// b) Crea una instancia del cliente, usando la llave secreta
// de la organización emisora (https://dashboard.facturapi.io/integration/apikeys)
var facturapi = new FacturapiClient("sk_test_API_KEY");
// c) Crea una factura
var invoice = await facturapi.Invoice.CreateAsync(new Dictionary<string, object>
{
["customer"] = new Dictionary<string, object>
{
["legal_name"] = "Dunder Mifflin",
["email"] = "email@example.com",
["tax_id"] = "ABC101010111",
["tax_system"] = "601",
["address"] = new Dictionary<string, object>
{
["zip"] = "85900"
}
},
["items"] = new Dictionary<string, object>[]
{
new Dictionary<string, object>
{
["quantity"] = 1,
["product"] = new Dictionary<string, object>
{
["description"] = "Ukelele",
["product_key"] = "60131324",
["price"] = 345.60
}
}
},
["use"] = "G01",
["payment_form"] = "28" // Tarjeta de crédito
});
// a) Importa el paquete
use Facturapi\Facturapi;
// b) Crea una instancia del cliente, usando la llave secreta
// de la organización emisora (https://dashboard.facturapi.io/integration/apikeys)
$facturapi = new Facturapi( "sk_test_API_KEY" );
// c) Crea una factura
$invoice = $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
]
],
],
"payment_form" => "28" // Tarjeta de crédito
]);
curl https://www.facturapi.io/v2/invoices \
# a) Autentícate con la API Key de la organización emisora
-H "Authorization: Bearer sk_test_API_KEY" \
-H "Content-Type: application/json" \
# b) Crea una factura
-d '{
"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
- Node.js
- C#
- PHP
- cURL
await facturapi.invoices.sendByEmail(invoice.id);
await facturapi.Invoice.SendByEmailAsync(invoice.Id);
$facturapi->Invoices->send_by_email($invoice->id);
curl https://www.facturapi.io/v2/invoices/58e93bd8e86eb318b019743d/email \
-H "Authorization: Bearer sk_test_API_KEY"
-X POST
4. Descarga de XML y PDF
- Node.js
- C#
- PHP
- cURL
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);
// Descarga PDF y XML comprimidos en archivo ZIP
var zipStream = await facturapi.Invoice.DownloadZipAsync(invoice.Id);
// Guarda la descarga en un archivo
var file = new System.IO.FileStream("C:\\route\\to\\save\\invoice.zip", FileMode.Create);
zipStream.CopyTo(file);
file.Close();
$zip = $facturapi->Invoices->download_zip($invoice->id) // stream containing the PDF and XML as a ZIP file or
$pdf = $facturapi->Invoices->download_pdf($invoice->id) // stream containing the PDF file or
$xml = $facturapi->Invoices->download_xml($invoice->id) // stream containing the XML file or
## Descargar PDF y XML comprimidos en archivo ZIP
curl https://www.facturapi.io/v2/invoices/58e93bd8e86eb318b019743d/zip \
-H "Authorization: Bearer sk_test_API_KEY"
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.