FISCALISTO / API / REFERENCIA
Crear una cotización
Una cotización en borrador, con los conceptos y las condiciones de pago de una factura (se revisan con las mismas reglas, así que siempre se puede facturar). customer es un cliente de su catálogo, uno con sus datos fiscales (se agrega a sus clientes) o solo name y email si aún no los tiene. Se manda con POST /v1/quotes/{id}/send.
bearerAuthAutorizaciónBearer <llave>Su llave secreta: fk_test_… en pruebas, fk_live_… en producción. Desarrolladores › Llaves.
Idempotency-Key?stringOpcional (los SDK la mandan solos). Si la respuesta se pierde, repita la solicitud con el mismo valor durante 24 horas: contesta lo mismo, con idempotent-replayed: true, y no lo hace dos veces (ni crea, ni manda correos, ni cobra).
1 <= length <= 255application/json- body
issuer?stringEmisor (iss_…). Si la llave tiene un solo emisor o la cuenta tiene uno solo, puede omitirse.
customer*||Un cliente de su catálogo (cus_…), uno con sus datos fiscales (como en POST /v1/invoices: se agrega a sus clientes) o solo name y email si aún no los tiene.
items*array<>Los conceptos, como en POST /v1/invoices.
1 <= items <= 200currency?stringMoneda, clave ISO 4217 de c_Moneda (MXN, USD, EUR…). Por omisión MXN.
3 <= length <= 3exchange_rate?numberTipo de cambio a pesos (TipoCambio). Obligatorio si la moneda no es MXN; use el del DOF del día anterior.
0 < value <= 1000000payment_form?stringForma de pago (FormaPago), clave de c_FormaPago: 01 efectivo, 03 transferencia, 04 tarjeta de crédito, 28 débito, 99 por definir… Obligatoria con PUE; con PPD es 99.
^\d{2}$payment_method?stringMétodo de pago (MetodoPago): PUE (una sola exhibición, por omisión) o PPD (en parcialidades o diferido, se cobra con complementos de pago).
"PUE""PPD"use?stringUso del CFDI (UsoCFDI), clave de c_UsoCFDI. Por omisión G03, o S01 con régimen 616.
^[A-Z]{1,2}\d{2}$notes?stringObservaciones que aparecen en el PDF (no van en el XML).
length <= 1000valid_until?stringHasta cuándo es válida (AAAA-MM-DD, hasta un año). Por omisión, en 15 días.
^\d{4}-\d{2}-\d{2}$terms?stringCondiciones: tiempo de entrega, anticipo, garantía…
length <= 2000auto_invoice?booleanAl aceptarla, timbrar la factura sola (con los datos fiscales del cliente; si no los tiene, la página se los pide primero). Por omisión false: la factura se timbra con POST /v1/quotes/{id}/invoice.
Correcto.
application/json- response
Una cotización: su cliente la ve en una liga, la acepta, pide cambios o la rechaza, y se factura.
id*stringIdentificador del objeto, con su prefijo (iss_, inv_, ret_, cus_, prd_, emp_, bat_, brn_, whs_, stm_, adj_, evt_, whe_).
livemode*booleantrue en producción (llaves fk_live_), false en pruebas (fk_test_). Lo de pruebas no vale ante el SAT.
object*stringQué tipo de objeto es («invoice», «customer»…).
issuer*stringEl emisor (iss_…).
number*stringSu serie y folio, como lo ve el cliente (COT-12).
version*integerCambiar una ya enviada hace una versión nueva con el mismo número; el id contesta siempre la última.
-9007199254740991 <= value <= 9007199254740991status*stringdraft, sent, viewed (el cliente abrió la liga), accepted, rejected, expired (pasó valid_until) o invoiced.
"draft""sent""viewed""accepted""rejected""expired""invoiced"url*|La liga donde el cliente la ve, descarga su PDF, la acepta, pide cambios o la rechaza; null mientras sea borrador.
customer*A quién va: tax_id null si aún no tiene sus datos fiscales; catalog_id es su cliente (cus_…) en su catálogo, o null.
currency*stringLa moneda.
items*array<>Los conceptos, como los de una factura.
total*|El total con impuestos.
valid_until*stringSu último día de validez (AAAA-MM-DD).
terms*|Las condiciones impresas: entrega, anticipo, garantía…
notes*|Las notas, como las de una factura.
auto_invoice*booleanSi al aceptarla se timbra la factura sola.
customer_comment*|Lo que escribió el cliente al pedir cambios o al rechazarla, o null.
sent_at*|Cuándo se envió.
viewed_at*|Cuándo el cliente abrió la liga por primera vez.
decided_at*|Cuándo se aceptó o rechazó.
decided_by*|customer (en su liga) o user (usted, con POST /v1/quotes/{id}/accept o desde la app).
invoice*|La factura (inv_…) que se timbró de ella, o null.
created_at*|Cuándo se creó.
curl -X POST 'https://api.fiscalisto.com/v1/quotes' \ -H 'Authorization: Bearer fk_test_…' \ -H 'Idempotency-Key: 8f14e45f-ceea-467a-9575-6a1b0e5f3c21' \ -H 'Content-Type: application/json' \ -d '{ "customer": "cus_OufpKqnrvx9p42", "payment_form": "03", "items": [ { "description": "Desarrollo del sitio web", "product_key": "81112103", "unit_price": 45000 } ], "terms": "50% de anticipo, entrega en 4 semanas.", "auto_invoice": true}'{ "id": "quo_OufpKqnrvx9p3Kd8wQm2XyT5uBcW8sKdLx", "object": "quote", "livemode": false, "issuer": "iss_OufpKqnrvx9p", "number": "COT-12", "version": 1, "status": "sent", "url": "https://fiscalisto.com/cotizacion/7Hq2mZr1XyT5uBcW8sKdLx0VeNOufpKq", "customer": { "tax_id": "ICV060329BY0", "name": "INMOBILIARIA CVA", "email": "compras@cva.example", "catalog_id": "cus_OufpKqnrvx9p42" }, "currency": "MXN", "items": [ { "description": "Desarrollo del sitio web", "product_key": "81112103", "quantity": 1, "unit_key": "E48", "unit_price": 45000 } ], "total": 52200, "valid_until": "2026-11-09", "terms": "50% de anticipo, entrega en 4 semanas.", "notes": null, "auto_invoice": true, "customer_comment": null, "sent_at": "2026-10-25T10:12:00-06:00", "viewed_at": null, "decided_at": null, "decided_by": null, "invoice": null, "created_at": "2026-10-25T10:05:00-06:00"}