FISCALISTO / API
Recetas de facturación
Las facturas más comunes listas para copiar: con catálogo, a crédito (PPD), en dólares, con retenciones, global a público en general y en lote.
Todas van a POST /v1/invoices con su llave y una Idempotency-Key nueva. Solo cambia el cuerpo; lo que no manda tiene su valor usual (PUE, MXN, uso G03 o S01 con régimen 616, unidad E48, objeto de impuesto 02, IVA 16%, cantidad 1).
Con su catálogo de clientes y productos
Guarde una vez al cliente y al producto, y facture con sus ids. El producto pone su clave, unidad, precio e impuestos; puede cambiar la cantidad o el precio en cada concepto.
curl https://api.fiscalisto.com/v1/customers \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "tax_id": "ICV060329BY0", "legal_name": "INMOBILIARIA CVA", "tax_system": "601", "zip": "33826", "email": "pagos@cva.example" }'curl https://api.fiscalisto.com/v1/invoices \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Idempotency-Key: pedido-A-1043" \
-H "Content-Type: application/json" \
-d '{
"customer": "cus_OufpKqnrvx9p1",
"payment_form": "04",
"items": [{ "product": "prd_OufpKqnrvx9p1", "quantity": 3 }],
"send_email": true
}'Con send_email le llega al cliente el PDF y el XML al correo de su ficha (o al de customer.email); sin ninguno contesta 400 parameter_missing, para que no se timbre una factura que no le llega a nadie. Un cliente nuevo también puede ir completo en customer, como en el inicio rápido; no se guarda en el catálogo.
A crédito (PPD)
Si el cliente le paga después o en partes, la factura va con método PPD y forma de pago 99 (por definir), que Fiscalisto pone sola. Cada pago se registra después con un complemento de pago.
curl https://api.fiscalisto.com/v1/invoices \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Idempotency-Key: contrato-88-oct" \
-H "Content-Type: application/json" \
-d '{
"customer": { "tax_id": "ICV060329BY0", "legal_name": "INMOBILIARIA CVA", "tax_system": "601", "zip": "33826" },
"payment_method": "PPD",
"items": [{ "description": "Implementación del sistema", "product_key": "81111500", "unit_price": 45000 }]
}'En dólares
Mande la moneda y el tipo de cambio del día (el que publica el DOF el día hábil anterior). Los precios van en dólares.
curl https://api.fiscalisto.com/v1/invoices \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Idempotency-Key: pedido-USD-17" \
-H "Content-Type: application/json" \
-d '{
"customer": { "tax_id": "ICV060329BY0", "legal_name": "INMOBILIARIA CVA", "tax_system": "601", "zip": "33826" },
"payment_form": "03",
"currency": "USD",
"exchange_rate": 18.35,
"items": [{ "description": "Licencia anual", "product_key": "43232400", "unit_price": 1200 }]
}'Con retenciones
Las retenciones van por concepto, como tasa. Por ejemplo, un flete a una persona moral lleva retención de IVA del 4%:
curl https://api.fiscalisto.com/v1/invoices \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Idempotency-Key: flete-5521" \
-H "Content-Type: application/json" \
-d '{
"customer": { "tax_id": "ICV060329BY0", "legal_name": "INMOBILIARIA CVA", "tax_system": "601", "zip": "33826" },
"payment_form": "03",
"items": [{ "description": "Flete Monterrey–Saltillo", "product_key": "78101800", "unit_price": 8000, "iva_retention": 0.04 }]
}'La respuesta trae lo retenido en taxes.iva_withheld y taxes.isr_withheld, y el total ya con ellas restadas. Otras comunes: honorarios o arrendamiento de una persona física a una moral (isr_retention: 0.10, iva_retention: 0.106667) y RESICO a una persona moral (isr_retention: 0.0125).
Global a público en general
Lo que vendió con ticket a quien no pidió factura va en una factura global por día, semana, mes o bimestre. El cliente es el público en general: RFC XAXX010101000, nombre PUBLICO EN GENERAL, régimen 616 y, como código postal, el del emisor (en pruebas, el del emisor de pruebas del SAT: 42501). Cada concepto es una venta, con el número del ticket en sku.
curl https://api.fiscalisto.com/v1/invoices \
-H "Authorization: Bearer $FISCALISTO_API_KEY" \
-H "Idempotency-Key: global-2026-10" \
-H "Content-Type: application/json" \
-d '{
"customer": { "tax_id": "XAXX010101000", "legal_name": "PUBLICO EN GENERAL", "tax_system": "616", "zip": "42501" },
"global": { "periodicity": "04", "months": "10", "year": 2026 },
"payment_form": "01",
"items": [
{ "description": "Venta", "product_key": "01010101", "unit_key": "ACT", "sku": "T-1001", "unit_price": 431.03 },
{ "description": "Venta", "product_key": "01010101", "unit_key": "ACT", "sku": "T-1002", "unit_price": 862.07 }
]
}'Muchas a la vez
Para cientos o miles de facturas (las cuotas del mes, la facturación de un marketplace), use un lote: una sola solicitud con hasta 1,000.
Para saber más
- Cada campo, con su nombre en el XML del SAT y su catálogo, está en la referencia de
POST /v1/invoices. - Busque claves de producto y unidad con
GET /v1/sat_catalogs/product_keys?q=…. - Complementos: Carta Porte, comercio exterior, instituciones educativas, impuestos locales y más.
Datos fiscales del cliente
Revise el RFC, nombre, régimen, código postal y uso del CFDI de un cliente antes de timbrar, o mándele una liga para que él mismo los dé con su constancia.
Autofactura
Registre cada venta como ticket y deje que su comprador se facture solo, en su página o en el portal del emisor; lo que nadie factura entra en la factura global.