Ir al contenido
Cotizaciones

FISCALISTO / API / REFERENCIA

Crear una cotización

POST
/v1/quotes

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.

Autorización

bearerAuth
headerAutorizaciónBearer <llave>

Su llave secreta: fk_test_… en pruebas, fk_live_… en producción. Desarrolladores › Llaves.

Encabezados

Idempotency-Key?string

Opcional (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).

Longitud1 <= length <= 255

Cuerpo de la solicitud

application/json
  1. body
issuer?string

Emisor (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.

Elementos1 <= items <= 200
currency?string

Moneda, clave ISO 4217 de c_Moneda (MXN, USD, EUR…). Por omisión MXN.

Longitud3 <= length <= 3
exchange_rate?number

Tipo de cambio a pesos (TipoCambio). Obligatorio si la moneda no es MXN; use el del DOF del día anterior.

Rango0 < value <= 1000000
payment_form?string

Forma 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.

Patrón^\d{2}$
payment_method?string

Método de pago (MetodoPago): PUE (una sola exhibición, por omisión) o PPD (en parcialidades o diferido, se cobra con complementos de pago).

Uno de"PUE""PPD"
use?string

Uso del CFDI (UsoCFDI), clave de c_UsoCFDI. Por omisión G03, o S01 con régimen 616.

Patrón^[A-Z]{1,2}\d{2}$
notes?string

Observaciones que aparecen en el PDF (no van en el XML).

Longitudlength <= 1000
valid_until?string

Hasta cuándo es válida (AAAA-MM-DD, hasta un año). Por omisión, en 15 días.

Patrón^\d{4}-\d{2}-\d{2}$
terms?string

Condiciones: tiempo de entrega, anticipo, garantía…

Longitudlength <= 2000
auto_invoice?boolean

Al 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.

Cuerpo de la respuesta

Correcto.

application/json
  1. response

Una cotización: su cliente la ve en una liga, la acepta, pide cambios o la rechaza, y se factura.

id*string

Identificador del objeto, con su prefijo (iss_, inv_, ret_, cus_, prd_, emp_, bat_, brn_, whs_, stm_, adj_, evt_, whe_).

livemode*boolean

true en producción (llaves fk_live_), false en pruebas (fk_test_). Lo de pruebas no vale ante el SAT.

object*string

Qué tipo de objeto es («invoice», «customer»…).

issuer*string

El emisor (iss_…).

number*string

Su serie y folio, como lo ve el cliente (COT-12).

version*integer

Cambiar una ya enviada hace una versión nueva con el mismo número; el id contesta siempre la última.

Rango-9007199254740991 <= value <= 9007199254740991
status*string

draft, sent, viewed (el cliente abrió la liga), accepted, rejected, expired (pasó valid_until) o invoiced.

Uno de"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*string

La moneda.

items*array<>

Los conceptos, como los de una factura.

total*|

El total con impuestos.

valid_until*string

Su ú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*boolean

Si 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"}